PDF Pythonツール

Pythonを使ってPDFファイルにファイル名を自動で埋め込む方法

概要

このブログ記事では、Pythonを使用してPDFファイルの最初のページにファイル名を赤色で埋め込む手順を詳しく解説します。この機能は特に文書管理が必要な業務で役立ち、ファイルの識別を迅速に行えるようにします。また、自動化スクリプトを活用することで、大量のPDFファイルを効率的に管理する方法を提供します。

使用例(具体例)

例えば、法律事務所や会計事務所など、多くの契約書や報告書を扱う業界では、各PDFドキュメントにファイル名を視覚的に表示させることで、必要なドキュメントを素早く見つけることが可能です。プロジェクト管理でも同様に、多数のプロジェクト関連文書を迅速に識別し、取り扱う際の効率が格段に向上します。

必要なPythonライブラリとインストール方法

このスクリプトを実行するには、PyPDF2reportlabの2つのPythonライブラリが必要です。

  • PyPDF2はPDFの読み取りと書き込みを行うために使用します。
  • reportlabはPDFファイルにテキストを描画するために使用します。

これらのライブラリをインストールするには、次のコマンドを実行します:

pip install pypdf2 reportlab

使用手順

  1. 上記のライブラリをインストールします。
  2. 提供されたPythonスクリプトをコピーして、任意の名前で .py 拡張子を持つファイルに保存します。
  3. スクリプトを実行すると、ファイルダイアログが開き、PDFファイルが保存されているフォルダを選択します。
  4. スクリプトは選択されたフォルダ内の各PDFファイルの最初のページにファイル名を赤いテキストで埋め込み、新しいファイル名で保存します。

注意点

  • ファイルではなくフォルダを指定してフォルダ内すべてのpdfにファイル名の埋め込みを行います。
  • このスクリプトは英数字のファイル名のみ対応しており、日本語やその他の非ASCII文字はサポートされていません。
  • PDFが画像のみの場合、テキストの埋め込みはうまくいかない場合があります。
  • PDFファイルが読み取り専用や保護されている場合、スクリプトは正常に機能しない可能性があります。

プログラム

下記のコードをメモ帳などに丸々コピーしてpythonファイル(〇〇.py)にしてください。

import os
from datetime import datetime
from tkinter import Tk
from tkinter.filedialog import askdirectory
from PyPDF2 import PdfReader, PdfWriter
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
from reportlab.lib.colors import red

def create_overlay(filename, output_path):
# PDFのキャンバスを作成し、テキストを追加
c = canvas.Canvas(output_path, pagesize=letter)
width, height = letter
c.setFont('Helvetica', 12) # Helveticaフォントを使用
c.setFillColor(red) # 赤色でテキストを設定
c.drawString(40, height - 40, filename) # 左上にファイル名を配置
c.save()

def merge_pdfs(form_pdf_path, overlay_pdf_path, output_pdf_path):
# 元のPDFとオーバーレイPDFを読み込む
form_pdf = PdfReader(form_pdf_path)
overlay_pdf = PdfReader(overlay_pdf_path)
writer = PdfWriter()

# 最初のページにのみオーバーレイを適用
first_page = form_pdf.pages[0]
overlay_page = overlay_pdf.pages[0]
first_page.merge_page(overlay_page)
writer.add_page(first_page)

# 残りのページを追加
for page in form_pdf.pages[1:]:
writer.add_page(page)

# 結合したPDFを保存
with open(output_pdf_path, 'wb') as f:
writer.write(f)

def add_filename_to_pdf(folder_path):
timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
for filename in os.listdir(folder_path):
if filename.endswith('.pdf'):
pdf_path = os.path.join(folder_path, filename)
overlay_path = os.path.join(folder_path, f"overlay_{timestamp}_{filename}")
output_path = os.path.join(folder_path, f"marked_{timestamp}_{filename}")
create_overlay(filename, overlay_path)
merge_pdfs(pdf_path, overlay_path, output_path)
os.remove(overlay_path) # 一時ファイルを削除

def main():
root = Tk()
root.withdraw() # GUIの表示を抑制
folder_path = askdirectory() # フォルダ選択ダイアログを開く
add_filename_to_pdf(folder_path)

if __name__ == "__main__":
main()

あるいは、下のテキストファイルをダウンロードし、「.txt」を「.py」に変えることでそのまま使えます。

まとめ

この方法を使用することで、大量のPDFファイルを効率的に管理することが可能になります。特に文書が多い業務や、文書の迅速な識別が求められる環境において、作業の自動化と効率化を実現することができます。Pythonのスクリプトを活用することで、ファイル管理の手間を大幅に削減し、他の重要な業務に集中することが可能です。

-PDF, Pythonツール