この記事では、PythonでPDFファイルの読み込み、テキスト抽出、ページの結合・回転、暗号化といった基本的な操作を行うためのライブラリPyPDF2
の最新の使い方について解説します。
注記:PyPDF2
はバージョン3.0で大幅に更新されました。この記事では、古いPdfFileReader
/PdfFileWriter
ではなく、現在の標準であるPdfReader
/PdfWriter
クラスを使用します。
1. 準備:PyPDF2のインストール
PyPDF2
はサードパーティ製のライブラリなので、使用する前にインストールが必要です。
pip install PyPDF2
2. PDFからのテキスト抽出と復号
テキストを抽出する PdfReader
オブジェクトを使うことで、PDFファイルからページを取得し、テキストを抽出できます。ファイルはバイナリ読み込みモード('rb'
)で開きます。
import PyPDF2
# 'sample.pdf'という名前のPDFファイルがあると仮定
try:
with open('sample.pdf', 'rb') as pdf_file:
reader = PyPDF2.PdfReader(pdf_file)
print(f"ページ数: {len(reader.pages)}")
# 最初のページを取得
first_page = reader.pages[0]
# テキストを抽出
text = first_page.extract_text()
print("最初のページのテキスト:")
print(text)
except FileNotFoundError:
print("エラー: sample.pdfが見つかりません。")
暗号化されたPDFを復号する is_encrypted
属性でファイルが暗号化されているかを確認し、decrypt()
メソッドでパスワードを指定して復号できます。
# 'encrypted_sample.pdf'というパスワード付きPDFがあると仮定
# with open('encrypted_sample.pdf', 'rb') as pdf_file:
# reader = PyPDF2.PdfReader(pdf_file)
# if reader.is_encrypted:
# try:
# reader.decrypt('password123')
# page = reader.pages[0]
# print(page.extract_text())
# except Exception as e:
# print(f"復号に失敗しました: {e}")
3. PDFの作成とページ操作
PdfWriter
オブジェクトを使うと、既存のPDFからページを操作して、新しいPDFファイルを作成できます。
ページをコピー(結合)する 複数のPDFファイルからページを抽出し、一つの新しいPDFにまとめることができます。
import PyPDF2
writer = PyPDF2.PdfWriter()
# 'doc1.pdf'と'doc2.pdf'があると仮定
pdf_files = ['doc1.pdf', 'doc2.pdf']
for filename in pdf_files:
with open(filename, 'rb') as f:
reader = PyPDF2.PdfReader(f)
for page in reader.pages:
writer.add_page(page)
# 結合した結果を新しいファイルに保存
with open('combined_docs.pdf', 'wb') as output_pdf:
writer.write(output_pdf)
print("PDFを結合しました。")
ページを回転・重ね合わせる rotate()
メソッドでページを回転させたり、merge_page()
で別のPDFページを重ね合わせ(ウォーターマークなど)たりすることも可能です。
# with open('original.pdf', 'rb') as f_orig, open('watermark.pdf', 'rb') as f_wm:
# reader = PyPDF2.PdfReader(f_orig)
# watermark_page = PyPDF2.PdfReader(f_wm).pages[0]
# writer = PyPDF2.PdfWriter()
#
# first_page = reader.pages[0]
# first_page.rotate(90) # 90度回転
# first_page.merge_page(watermark_page) # ウォーターマークを重ねる
# writer.add_page(first_page)
#
# # 2ページ目以降を追加
# for i in range(1, len(reader.pages)):
# writer.add_page(reader.pages[i])
#
# with open('modified_doc.pdf', 'wb') as output_pdf:
# writer.write(output_pdf)
4. PDFを暗号化する
PdfWriter
オブジェクトのencrypt()
メソッドを使えば、作成中のPDFにパスワードを設定できます。
import PyPDF2
# 'source.pdf'を暗号化して保存する
with open('source.pdf', 'rb') as pdf_file:
reader = PyPDF2.PdfReader(pdf_file)
writer = PyPDF2.PdfWriter()
for page in reader.pages:
writer.add_page(page)
# パスワード'supersecret'で暗号化
writer.encrypt('supersecret')
with open('encrypted_output.pdf', 'wb') as output_pdf:
writer.write(output_pdf)
print("PDFを暗号化しました。")
まとめ
PyPDF2
は、PythonでPDFを操作するための多機能なライブラリです。PdfReader
で既存のPDFから情報を読み取り、PdfWriter
でページの追加、回転、結合、暗号化といった変更を加えて新しいPDFファイルとして保存するのが基本的な使い方です。ファイルの開閉にはwith
文を使用し、メソッドは最新のAPI(例: len(reader.pages)
, reader.pages[i]
, writer.add_page()
)を使うことが推奨されます。