如何将多个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

其他回答

作为PyMuPDF(MuPDF的Python绑定)的开发人员之一,我有偏见。

你可以很容易地用它做你想做的事情(还有更多)。骨架代码的工作原理如下:

#-------------------------------------------------
import fitz         # the binding PyMuPDF
fout = fitz.open()  # new PDF for joined output
flist = ["1.pdf", "2.pdf", ...]  # list of filenames to be joined

for f in flist:
    fin = fitz.open(f)  # open an input file
    fout.insertPDF(fin) # append f
    fin.close()

fout.save("joined.pdf")
#-------------------------------------------------

仅此而已。有几个选项可用于仅选择页面范围、维护联合目录、反转页面顺序或更改页面旋转等。

我们在PyPi上。

您可以使用sejda控制台,免费且开源。解压缩并运行sejda console merge-f file1.pdf file2.pdf-o merged.pdf

它保留了书签、链接注释、acroforms等。实际上,它有很多选项可以使用,只需运行sejda console merge-h即可查看所有选项。

这里有一个我使用的方法,它有效且易于实现。这将需要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');

你可以看到使用免费和开源的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

Apache PDFBoxhttp://pdfbox.apache.org/

PDF发电机此应用程序将获取pdf文档列表并将其合并,将结果保存到新文档中。

用法:java-jar pdfbox-app-x.y.z.jar PDFMerger“源PDF文件(2..n)”“目标PDF文件”