1. PyPDF2でPDFを結合する
なぜPDFを結合するのか
まず最初に、なんでそもそもPDFファイルを結合する必要があるのかって話だよね。だって、「1つのPDFは10個のPDFより便利でしょ!」と言いたいわけ。職場では、レポートや研究結果、技術文書、プレゼン資料など、バラバラのファイルになりがち。これをいちいち切り替えるのって面倒だし、何かを見落とすリスクもあるよね。すべてのファイルを1つにまとめることで、データ管理が簡単になり、より整理された方法で分析と共有ができるようになるんだ。
さらに、PDFを結合すると、アーカイブ保存や全体のレポートを作成する際に便利だし、ドキュメントの多くのバージョンをまとめて変更履歴を追うのにも役立つよ。可能性はもう無限大!
PyPDF2を使った基本的なPDF結合
PyPDF2を使った基本的な操作から始めよう。複数のPDFファイルを1つに結合するスクリプトを作るんだ。もちろん、各ステップで何が起きてるのか解説付きで進めるよ。
import PyPDF2
# PyPDF2ライブラリのPdfMergerオブジェクトを作成
pdf_merger = PyPDF2.PdfMerger()
# 結合したいPDFドキュメントのリスト
pdf_files = ['document1.pdf', 'document2.pdf', 'document3.pdf']
# PdfMergerオブジェクトにファイルを1つずつ追加するループ
for file in pdf_files:
pdf_merger.append(file)
# 結果を新しいPDFファイルとして保存
output_filename = 'merged_document.pdf'
with open(output_filename, 'wb') as output_file:
pdf_merger.write(output_file)
# 資源を解放するためにPdfMergerオブジェクトを閉じる
pdf_merger.close()
print(f"結合されたPDFが作成されました: {output_filename}")
結合されたドキュメントの順序と構造
じゃあ、PDFドキュメントを結合できるようになったところで、ページの順番について考えよう。PyPDF2では、ファイルをメソッド.append()
に渡した順にページが追加されるってことを覚えておいてね。だから、リストpdf_files
の順番が最終的なドキュメントの順番に影響するんだよ。
2. 個別のページを結合する
ファイル全体を結合するんじゃなくて、ドキュメントの一部だけを集めたい場合は、PdfWriter
クラスを使うといいよ。これが例だよ:
import PyPDF2
# 結合したいPDFファイルのリスト
pdf_files = ["file1.pdf", "file2.pdf", "file3.pdf"]
# PdfWriterオブジェクトを作成して結合後のPDFを書き込む
pdf_writer = PyPDF2.PdfWriter()
# 各PDFファイルを処理
for pdf_file in pdf_files:
with open(pdf_file, "rb") as file:
pdf_reader = PyPDF2.PdfReader(file)
# 各ページをPdfWriterに追加
for page_num in range(len(pdf_reader.pages)):
# スキップしたいページがあればここで対処
page = pdf_reader.pages[page_num]
pdf_writer.add_page(page)
# 結合されたPDFを保存
with open("merged_document.pdf", "wb") as output_file:
pdf_writer.write(output_file)
このコードはどう動くの?
-
ファイルリストを作成: リスト
pdf_files
には結合したいPDFドキュメントのパスが入ってるよ。 -
PdfWriterを初期化:
pdf_writer
を使って新しいPDFファイルを作成。 - 各ファイルを処理: 各PDFファイルを読み取りモードで開く。
-
ページを追加: 各ファイルのすべてのページを順番に
add_page()
メソッドでpdf_writer
に追加。 -
結果を保存: すべてのページが追加されたら、新しいPDFファイルを
merged_document.pdf
に書き込む。
3. 新しいドキュメントのスタイリング
ブックマークと目次の追加
結合したドキュメントが大きくなりすぎて、ナビゲートが難しい場合はどうする?そんなときはブックマークの出番!PyPDF2を使えば、簡単なブックマークを追加してドキュメントを整理できるよ。結合する各ドキュメントにブックマークを追加してみよう。
pdf_merger = PyPDF2.PdfMerger()
# ページインデックスのオフセット
page_offset = 0
for file in pdf_files:
# 現在のドキュメントを読み込む
pdf_reader = PyPDF2.PdfReader(file)
# PdfMergerにドキュメントを追加
pdf_merger.append(file)
# ファイル名でブックマークを追加
pdf_merger.add_bookmark(file, page_offset)
# ページオフセットを更新
page_offset += len(pdf_reader.pages)
with open(output_filename, 'wb') as output_file:
pdf_merger.write(output_file)
pdf_merger.close()
この小技で、PDFの海に溺れずにすむようになるよ。
結合ファイルのメタデータ更新
結合後に、作成者やタイトル、キーワードなどのメタデータを追加または変更することもできるよ。
import PyPDF2
pdf_files = ["file1.pdf", "file2.pdf"]
pdf_writer = PyPDF2.PdfWriter()
for pdf_file in pdf_files:
with open(pdf_file, "rb") as file:
pdf_reader = PyPDF2.PdfReader(file)
for page_num in range(len(pdf_reader.pages)):
page = pdf_reader.pages[page_num]
pdf_writer.add_page(page)
# メタデータの追加
pdf_writer.add_metadata({
"/Title": "結合されたドキュメント",
"/Author": "イワン・イワノフ",
"/Subject": "売上レポート"
})
# 結合されたファイルの保存
with open("merged_with_metadata.pdf", "wb") as output_file:
pdf_writer.write(output_file)
このコードで、ドキュメントを識別しやすくし、整理するためのメタデータを追加できるよ。
GO TO FULL VERSION