最終更新日: 2025年1月29日

タイトル - PythonでPDFファイルを操作する

この記事では、Pythonを使用してPDFファイルを操作する方法をガイドします。ここでは、pypdfライブラリを使用します。

pypdfライブラリを使用して、Pythonで以下の操作を実行する方法を示します:

  • PDFからのテキスト抽出
  • PDFページの回転
  • 複数PDFの結合
  • PDFの分割
  • PDFページへの透かしの追加

注意: この記事は多くの貴重な詳細をカバーしているため、最も興味のあるセクションに自由に飛ぶことができます!内容は簡単にナビゲートできるように整理されており、あなたに最も関連する部分に素早く集中できます。

図解 - PythonでPDFファイルを操作する

サンプルコード

この記事で使用されているサンプルコードを以下のリンクからダウンロードできます。コード、入力ファイル、および出力ファイルが含まれています。

pypdfのインストール

pypdfをインストールするには、ターミナルまたはコマンドプロンプトで次のコマンドを実行してください:

pip install pypdf

注意: 上記のコマンドは大文字と小文字を区別します。

1. Pythonを使用してPDFファイルからテキストを抽出する

コードの説明

1. PDFリーダーオブジェクトの作成

reader = PdfReader(pdf_file)
  • PdfReader(pdf_file)はPDFファイルをリーダーオブジェクトにロードします。
  • このオブジェクトを使用すると、ページとそのコンテンツにアクセスできます。

2. ページのループ処理

for page_number, page in enumerate(reader.pages, start=1):
  • reader.pagesはPDFのページリストを返します。
  • enumerate(..., start=1)1から始まるページ番号を割り当てます。

3. 抽出されたテキストの表示

    print(f"Page {page_number}:")
    print(page.extract_text())
    print("-" * 50)  # 読みやすさのための区切り
  • page.extract_text()は現在のページからテキストコンテンツを抽出します。
  • スクリプトは抽出されたテキストとページ番号を表示します。
  • "-" * 50は読みやすさのための区切り線を印字します(--------------------------------------------------)。

コードで使用されている入力PDFファイル

コード実行結果

2. Pythonを使用してPDFページを回転する

コードの説明

このコードは、最初のページ90°時計回りに回転させ、他のページに影響を与えずに修正したPDFを保存します。

1. 必要なクラスのインポート

from pypdf import PdfReader, PdfWriter
  • PdfReader: 入力PDFを読み取ります。
  • PdfWriter: 修正を加えた新しいPDFを作成します。

2. 入力および出力ファイルパスの定義

input_pdf = "pdf-to-rotate/input.pdf"
output_pdf = "pdf-to-rotate/rotated_output.pdf"
  • スクリプトはinput.pdfから読み取り、修正済みファイルをrotated_output.pdfとして保存します。

3. PDFを読み取り、ライターオブジェクトを作成

reader = PdfReader(input_pdf)
writer = PdfWriter()
  • readerは既存のPDFをロードします。
  • writerは修正されたページを格納するために使用します。

4. 最初のページを90度回転

page = reader.pages[0]
page.rotate(90)  # 90度時計回りに回転
writer.add_page(page)
  • ページ1を抽出し、90度回転させ、新しいPDFに追加します。

5. 変更なしで残りのページを追加

for i in range(1, len(reader.pages)):
    writer.add_page(reader.pages[i])
  • 残りのページをループし、そのまま追加します。

6. 新しいPDFを保存

with open(output_pdf, "wb") as file:
    writer.write(file)
  • rotated_output.pdfをバイナリ書き込みモードで開き、新しいPDFを保存します。

7. 確認メッセージを印刷

print(f"Rotated page saved to {output_pdf}")
  • 成功メッセージを表示します。

コードで使用された入力PDFとその回転出力

スクリーンショット Pythonで回転したPDFページのスクリーンショット

3. Pythonを使用してPDFファイルを結合する

このPythonスクリプトは、複数のPDFファイルをディレクトリから1つのPDFに結合する方法を示しています。PyPDFライブラリを使用します。

コードの説明

  • このスクリプトは、指定されたディレクトリ(pdfs-to-merge)内のすべてのPDFファイルを、自動的に順番に1つの出力ファイル(merged_output.pdf)に結合します。
  • 出力ディレクトリが存在することを確認し、一覧の順序で各PDFのページを追加します。
  • 最終的にマージされたファイルをoutput-dirサブディレクトリに出力します。

コードの内訳

1. ライブラリのインポート

import os
from pypdf import PdfReader, PdfWriter
  • os: ファイルシステムと対話し、ディレクトリの読み取りやファイルパスの管理を行います。
  • PdfReader: PDFのコンテンツを読み取ります。
  • PdfWriter: 新しいPDFファイルを作成して書き込みます。

2. ディレクトリと出力ファイルの定義

directory = "pdfs-to-merge"
output_file = "output-dir/merged_output.pdf"
  • directory: PDFファイルが格納されているフォルダを指定します。
  • output_file: マージされたPDFの出力パスと名前を定義します。

3. 出力ディレクトリが存在しない場合は作成

