连接 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

如果出现安全策略错误,请使用具有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 已准备就绪!您可以在此之后删除分割的页面。

相关内容