将多个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
中。
这是我使用的一种方法,很容易实现。 这将需要在这里可以下载的fpdf和fpdi库:
- 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');
我第二个pdfunite
build议。 然而,我正在尝试合并> 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更多的细节,它是开源的