我有两个 PDF 文件,每个文件的页数相同。我想要一个页数相同的PDF文件,并且每一页都是两个源文件中相同页数的页面的叠加。例如,第 1 页文件 1 + 第 1 页文件 2 = 结果第 1 页,等等。
使用 pdftk 我可以用一种简单的方式做到这一点:
pdftk file1.pdf 多背景 file2.pdf 输出 file3.pdf
但是,我现在需要在 Fedora 机器上执行此操作,而 Fedora 没有 pdftk。我无法构建它,因为 libgcj abd gcc-java 也不存在。
作为最后的手段,我可以创建一个 OpenSUSE VM,因为 OpenSUSE 有 pdftk。但也许有一个工具可以完成相同的工作并且可以在 Fedora 上使用?
(我找到了 CoherentPDF,但它被许可为“不得用于商业用途”,这对我来说现在不可行)。
答案1
我不知道是否有一个纯命令行解决方案,但 PyPDF2 可以做到这一点!我刚刚改编了一个我发现的要点以满足您的需求,以防您不熟悉 Python 编程。
以下代码也可用作Github 要点。
不要忘记执行sudo dnf install python3-PyPDF2
和 更改文件名。
#!/bin/python3
from PyPDF2 import PdfFileReader, PdfFileWriter
from PyPDF2.pdf import PageObject
# Theses files are just for testing, no point in merging these
reader = PdfFileReader(open("Nextcloud Manual.pdf",'rb'))
# this defines the output page format (relevant if not the same)
sup_reader = PdfFileReader(open("Cplusplus.pdf",'rb'))
writer = PdfFileWriter()
for pageNo in range(min(reader.getNumPages(), sup_reader.getNumPages())):
print("Merging page:", pageNo)
invoice_page = reader.getPage(pageNo)
sup_page = sup_reader.getPage(pageNo)
translated_page = PageObject.createBlankPage(None, sup_page.mediaBox.getWidth(), sup_page.mediaBox.getHeight())
translated_page.mergeScaledTranslatedPage(sup_page, 1, 0, 0)
translated_page.mergePage(invoice_page)
writer.addPage(translated_page)
with open('out.pdf', 'wb') as f:
writer.write(f)
编辑:请注意,这会默默地忽略具有更多页面的 PDF 的超出页面。如果需要的话我可以提供更好的解决方案。