我有两个 pdf 或 postscript 文件(我可以使用任何一个)。我想要做的是将每个页面合并到另一个页面上,以便文档 A 的第 1 页将与文档 B 的第 1 页组合以生成输出文档的第 1 页。这不是我必须以编程方式做的事情,尽管这会有所帮助。
有任何想法吗?
我有两个 pdf 或 postscript 文件(我可以使用任何一个)。我想要做的是将每个页面合并到另一个页面上,以便文档 A 的第 1 页将与文档 B 的第 1 页组合以生成输出文档的第 1 页。这不是我必须以编程方式做的事情,尽管这会有所帮助。
有任何想法吗?
您可以使用命令行工具pdftk使用stamp
orbackground
选项对 pdf 文件执行此操作。
例如
$ pdftk file1.pdf background file2.pdf output combinedfile.pdf
这仅适用于一页背景文件。如果您有多个页面,则可以改用该multibackground
命令。
我通过使用pyPdf成功解决了这个问题(仅限 PDF 和 Python) ,特别是mergePage操作。
从文档:
# add page 4 from input1, but first add a watermark from another pdf:
page4 = input1.getPage(3)
watermark = PdfFileReader(file("watermark.pdf", "rb"))
page4.mergePage(watermark.getPage(0))
应该足以得到这个想法。
如果您只处理后记,则可能唯一的“分页符”是“显示页”运算符。
在这种情况下,您可以简单地从文件一的开头抓取 postscript 数据到“showpage”的第一个实例,对另一个文件执行相同的操作,然后连接这两个 postscript 块以创建新页面。
如果 2 个文件只有一页,那么您可以简单地加入 2 个文件。
PDFbox for Java 支持 Overlay 类,它允许以这种方式合并 PDF。请参阅此答案:使用 PDFBox 进行水印
但是,根据我的经验,PyPDF2 和 PDFbox 都不可靠,但这也许对某人有帮助。
这里的许多答案似乎都已经过时了。对于使用 pdftk 的已接受答案尤其如此。Pdftk 很旧,错误处理很糟糕,需要旧版本的库,并且不再为 ubuntu 打包。如果可以避免的话,2022 年的任何人都不应该将 pdftk 用于任何事情。
Qpdf 是一个不错的开源程序,它做许多与 pdftk 相同的事情,它可以完成以下任务:
qpdf a.pdf --overlay b.pdf -- c.pdf
PdfFileStamp
带有类的 Aspose.Pdf.Kit也可以做到这一点。它大部分时间都能正常工作。
我使用了 Mac OS 工具PDFClerk Pro。我导入了 PDF 页面,然后使用“合并页面(堆叠)”选项将它们合并。这真的让我印象深刻。
2022年以后
对于许多用户来说,PDFTK 仍然是一个强有力的竞争者,它为许多任务提供了简单的跨平台命令行。
PDFtk Server 不需要 Adobe Acrobat 或 Reader,它可以在 Windows、Mac OS X 和 Linux 上运行。
您将在其他答案中看到多个命令。但一个缺点是它需要获得分发许可。
需要商业许可证才能将 PDFtk 与您的商业产品一起分发。
另一个每日更新的跨平台解决方案是 Ghostscript(但 Windows 二进制文件通常是两年一次),它也需要商业许可证。
它的主要优势是能够合并来自 PostScript 和 PDF 的指定页面以及 PDFTK 未处理的其他格式。然而,它并不自称是最佳的 PDF 合并工具。同样,在 StackOverflow 的答案中有许多有据可查的方法来使用该祖父应用程序来处理不同的组合任务,但可能需要比快速的一种更复杂的方法,并且许多用户会将 PDL 或 PS 处理与 PDFTK(上图)结合起来进行最终覆盖。
那么什么是经常更新的、可用于商业用途 的以及一次调用即可完成任务呢?答案是 QPDF(根据 Apache 许可证,版本 2.0 获得许可),它具有覆盖和底层选项,还有太多其他功能无法列出,但仅是 PDF。
最简单的一种方法是从其他 2 个页面编写一个新页面,比如说第 1 页,而不更改任何一个源。缺点是包含密码在内的众多选项会使语法变得复杂,好消息是它可能会在下一个版本 11 中进行大修。还要注意它不喜欢带空格的文件名。
首先从file1生成一个新的空输入文件,第1页(很简单)
qpdf --empty --pages "file1.pdf" 1 -- "output.pdf"
现在用 file2 的第一页覆盖它(这有点复杂)
qpdf output.pdf --overlay "file2.pdf" --from=1 -- --replace-input
这些命令可以组合在一个更简单的行中,对于这个例子,让我们使用文件 1 的第 2 页
qpdf --empty --pages "file1.pdf" 2 -- --overlay "file2.pdf" --from=1 -- "output2.pdf"
您还需要注意,混合页面大小会起作用,但可能不会像预期的那样,因此第二个在第一个被居中并缩小以适合。
您可以将两个 pdf 都转换为图像,然后将一个覆盖在另一层之上。
您可以使用它的合适图形库将起作用。
只要您没有在您选择的语言或图形/pdf 库中遇到问题,上述水印建议也具有很大的潜力。
对于 OS X,有 PDF 信头。除了覆盖 PDF 之外,什么也不做。https://itunes.apple.com/us/app/pdf-letterhead/id976548033?mt=12
VeryPDF PDF Editor 有 PDF Overlay 功能,看这个网页,
http://www.verypdf.com/wordpress/201304/how-to-overlay-pdf-to-another-pdf-35885.html