从命令行合并 PDF 页面的内容,无需 pdftk

从命令行合并 PDF 页面的内容,无需 pdftk

我有两个 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 的超出页面。如果需要的话我可以提供更好的解决方案。

相关内容