여러 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가 준비되었습니다! 이후 분할된 페이지를 삭제할 수 있습니다.