1. PDFドキュメントをページごとに分割する
PyPDF2を使ったPDF分割の基礎
PyPDF2は、PDFファイルを開いてページを読み取るためのPdfReaderクラスと、新しいPDFドキュメントにページを書き込むためのPdfWriterクラスを提供してるんだよ。ドキュメントをページごとに分割するには、PdfWriterのadd_page()を使って必要なページを個別のファイルに保存するんだ。
各PDFページを個別のドキュメントとして保存する
このコードではドキュメントを分割して、元ファイルの各ページを個別のPDFファイルとして作成するよ。
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.pdf、 page_2.pdfなどに保存されるよ。
2. ページ範囲の抽出
時にはすべてのページではなく、特定のページ範囲、例えば1ページ目から5ページ目までを保存したいこともあるよね。その場合はループ内で特定のページを指定すればいいんだ。
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. 複数の範囲を保存する
複数のページ範囲を抽出して個別のファイルに保存する必要がある場合は、 範囲の開始と終了を受け取る関数を使うと便利だよ。
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.pdfと section_2.pdfに保存するよ。
4. PDFドキュメントの大量処理
フォルダ内のすべてのPDFを自動分割
指定したフォルダ内のすべてのPDFドキュメントの各ページを分割する場合は、 各ファイルを自動処理するスクリプトを作成できるよ。
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を分割するのが時間の節約になるんだ。
同じ手法は学習資料の準備や、技術レポートの重要な部分を抜粋する際にも活用されるよ。 このルーチンを自動化できるのは、まさにマジックだね!
GO TO FULL VERSION