将多个PDF文件合并/转换成一个PDF

我怎样才能合并/转换多个PDF文件到一个大的PDF文件?

我尝试了以下,但目标文件的内容不是预期的:

convert file1.pdf file2.pdf merged.pdf 

我需要一个非常简单的/基本的命令行(CLI)解决scheme。 最好的是,如果我可以将合并/转换的输出直接转换成pdf2ps (就像我以前在这里问过的问题: Linuxpipe道(convert – > pdf2ps – > lp) )。

考虑到pdfunite是poppler的一部分,它有更高的安装机会,使用也比pdftk简单:

 pdfunite in-1.pdf in-2.pdf in-n.pdf out.pdf 

试试好的鬼子脚本:

 gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=merged.pdf mine1.pdf mine2.pdf 

或者甚至用于低分辨率PDF的改进版本(感谢Adriano指出了这一点):

 gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sOutputFile=merged.pdf mine1.pdf mine2.pdf 

在这两种情况下,输出分辨率都比使用convert的这种方式要高得多:

 convert -density 300x300 -quality 100 mine1.pdf mine2.pdf merged.pdf 

这样你就不需要安装任何东西,只需要在系统中安装已经安装的东西(至less在我的rhel中都默认安装)。

希望这可以帮助,

更新:首先感谢您的所有好评! 只是一个提示,可能会为你们工作,谷歌search后,我发现一个精湛的技巧缩小PDF的大小,我减less了一个300 MB的PDF只有15 MB的分辨率和可接受的PDF! 所有这一切都与好幽灵,这里是:

 gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -dDetectDuplicateImages -dCompressFonts=true -r150 -sOutputFile=output.pdf input.pdf 

干杯!!

对不起,我设法使用谷歌和一点运气自己find答案:)

对于有兴趣的人

我在我们的debian服务器上安装了pdftk(pdf工具包),并使用以下命令实现了所需的输出:

 pdftk file1.pdf file2.pdf cat output output.pdf 

这反过来可以直接传送到pdf2ps。

另外pdfjoin a.pdf b.pdf将创build一个新的b-joined.pdf的内容a.pdf和b.pdf

你可以直接使用convert命令,

例如

 convert sub1.pdf sub2.pdf sub3.pdf merged.pdf 

如果你想将所有下载的图像转换成一个pdf然后执行

convert img{0..19}.jpg slides.pdf

Apache PDFBox http://pdfbox.apache.org/

PDFMerger此应用程序将采取PDF文件的列表并合并它们,保存在一个新的文件的结果。

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

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

它保留书签,链接注释,acroforms等。它实际上有相当多的选项,你可以玩,只要运行sejda-console merge -h看到他们。

我喜欢Chasmo的想法,但我主张利用诸如此类的优点

 convert $(ls *.pdf) ../merged.pdf 

给多个源文件进行convert可以将它们合并为一个通用的pdf。 该命令将实际目录中具有.pdf扩展名的所有文件合并到父目录的merged.pdf中。

这是我使用的一种方法,很容易实现。 这将需要在这里可以下载的fpdffpdi库:

  • FPDF: http ://www.fpdf.org/en/download.php
  • FPDI: 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'); 

我第二个pdfunitebuild议。 然而,我正在尝试合并> 2k PDF文件越来越多的错误Argument list too long错误。

我转向Python和这两个外部软件包: PyPDF2 (处理PDF相关的所有东西)和natsort (做一个“自然”的目录的文件名)。 如果这可以帮助某人:

 from PyPDF2 import PdfFileMerger import natsort import os DIR = "dir-with-pdfs/" OUTPUT = "output.pdf" file_list = filter(lambda f: f.endswith('.pdf'), os.listdir(DIR)) file_list = natsort.natsorted(file_list) # 'strict' used because of # https://github.com/mstamy2/PyPDF2/issues/244#issuecomment-206952235 merger = PdfFileMerger(strict=False) for f_name in file_list: f = open(os.path.join(DIR, f_name), "rb") merger.append(f) output = open(OUTPUT, "wb") merger.write(output) 

使用python的PDF工具https://pypi.python.org/pypi/pdftools/1.0.6

下载tar.gz文件并解压缩并像下面那样运行命令

 python pdftools-1.1.0/pdfmerge.py -o output.pdf -d file1.pdf file2.pdf file3 

在运行上面的命令之前,你应该安装pyhton3

这个工具支持下面

  • 去掉
  • 旋转
  • 分裂
  • 合并
  • 压缩

你可以在下面的链接中find更多的细节,它是开源的

https://github.com/MrLeeh/pdftools