見出し画像

[Python] 複数のPDFファイルを1つのファイルに結合する

はじめに

今回は、Pythonで、複数のPDFファイルを1つのPDFファイルに結合する処理を実装します。

処理概要は、下記です。

  • コマンドラインで渡されたPDFファイルを結合し、1つのPDFファイルとして出力する

  • 結合するPDFのファイル名は、最初のPDFファイルの拡張子なしのベースネームに、’_merge’を追加したファイル名とする

使用するライブラリ

(修正)2024/01/02

PyPDF2を使用していましたが、PyPDF2のバージョン3.0.Xが最後のバージョンとなるとのこと。

開発は、PyPDFのバージョン3.1.0で継続とのことでしたので、使用するライブラリを、PyPDF2からPyPDFに変更しました。

PyPDF

PDFファイルを操作するライブラリとなります。
使用時にはインストールが必要です。

pip install PyPDF

pathlib

ファイルやフォルダ(ディレクトリ)のパスをオブジェクトとして操作、処理することができる標準ライブラリ。
使用時にインストールは不要です。

実行環境

・windows11
・Python 3.11.5

実装

全体の処理は、下記です。

import sys
from pathlib import Path
import pypdf


def gen_merge_pdf_file_name(file_path):
    """結合したPDFファイル名を生成する

        Args:
            file_path(str):PDFファイル名

        Returns:
            merge_f_path(str):結合したPDFファイル名
    """
    # 結合後のファイル
    # 配置するフォルダ:最初のPDFと同じフォルダ
    # ファイル名:最初のPDFのベースネーム+ _merge
    f_path = Path(file_path)
    merge_file_name = f'{f_path.stem}_merge.pdf'
    return str(merge_f_path = Path(f_path.parent) / merge_file_name)


def main(file_path_list):
    pdf_merger = pypdf.PdfMerger()

    for index, file_path in enumerate(file_path_list):
        if index == 0:
            merge_f_path = gen_merge_pdf_file_name(file_path)
        pdf_merger.append(file_path)

    pdf_merger.write(merge_f_path)
    pdf_merger.close()


if __name__ == '__main__':
    args = sys.argv

    if len(args) < 2:
        print('引数に結合したいPDFファイルを指定してください。')
        sys.exit()
    
    main(args[1:])

順番に処理の内容を説明します。

①コマンドラインから渡されたファイル名を取得

args = sys.argv

sys.argvは、リスト型でコマンドラインから渡された引数が格納されます。リストの1番目は、実行ファイル名となるため、2番目以降をPDFファイルのパス名として処理を行います。

 def main(file_path_list):
    for file_path in file_path_list:

②PdfMergerオブジェクトの生成

PDFを結合するため、PyPDFライブラリのPdfMergerオブジェクトを生成します。

pdf_merger = pypdf.PdfMerger()

③結合後のファイル名の生成

結合後のファイル名を、gen_merge_pdf_file_name関数で作成しています。

merge_f_path = gen_merge_pdf_file_name(file_path)

④PDFファイルの結合

ファイルの結合は、PdfMergerオブジェクトのappendメソッドを使用します。
第1引数に、ファイルオブジェクト、もしくはPDFファイルのファイル名を渡します。今回は、PDFファイルのファイル名を指定しています。

 pdf_merger.append(file_path)

⑤PDFファイルの書き出し

PDFファイルへの書き出しは、PdfMergerオブジェクトのwriteメソッドを使用します。
第1引数に、書き込み後PDFファイルのファイル名を渡します。

pdf_merger.write(merge_f_path)

⑥PdfMergerオブジェクトの終了

PdfMergerオブジェクトの終了処理を行います。

pdf_merger.close()

以上で実装終了です!

早速、動作させてみます。
引数に、下記2つのファイルのファイルパスを指定して、実行しました。

結合を行うPDFファイル

実行後、結合されたPDFが作成されました!

結合した結果

まとめ

今回は、Pythonで、複数のPDFファイルを1つのPDFファイルに結合する処理を実装しました。

PDF結合を行うには、有料のPDF編集ソフト、もしくはWebサイトのサービスを使用することになります。PythonのPDFに関連するライブラリを使用することで、自分で作成することもできます。

参考サイト

この記事が気に入ったらサポートをしてみませんか?