Pythonを使ってPDFを結合する方法

2018.10.9

はじめに

Python を使って複数の PDF を 1 つの PDF にまとめる方法を紹介します。
PyPDF2 というライブラリを使用していますので、インストールしていない場合は、下記のコマンドでインストールしておいてください。

pip install PyPDF2

動作環境は、Windows を使用していますので、ディレクトリのセパレータが\\になっています。Mac や Linux の環境であれば/に変更してください。

設定ファイルを作成する

pdf_join.json というファイルを作成して下記を記述します。python コードに直接結合したいファイルを配列で記述してもいいですが、少しだけ汎用的にするため、json ファイルに設定を書くことにしました。

[
	{
		"outputfilename": "all.pdf",
		"inputfiles": [
			"join\\1-2.pdf",
			"join\\5-6.pdf",
			"join\\7-8.pdf",
			"join\\9-10.pdf",
		]
	}
]

内容の説明です。

"outputfilename": "all.pdf",

outputfilenameに出力されるファイルの名前を指定しています。

"inputfiles": []

inputfiles配列の中に結合したいファイル名をしてしています。相対パスでも絶対パスでも OK です。

python コード

pdf_join.py というファイルを作成して下記を記述します。

# -*- coding: utf-8 -*-

from PyPDF2 import PdfFileWriter, PdfFileReader
import json

# 設定ファイルの読み込み
f = open("pdf_join.json", 'r', encoding='utf-8')
conf = json.load(f)
f.close()

# 出力するPDFファイルのオブジェクト
output_pdf_obj = PdfFileWriter()

for pdffile in conf[0]['inputfiles']:
	source_pdf = open(pdffile, "rb")
	source_pdf_obj = PdfFileReader(source_pdf, strict=False)
	for i in range(source_pdf_obj.getNumPages()):
		output_pdf_obj.addPage(source_pdf_obj.getPage(i))

# 出力ファイルのオープン
output_pdf = open(conf[0]['outputfilename'], "wb")

# 結合したPDFを書き込み
output_pdf_obj.write(output_pdf)

# PDFオブジェクトのクローズ
output_pdf.close()
source_pdf.close()

コードの説明について、コードのコメントを参照してもらえたらと思います。pdf_join.py と pdf_join.json は同じパスに置いて、pdf_join.py を実行してください。