PDFファイルにヘッダーやフッター、ページ番号を追加することで、より見やすく整った文書にできます。ここでは、Pythonを使って既存のPDFにヘッダーとフッターを追加し、ページ番号をフッターの右端に表示する方法を解説します。具体的には、PyPDF2
とreportlab
というライブラリを使用します。
1. はじめに
文書をPDF形式で共有する際、ヘッダーやフッターに文書のタイトル、日付、著者名などを入れておくと、受け取る側にとっても便利です。さらに、ページ番号を入れておくことで、複数ページの資料がより整理され、読みやすくなります。
今回はPythonを用いて次の3つの要素をPDFファイルに追加します。
- ヘッダー:ページ上部に任意のテキストを挿入します。
- フッター:ページ下部に任意のテキストを挿入します。
- ページ番号:フッターの右端にページ番号を追加します。
これにより、よりプロフェッショナルな外観のPDFが作成できるようになります。
2. 使用するライブラリのインストール
PDFに対してヘッダーやフッターを追加するには、次の2つのライブラリが必要です。
- PyPDF2:既存のPDFファイルの読み込みやページの操作に使用します。
- reportlab:ヘッダーやフッターのテキストを挿入するためのキャンバスを作成します。
それでは、以下のコマンドで必要なライブラリをインストールしましょう。
pip install PyPDF2 reportlab
3. コードの概要
今回のコードの流れは以下の通りです。
- フォントの登録:日本語テキストの表示に対応するフォント(IPAexGothic)を登録します。
- PDF読み込み:
PyPDF2
で既存のPDFファイルを読み込み、各ページを操作可能にします。 - キャンバス作成:
reportlab
のcanvas
でヘッダーとフッター用のキャンバスを作成し、ページ番号を追加します。 - ページ結合:キャンバスに書き込んだページを既存ページに重ね合わせます。
- 新規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)を用意しておく必要があります。
input.pdf
という既存のPDFファイルを用意します。- 日本語フォント(IPAexGothicなど)をダウンロードしてプロジェクトフォルダに配置し、ファイル名を
ipaexg.ttf
にしておきます。 - コードを実行し、
input_with_header_footer.pdf
という名前で新しいPDFが生成されていることを確認します。
6. 実行結果
実行後に生成されるinput_with_header_footer.pdf
ファイルには、各ページに指定したヘッダーとフッターが追加され、右端にはページ番号が表示されます。
7. 応用:フォントサイズや位置の変更
コード内のdrawString
やdrawRightString
で指定する位置(x座標とy座標)を変更することで、ヘッダーやフッターの表示位置を調整可能です。また、フォントサイズもcan.setFont("IPAexGothic", size)
で簡単に変更できます。たとえば、ヘッダーをさらに上部に表示したい場合はdrawString(100, 820, header_text)
といったようにy座標を増やすと良いでしょう。
8. まとめ
今回の方法で、Pythonを使って既存のPDFファイルにヘッダーとフッター、ページ番号を追加できるようになりました。PyPDF2
で既存のPDFファイルを操作し、reportlab
でテキストの描画を行うことで、柔軟なPDF編集が可能になります。特に、日本語フォントを設定することで、日本語対応のPDFも生成できるようになります。ビジネス文書や資料にページ番号や注釈を追加したい場合に役立つでしょう。
コメント