我想连接一堆 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
如果出现安全策略错误,请使用具有root权限的文本编辑器打开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
输入输入文件的名称而不是“输入”。
现在您的 Final.pdf 已准备就绪!您可以在此之后删除分割的页面。