PDF를 연결하되 PDF를 짝수 페이지로 확장합니다.

PDF를 연결하되 PDF를 짝수 페이지로 확장합니다.

여러 PDF를 연결하고 싶지만 인쇄 목적으로 홀수 페이지의 각 문서에 빈 페이지를 추가하고 싶습니다. PDFTK를 사용하여 이 작업을 수행할 수 있나요?

답변1

이것은 LaTeX를 사용하여 현재 디렉토리의 모든 PDF 파일을 반복하고 하나의 PDF로 연결하는 간단한 작은 스크립트입니다. 페이지 수가 홀수인 PDF에는 그 뒤에 빈 페이지가 추가됩니다.

#!/bin/bash

cat<<EoF > all.tex
\documentclass{article}
\usepackage{pdfpages}
\begin{document}
EoF

## rename the PDFs to something safe
c=0;
for f in *pdf
do
        ## Link the PDF with a safe name
        ln -s "$f" "$c".pdf
        ## Include the PDF in the tex file
        printf '\includepdf[pages=-]{%s.pdf}\n' "$c" >> all.tex;
        ## Get the number of pages
        pages=$(pdfinfo "$c".pdf | grep -oP '^Pages:\s*\K\d+')
        ## Add an empty page if they are odd
        [[ $(expr "$pages" % 2) != 0 ]] && 
            printf '%s\n' "\newpage\null" >> all.tex

        ((c++));
done

printf '\\end{document}' >> all.tex;
pdflatex all.tex

이것은 LaTeX이므로 모든 종류의 추가 작업을 수행할 수 있습니다. 예를 들어, 각 PDF를 클릭 가능한 목차가 있는 자체 섹션에 넣을 수 있습니다.

#!/bin/bash

cat<<EoF > all.tex
\documentclass{article}
\usepackage{pdfpages}
\usepackage[colorlinks=true,linkcolor=blue,linktoc=page]{hyperref}
\begin{document}
\tableofcontents
\newpage
EoF
## rename the PDFs to something safe
c=0;
for f in *pdf
do
        ## Link the PDF with a safe name
        ln -s "$f" "$c".pdf
        ## Include the PDF in the tex file
        cat<<EoF >> all.tex
\section{${f//.pdf}}
\includepdf[pages=-]{$c.pdf}
EoF
        ## Get the number of pages
        pages=$(pdfinfo "$c".pdf | grep -oP '^Pages:\s*\K\d+')
        ## This time, because each PDF has its own section title
        ## we want to add a blank page to the even numbered ones
        [[ $(expr "$pages" % 2) = 0 ]] && 
            printf '%s\n' "\newpage\null\newpage" >> all.tex

        ((c++));
done

printf '\\end{document}' >> all.tex;
## Need to run it twice to build the ToC
pdflatex all.tex; pdflatex all.tex;

답변2

틀림없이. 그냥 빈 페이지를 만드세요(예를 들어)

echo "" | ps2pdf -sPAPERSIZE=a4 - blank.pdf

blank.pdf홀수 페이지의 모든 문서에 추가됩니다 . 예를 들어

pdftk \
BLANK=blank.pdf \
A=foo1.pdf \
B=foo2.pdf \
C=foo3.pdf \
cat A BLANK B BLANK C \
output bar.pdf

답변3

나 같은 미래의 방랑자들을 위해. @Faheem Mitha의 답변을 다음과 결합한 스크립트를 작성했습니다.여기

#!/bin/sh
# USAGE: ./concat-pdf.sh *.pdf output-file.pdf

ALL_FILES=""
BLANK_FILE="/tmp/blank.pdf"

for OUTPUT_FILE; do true; done
if test -f "$OUTPUT_FILE"; then
    echo "$OUTPUT_FILE already exists"
    exit 1
fi

echo "" | ps2pdf -sPAPERSIZE=a4 - $BLANK_FILE
for PDF_FILE; do
    if [ "$PDF_FILE" != "$OUTPUT_FILE" ]; then
        pages=$(strings < "$PDF_FILE" | sed -n 's|.*Count -\{0,1\}\([0-9]\{1,\}\).*|\1|p' | sort -rn | head -n 1)
        ALL_FILES="$ALL_FILES \"$PDF_FILE\""
        [ $((pages%2)) -ne 0 ] && ALL_FILES="$ALL_FILES $BLANK_FILE"
    fi
done

echo "pdftk $ALL_FILES cat output \"$OUTPUT_FILE\""

pdftk $ALL_FILES cat output "$OUTPUT_FILE"

rm -f $BLANK_FILE

답변4

Ubuntu에서 Pdftk를 사용하여 PDF 파일의 모든 페이지 뒤에 빈 페이지를 만들기 위해 수행한 단계는 다음과 같습니다.

1-pdftk 설치(아직 설치되지 않은 경우)

sudo apt-get install pdftk

2- Blank.pdf라는 이름의 빈 PDF 파일을 만듭니다. ImageMagick 패키지의 변환 명령을 사용하여 빈 이미지를 만든 다음 PDF로 변환할 수 있습니다. 다음 명령을 실행하십시오.

sudo apt install imagemagick
convert -size 595x842 xc:white blank.jpg
convert blank.jpg blank.pdf

보안 정책 오류가 발생하면 루트 권한으로 텍스트 편집기를 사용하여policy.xml 파일을 엽니다. 예를 들어 다음 명령을 사용하여 nano 편집기로 열 수 있습니다.

sudo nano /etc/ImageMagick-6/policy.xml

PDF의 권한 속성 값을 없음에서 읽기|쓰기로 변경합니다. 수정된 줄은 다음과 같아야 합니다.

<policy domain="coder" rights="read|write" pattern="PDF" />

3- 이제 PDF 파일이 있는 디렉토리로 이동하여 다음 명령을 사용하십시오.

pdftk input.pdf burst output burst_output%d.pdf
pdftk $(for f in burst_output*.pdf; do echo -n "$f blank.pdf "; done) cat output final.pdf

"input" 대신 입력 파일의 이름을 입력하세요.

이제 Final.pdf가 준비되었습니다! 이후 분할된 페이지를 삭제할 수 있습니다.

관련 정보