pdftkを必要とせずにコマンドラインからPDFページの内容をマージします。

pdftkを必要とせずにコマンドラインからPDFページの内容をマージします。

2つのPDFファイルがあり、各ファイルのページ数は同じです。同じページ数を持つPDFファイルが必要です。各ページは、両方のソースファイルのページ数が同じページのオーバーレイです。たとえば、ページ 1 ファイル 1 + ページ 1 ファイル 2 = 結果ページ 1 などです。

pdftkを使用すると、簡単な方法でこれを行うことができます。

pdftk file1.pdf マルチバックグラウンド file2.pdf 出力 file3.pdf

ただし、Fedoraシステムでこれを行う必要がありますが、Fedoraにはpdftkがありません。 libgcj abd gcc-javaも存在しないため、ビルドできません。

OpenSUSEにはpdftkがあるので、最後の手段としてOpenSUSE VMを作成できます。しかし、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の余分なページは自動的に無視されます。必要に応じてより良いソリューションを提供できます。

関連情報