[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が作成されました!
まとめ
今回は、Pythonで、複数のPDFファイルを1つのPDFファイルに結合する処理を実装しました。
PDF結合を行うには、有料のPDF編集ソフト、もしくはWebサイトのサービスを使用することになります。PythonのPDFに関連するライブラリを使用することで、自分で作成することもできます。
参考サイト
この記事が気に入ったらサポートをしてみませんか?