如何将多个PDF文件合并/转换为一个大型PDF文件?
我尝试了以下操作,但目标文件的内容与预期不符:
convert file1.pdf file2.pdf merged.pdf
我需要一个非常简单/基本的命令行(CLI)解决方案。最好是我可以将合并/转换的输出直接管道化为pdf2ps(正如我之前在这里提出的问题:Linux管道化(convert->pdf2ps->lp)中所尝试的那样)。
如何将多个PDF文件合并/转换为一个大型PDF文件?
我尝试了以下操作,但目标文件的内容与预期不符:
convert file1.pdf file2.pdf merged.pdf
我需要一个非常简单/基本的命令行(CLI)解决方案。最好是我可以将合并/转换的输出直接管道化为pdf2ps(正如我之前在这里提出的问题:Linux管道化(convert->pdf2ps->lp)中所尝试的那样)。
当前回答
您可以直接使用convert命令,
e.g.
convert sub1.pdf sub2.pdf sub3.pdf merged.pdf
其他回答
虽然它不是命令行解决方案,但它可能会帮助macos用户:
选择您的PDF文件右键单击突出显示的文件选择快速操作>创建PDF
这里有一个我使用的方法,它有效且易于实现。这将需要fpdf和fpdi库,可在此处下载:
FPDF:http://www.fpdf.org/en/download.phpFPDI:https://www.setasign.com/products/fpdi/downloads
require('fpdf.php');
require('fpdi.php');
$files = ['doc1.pdf', 'doc2.pdf', 'doc3.pdf'];
$pdf = new FPDI();
foreach ($files as $file) {
$pdf->setSourceFile($file);
$tpl = $pdf->importPage(1, '/MediaBox');
$pdf->addPage();
$pdf->useTemplate($tpl);
}
$pdf->Output('F','merged.pdf');
这里是一个检查合并错误的Bash脚本。
我遇到的问题是,一些PDF合并产生了一些错误消息。由于查找腐败的PDF文件需要反复尝试,我为此编写了一个脚本。
以下Bash脚本逐一合并文件夹中的所有可用PDF,并在每次合并后显示成功状态。只需将其与PDF一起复制到文件夹中,然后从那里执行。
#!/bin/bash
PDFOUT=_all_merged.pdf
rm -f "${PDFOUT}"
for f in *.pdf
do
printf "processing %-50s" "$f ..." >&2
if [ -f "$PDFOUT" ]; then
# https://stackoverflow.com/questions/8158584/ghostscript-to-merge-pdfs-compresses-the-result
# -dPDFSETTINGS=/prepress
status=$(gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile="${PDFOUT}.new" "${PDFOUT}" "$f" 2> /dev/null)
if [ "$status" ]
then
echo "gs ERROR: $status" >&2
else
echo "successful" >&2
fi
mv "${PDFOUT}.new" "${PDFOUT}"
else
cp "$f" "${PDFOUT}"
echo "successful" >&2
fi
done
示例输出:
processing inp1.pdf ... successful
processing inp2.pdf ... successful
我从终端使用了qpdf,在Windows(Moaxterm)和Linux上为我工作,例如,在新文件C.pdf中加入A.pdf和B.pdf的命令是:
qpdf--空--oficios/A.pdfinformes/B.pdf--salida/C.pdf页面
如果需要更多文档[https://net2.com/how-to-merge-or-split-pdf-files-on-linux/][1]
如果您想使用Ghostscript将所有PDF文件连接到一个目录中,可以使用find来实现这一点。这里有一个例子
find . -name '*.pdf' -exec gs -o -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sOutputFile=../out.pdf {} +
将在当前目录中找到所有pdf,并在父目录中创建out.pdf。如果他们正在寻找一种快速的方法来使用ghostscript创建整个目录,可能会很有用。