如何将多个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)中所尝试的那样)。
当前回答
这里有一个我使用的方法,它有效且易于实现。这将需要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');
其他回答
pdfunite可以合并整个PDF。例如,如果您想要file1.pdf中的第2-7页和file2.pdf中的1,3,4页,则必须使用pdfsepart将文件拆分为单独的pdf,以便为每个页面提供给pdfunite。
此时,您可能需要一个具有更多选项的程序。qpdf是我发现的处理PDF的最佳工具。pdftk更大、更慢,Red Hat/Fedora不打包它,因为它依赖于gcj。其他PDF实用程序具有Mono或Python依赖关系。我发现qpdf生成的输出文件比使用pdfseparate和pdfunite将页面组装成30页的输出PDF要小得多,分别为970kB和16450kB。因为它提供了更多的选项,qpdf的命令行并没有那么简单;合并文件1和文件2的原始请求可以使用
qpdf --empty --pages file1.pdf file2.pdf -- merged.pdf
你可以看到使用免费和开源的pdftools(免责声明:我是它的作者)。
它基本上是Latex pdfpages包的Python接口。
要逐个合并pdf文件,您可以运行:
pdftools --input-file file1.pdf --input-file file2.pdf --output output.pdf
要将目录中的所有pdf文件合并在一起,可以运行:
pdftools --input-dir ./dir_with_pdfs --output output.pdf
您可以直接使用convert命令,
e.g.
convert sub1.pdf sub2.pdf sub3.pdf merged.pdf
PdfCpu非常有用:
pdfcpu merge c.pdf a.pdf b.pdf
https://pdfcpu.io/core/merge
您可以使用sejda控制台,免费且开源。解压缩并运行sejda console merge-f file1.pdf file2.pdf-o merged.pdf
它保留了书签、链接注释、acroforms等。实际上,它有很多选项可以使用,只需运行sejda console merge-h即可查看所有选项。