os.makedirs(os.path.join(directory, "output-dir"), exist_ok=True)
  • 出力ディレクトリが存在することを確認し、存在しない場合は作成します。

4. PdfWriterオブジェクトの作成

writer = PdfWriter()
  • writerはすべてのPDFのページを収集し、結合するために使用します。

5. ディレクトリ内のすべてのPDFファイルを反復処理

for file_name in sorted(os.listdir(directory)):
    if file_name.endswith(".pdf"):
        file_path = os.path.join(directory, file_name)
        print(f"Adding: {file_name}")
  • このループは指定されたディレクトリ内のすべてのファイルを処理し、.pdf拡張子を持つファイルをチェックします。sorted()を使用してアルファベット順に処理します。

6. 各PDFを読み取り、ライターにページを追加

reader = PdfReader(file_path)
writer.append(reader)
  • 各PDFについて、PdfReaderはファイルを読み取り、そのPDFのすべてのページがwriterに追加されます。

7. マージされたPDFを出力ファイルに書き込む

output_path = os.path.join(directory, output_file)
with open(output_path, "wb") as output_pdf:
    writer.write(output_pdf)
  • すべてのページを収集した後、writer.write()はマージされたPDFを指定された出力パスに書き込みます。

8. 確認メッセージを印刷

print(f"Merged PDF saved as: {output_path}")
  • 保存されたマージされたPDFの位置を確認する成功メッセージを印刷します。

コードで使用した入力PDFファイルとマージされた出力PDF

4. Pythonを使用してPDFを分割する

コードの説明

このPythonスクリプトは、PDFをページごとに分割し、PyPDFライブラリを使用して各ページを個別のPDFファイルとして保存します。最初に出力ディレクトリの存在を確認し、次に入力PDFファイルを読み取り、各ページをループ処理します。新しいPdfWriterオブジェクトを作成し、各ページを個別のPDFファイルとして保存します。出力ファイルは**output-dir**フォルダーに連番(例:page_1.pdf, page_2.pdf)で保存されます。最後に、各作成されたファイルの確認メッセージを印刷し、プロセスの完了を通知します。

コードで使用されている入力PDFと分割された出力ファイル

5. Pythonを使用してPDFに透かしを追加する

PyPDFライブラリを使用すると、透かしPDFを既存のPDFにオーバーレイすることでPDFに透かしを追加できます。透かしPDFが1ページのみであることを確認してください。それにより、メインPDFの各ページに正しく適用されます。

コードの説明

このPythonスクリプトは、入力PDFを読み取り、1ページの透かしPDFを抽出し、各ページに透かしをオーバーレイして、最終的な透かし入りPDFを保存します。

コードの内訳

こちらが各部分の簡単な説明です

1. 必要なクラスをインポート

from pypdf import PdfReader, PdfWriter
  • PdfReader は既存のPDFを読み取るために使用します。
  • PdfWriter は新しいPDFを作成して書き込むために使用します。

2. ファイルパスの定義

input_pdf = "pdf-to-watermark/input.pdf"
watermark_pdf = "pdf-to-watermark/watermark.pdf"
output_pdf = "pdf-to-watermark/output_with_watermark.pdf"
  • input_pdf: 透かしを追加する元のPDF。
  • watermark_pdf: 透かしとして使用する1ページの別個のPDF。
  • output_pdf: 透かし付きページを含む出力ファイル。

3. PDFの読み取り

reader = PdfReader(input_pdf)
watermark = PdfReader(watermark_pdf)
  • reader: 入力PDFを読み取ります。
  • watermark: 透かしPDFを読み取ります。

4. ライターオブジェクトの作成

writer = PdfWriter()
  • これは最終的な透かし入りPDFを作成するために使用します。

5. 透かしページの抽出

watermark_page = watermark.pages[0]
  • 透かしPDFが1ページのみであることを想定し、それをすべてのページにオーバーレイするために使用します。

6. 入力PDFページをループ処理し、透かしをマージ

for page in reader.pages:
    # 現在のページに透かしをマージ
    page.merge_page(watermark_page)
    
    # マージされたページを作成物に追加
    writer.add_page(page)
  • input_pdfの各ページを繰り返し処理します。
  • merge_page(watermark_page) は透かしを現在のページの上にオーバーレイします。
  • 修正されたページをwriterに追加します。

7. 透かし入りPDFを保存

with open(output_pdf, "wb") as output_file:
    writer.write(output_file)
  • 修正されたページを新しいPDFファイルに書き込みます。

8. 確認メッセージを印刷

print(f"Watermarked PDF saved as: {output_pdf}")
  • 出力ファイルパスを確認するメッセージを印刷します。

入力PDF、透かしPDF、および透かし入り出力PDF

スクリーンショット Pythonで透かしを追加したPDFのスクリーンショット

結論

このガイドでは、Pythonにおける重要なPDF操作、テキストの抽出、ページの回転、結合、分割、透かしの追加について探求しました。これらのスキルを用いて、自分自身のPDFマネージャーを構築し、さまざまなPDFタスクを効率的に自動化できます。