PythonでPDFにヘッダーとフッター、ページ番号を追加する方法

Python

PDFファイルにヘッダーやフッター、ページ番号を追加することで、より見やすく整った文書にできます。ここでは、Pythonを使って既存のPDFにヘッダーとフッターを追加し、ページ番号をフッターの右端に表示する方法を解説します。具体的には、PyPDF2reportlabというライブラリを使用します。

1. はじめに

文書をPDF形式で共有する際、ヘッダーやフッターに文書のタイトル、日付、著者名などを入れておくと、受け取る側にとっても便利です。さらに、ページ番号を入れておくことで、複数ページの資料がより整理され、読みやすくなります。

今回はPythonを用いて次の3つの要素をPDFファイルに追加します。

  • ヘッダー:ページ上部に任意のテキストを挿入します。
  • フッター:ページ下部に任意のテキストを挿入します。
  • ページ番号:フッターの右端にページ番号を追加します。

これにより、よりプロフェッショナルな外観のPDFが作成できるようになります。

2. 使用するライブラリのインストール

PDFに対してヘッダーやフッターを追加するには、次の2つのライブラリが必要です。

  • PyPDF2:既存のPDFファイルの読み込みやページの操作に使用します。
  • reportlab:ヘッダーやフッターのテキストを挿入するためのキャンバスを作成します。

それでは、以下のコマンドで必要なライブラリをインストールしましょう。

pip install PyPDF2 reportlab

3. コードの概要

今回のコードの流れは以下の通りです。

  1. フォントの登録:日本語テキストの表示に対応するフォント(IPAexGothic)を登録します。
  2. PDF読み込みPyPDF2で既存のPDFファイルを読み込み、各ページを操作可能にします。
  3. キャンバス作成reportlabcanvasでヘッダーとフッター用のキャンバスを作成し、ページ番号を追加します。
  4. ページ結合:キャンバスに書き込んだページを既存ページに重ね合わせます。
  5. 新規PDF作成:すべてのページにヘッダーとフッターが追加された新しいPDFファイルを保存します。

4. コード解説

それでは実際のコードを見ていきましょう。

from PyPDF2 import PdfReader, PdfWriter
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfbase import pdfmetrics
from io import BytesIO

def add_header_footer(input_pdf_path, output_pdf_path, header_text, footer_text, font_path="ipaexg.ttf"):
    # 日本語フォントの登録
    pdfmetrics.registerFont(TTFont("IPAexGothic", font_path))

    # 入力PDFの読み込み
    reader = PdfReader(input_pdf_path)
    writer = PdfWriter()

    for page_num, page in enumerate(reader.pages, start=1):
        # ReportLabのキャンバスで新しいページを作成
        packet = BytesIO()
        can = canvas.Canvas(packet, pagesize=A4)

        # ヘッダーの追加
        can.setFont("IPAexGothic", 12)
        can.drawString(100, 800, header_text)

        # フッターの中央にテキスト、右端にページ番号の追加
        footer_y = 50
        page_width = A4[0]  # A4幅は595ポイント
        can.setFont("IPAexGothic", 10)
        can.drawString(100, footer_y, footer_text)  # フッターのテキスト(中央左寄せ)
        can.drawRightString(page_width - 50, footer_y, f"Page {page_num}")  # ページ番号(右端)

        can.save()
        packet.seek(0)

        # ヘッダー・フッター付きのページを追加
        new_pdf = PdfReader(packet)
        page.merge_page(new_pdf.pages[0])
        writer.add_page(page)

    # 出力ファイルの保存
    with open(output_pdf_path, "wb") as output_pdf:
        writer.write(output_pdf)

# 使用例
input_pdf = "input.pdf"
output_pdf = "input_with_header_footer.pdf"
header = "ヘッダー例"
footer = "フッター例"
add_header_footer(input_pdf, output_pdf, header, footer)

ヘッダーとフッターとページ数が追加されます。

5. コードの実行方法

このコードを実行するには、Pythonがインストールされた環境で上記のスクリプトを実行し、適切なフォントファイル(例:IPAexGothic)を用意しておく必要があります。

  1. input.pdfという既存のPDFファイルを用意します。
  2. 日本語フォント(IPAexGothicなど)をダウンロードしてプロジェクトフォルダに配置し、ファイル名をipaexg.ttfにしておきます。
  3. コードを実行し、input_with_header_footer.pdfという名前で新しいPDFが生成されていることを確認します。

6. 実行結果

実行後に生成されるinput_with_header_footer.pdfファイルには、各ページに指定したヘッダーとフッターが追加され、右端にはページ番号が表示されます。

7. 応用:フォントサイズや位置の変更

コード内のdrawStringdrawRightStringで指定する位置(x座標とy座標)を変更することで、ヘッダーやフッターの表示位置を調整可能です。また、フォントサイズもcan.setFont("IPAexGothic", size)で簡単に変更できます。たとえば、ヘッダーをさらに上部に表示したい場合はdrawString(100, 820, header_text)といったようにy座標を増やすと良いでしょう。

8. まとめ

今回の方法で、Pythonを使って既存のPDFファイルにヘッダーとフッター、ページ番号を追加できるようになりました。PyPDF2で既存のPDFファイルを操作し、reportlabでテキストの描画を行うことで、柔軟なPDF編集が可能になります。特に、日本語フォントを設定することで、日本語対応のPDFも生成できるようになります。ビジネス文書や資料にページ番号や注釈を追加したい場合に役立つでしょう。

コメント

タイトルとURLをコピーしました