CodeGym /コース /Python SELF JA /PDFドキュメントのページ分割で個別の部分を保存する

PDFドキュメントのページ分割で個別の部分を保存する

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

1. PDFドキュメントをページごとに分割する

PyPDF2を使ったPDF分割の基礎

PyPDF2は、PDFファイルを開いてページを読み取るためのPdfReaderクラスと、新しいPDFドキュメントにページを書き込むためのPdfWriterクラスを提供してるんだよ。ドキュメントをページごとに分割するには、PdfWriteradd_page()を使って必要なページを個別のファイルに保存するんだ。

各PDFページを個別のドキュメントとして保存する

このコードではドキュメントを分割して、元ファイルの各ページを個別のPDFファイルとして作成するよ。

Python

import PyPDF2

# PDFファイルを開く
with open("sample.pdf", "rb") as pdf_file:
    pdf_reader = PyPDF2.PdfReader(pdf_file)
    
    # 各ページをループ
    for page_num in range(len(pdf_reader.pages)):
        pdf_writer = PyPDF2.PdfWriter()
        
        # ページを抽出して新しいPDFに追加
        page = pdf_reader.pages[page_num]
        pdf_writer.add_page(page)
        
        # 現在のページを個別のPDFファイルとして保存
        output_filename = f"page_{page_num + 1}.pdf"
        with open(output_filename, "wb") as output_file:
            pdf_writer.write(output_file)

print("各ページが個別ファイルとして保存されました。")

この例では元のドキュメントの各ページが別々のファイルpage_1.pdfpage_2.pdfなどに保存されるよ。

2. ページ範囲の抽出

時にはすべてのページではなく、特定のページ範囲、例えば1ページ目から5ページ目までを保存したいこともあるよね。その場合はループ内で特定のページを指定すればいいんだ。

Python

import PyPDF2

with open("sample.pdf", "rb") as pdf_file:
    pdf_reader = PyPDF2.PdfReader(pdf_file)
    pdf_writer = PyPDF2.PdfWriter()
    
    # ページ範囲を指定、例えば1ページ目から5ページ目
    start_page = 1
    end_page = 5
    
    for page_num in range(start_page - 1, end_page):  # ページ番号は0から始まる
        page = pdf_reader.pages[page_num]
        pdf_writer.add_page(page)

    # ページ範囲を新しいPDFとして保存
    with open("pages_1_to_5.pdf", "wb") as output_file:
        pdf_writer.write(output_file)

print("ページ範囲が正常に保存されました。")

このコードは1ページ目から5ページ目を抽出し、pages_1_to_5.pdfというファイルに保存するよ。

3. 複数の範囲を保存する

複数のページ範囲を抽出して個別のファイルに保存する必要がある場合は、 範囲の開始と終了を受け取る関数を使うと便利だよ。

Python

import PyPDF2

def save_page_range(input_pdf, output_pdf, start_page, end_page):
    with open(input_pdf, "rb") as pdf_file:
        pdf_reader = PyPDF2.PdfReader(pdf_file)
        pdf_writer = PyPDF2.PdfWriter()
        
        for page_num in range(start_page - 1, end_page):
            page = pdf_reader.pages[page_num]
            pdf_writer.add_page(page)

        with open(output_pdf, "wb") as output_file:
            pdf_writer.write(output_file)
    
    print(f"ページ{start_page}–{end_page}を{output_pdf}に保存しました")

# 関数を使用して異なる範囲を抽出
save_page_range("sample.pdf", "section_1.pdf", 1, 3)
save_page_range("sample.pdf", "section_2.pdf", 4, 6)

このコードはページ1から3を保存する関数と、 ページ4から6を保存する関数を作成して、 それぞれsection_1.pdfsection_2.pdfに保存するよ。

4. PDFドキュメントの大量処理

フォルダ内のすべてのPDFを自動分割

指定したフォルダ内のすべてのPDFドキュメントの各ページを分割する場合は、 各ファイルを自動処理するスクリプトを作成できるよ。

Python

import PyPDF2
import os

# PDFファイルが入ったフォルダのパス
folder_path = "pdf_folder"

# フォルダ内のすべてのPDFファイルを自動分割
for filename in os.listdir(folder_path):
    if filename.endswith(".pdf"):
        file_path = os.path.join(folder_path, filename)
        with open(file_path, "rb") as pdf_file:
            pdf_reader = PyPDF2.PdfReader(pdf_file)
            
            # ファイルを各ページに分割
            for page_num in range(len(pdf_reader.pages)):
                pdf_writer = PyPDF2.PdfWriter()
                page = pdf_reader.pages[page_num]
                pdf_writer.add_page(page)
                
                # 出力ファイル名の作成
                output_filename = f"{filename[:-4]}_page_{page_num + 1}.pdf"
                output_path = os.path.join(folder_path, output_filename)
                
                # ページを保存
                with open(output_path, "wb") as output_file:
                    pdf_writer.write(output_file)

print("フォルダ内のすべてのPDFファイルの各ページが正常に保存されました。")

このスクリプトはpdf_folderフォルダ内のすべてのPDFファイルを自動的に処理し、 各ページを<ファイル名>_page_<番号>.pdfという名前で保存するよ。

5. いつPDFを分割する必要があるの?

長いコーディングの後に「あれ、何のため?」って思うことあるよね?PDFドキュメントを分割する必要があるのは、以下のような場面だよ:

  • 重要なページをハイライトする: 必要なページだけをシェアして、同僚に『戦争と平和』まるごと送らないで済む。
  • 選集を作成する: 異なるドキュメントから重要な章を保存して、学習や仕事に役立てる。
  • アーカイブ: 必要な情報を紛失しないように、ページごとに重要なデータを保存する。

ここで役立つのがPyPDF2!コーディングライフをもっと簡単にしてくれるよ!

6. よくある問題とその回避策

PDFドキュメントを扱う際には、いくつかの問題に直面することもあるんだ。例えば、 PyPDF2のページ番号は0から始まるから、必要なページを指定する際にはそれを考慮しよう。 間違ったページを抽出して時間を無駄にするなんてことは避けたいよね!

また、ファイルの開閉時には、close()を正しく呼び出すことを忘れないで。 閉じられていない一冊の本でも、特にそれがOracleの教科書だったら、大変なことになるよ!

現実での活用法

この方法は個人のドキュメント処理だけじゃなく、例えば法律事務所での仕事にも役立つよ。 大量資料の中から裁判用に必要な部分だけを迅速に準備するには、PDFを分割するのが時間の節約になるんだ。

同じ手法は学習資料の準備や、技術レポートの重要な部分を抜粋する際にも活用されるよ。 このルーチンを自動化できるのは、まさにマジックだね!

1
アンケート/クイズ
PyPDF2を使ったPDFファイルの読み込み、レベル 43、レッスン 4
使用不可
PyPDF2を使ったPDFファイルの読み込み
PyPDF2を使ったPDFファイルの読み込み
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION