CodeGym /コース /Python SELF JA /複数のPDFファイルを1つのドキュメントに結合する

複数のPDFファイルを1つのドキュメントに結合する

Python SELF JA
レベル 43 , レッスン 3
使用可能

1. PyPDF2でPDFを結合する

なぜPDFを結合するのか

まず最初に、なんでそもそもPDFファイルを結合する必要があるのかって話だよね。だって、「1つのPDFは10個のPDFより便利でしょ!」と言いたいわけ。職場では、レポートや研究結果、技術文書、プレゼン資料など、バラバラのファイルになりがち。これをいちいち切り替えるのって面倒だし、何かを見落とすリスクもあるよね。すべてのファイルを1つにまとめることで、データ管理が簡単になり、より整理された方法で分析と共有ができるようになるんだ。

さらに、PDFを結合すると、アーカイブ保存や全体のレポートを作成する際に便利だし、ドキュメントの多くのバージョンをまとめて変更履歴を追うのにも役立つよ。可能性はもう無限大!

PyPDF2を使った基本的なPDF結合

PyPDF2を使った基本的な操作から始めよう。複数のPDFファイルを1つに結合するスクリプトを作るんだ。もちろん、各ステップで何が起きてるのか解説付きで進めるよ。

Python

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クラスを使うといいよ。これが例だよ:

Python

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)

このコードはどう動くの?

  1. ファイルリストを作成: リスト pdf_filesには結合したいPDFドキュメントのパスが入ってるよ。
  2. PdfWriterを初期化: pdf_writerを使って新しいPDFファイルを作成。
  3. 各ファイルを処理: 各PDFファイルを読み取りモードで開く。
  4. ページを追加: 各ファイルのすべてのページを順番に add_page()メソッドでpdf_writerに追加。
  5. 結果を保存: すべてのページが追加されたら、新しいPDFファイルを merged_document.pdfに書き込む。

3. 新しいドキュメントのスタイリング

ブックマークと目次の追加

結合したドキュメントが大きくなりすぎて、ナビゲートが難しい場合はどうする?そんなときはブックマークの出番!PyPDF2を使えば、簡単なブックマークを追加してドキュメントを整理できるよ。結合する各ドキュメントにブックマークを追加してみよう。

Python

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の海に溺れずにすむようになるよ。

結合ファイルのメタデータ更新

結合後に、作成者やタイトル、キーワードなどのメタデータを追加または変更することもできるよ。

Python

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)

このコードで、ドキュメントを識別しやすくし、整理するためのメタデータを追加できるよ。

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION