Fedora
在沒有 pdftk 的情況下從命令行合併 PDF 頁面的內容
我有兩個 PDF 文件,每個文件的頁數相同。我想要一個頁數相同的PDF文件,每一頁都是兩個源文件中相同頁數的疊加。如,第 1 頁文件 1 + 第 1 頁文件 2 = 生成的第 1 頁,等等。
使用 pdftk 我可以用一種簡單的方式做到這一點:
pdftk 文件1.pdf 多背景文件2.pdf 輸出文件3.pdf
但是,我現在需要在 Fedora 機器上執行此操作,而 Fedora 沒有 pdftk。而且我無法建構它,因為 libgcj abd gcc-java 也不存在。
作為最後的手段,我可以創建一個 OpenSUSE VM,因為 OpenSUSE 有 pdftk。但也許有一個工具可以做同樣的工作並且在 Fedora 上可用?
(我找到了 CoherentPDF,但它被許可“不用於商業用途”,這對我來說現在不可行)。
我不知道是否有一個純命令行解決方案,但 PyPDF2 可以做到這一點!如果您不熟悉 Python 程式,我剛剛改編了一個Gist來滿足您的需求。
以下程式碼也可作為Github Gist使用。
不要忘記執行
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 的超出頁面。如果需要,我可以為此提供更好的解決方案。