PDF Pythonツール

Pythonを活用してPDFファイルに赤色テキストを自動で埋め込む方法

概要

このブログでは、Pythonスクリプトを使ってPDF文書の全ページに赤色のテキストを自動で埋め込む方法を紹介します。特に機密文書に「Confidential」や重要な注意事項を示すために役立ちます。自動化により、手動での編集作業を大幅に削減し、文書管理の効率を向上させます。

使用例(具体例)

例えば、企業内で扱う機密文書や個人情報を含む報告書に「Confidential」という文字を各ページに埋め込むことで、文書の扱いに注意を促します。また、プロモーション資料に「Sample」と入れて配布することで、未完成版や確認用のドキュメントであることを明確に伝えることができます。

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

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

  • PyPDF2はPDFの読み取りと書き込みを扱います。
  • reportlabはPDF内にテキストや図形を描画するために使用します。

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

pip install pypdf2 reportlab

使用手順

  1. 必要なライブラリをインストールします。
  2. 提供されたPythonスクリプトを任意の名前で .py 拡張子を持つファイルに保存します。
  3. スクリプトを実行すると、まず赤く埋め込むテキストとフォントサイズの入力を求めるダイアログが表示されます。
  4. 必要なテキストとフォントサイズを入力後、PDFファイルが保存されているフォルダを選択します。
  5. スクリプトが自動で全てのPDFファイルに指定したテキストを赤色で埋め込みます。

注意点

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

プログラム

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

import os
from datetime import datetime
from tkinter import Tk, simpledialog
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(text, font_size, output_path):
# PDFのキャンバスを作成し、テキストを追加
c = canvas.Canvas(output_path, pagesize=letter)
width, height = letter
c.setFont('Helvetica', font_size) # フォント設定
c.setFillColor(red) # 色は赤で固定
c.drawString(40, height - 40, text) # 左上にテキストを配置
c.save()

def merge_pdfs(form_pdf_path, overlay_pdf_path, output_pdf_path):
form_pdf = PdfReader(form_pdf_path)
overlay_pdf = PdfReader(overlay_pdf_path)
writer = PdfWriter()

for page in form_pdf.pages:
overlay_page = overlay_pdf.pages[0]
page.merge_page(overlay_page)
writer.add_page(page)

with open(output_pdf_path, 'wb') as f:
writer.write(f)

def add_text_to_pdf(folder_path, text, font_size):
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(text, font_size, overlay_path)
merge_pdfs(pdf_path, overlay_path, output_path)
os.remove(overlay_path) # 一時ファイルを削除

def main():
root = Tk()
root.withdraw() # GUIの表示を抑制

# ユーザーから文字列を入力してもらう
text = simpledialog.askstring("Input", "Enter the text to embed on each PDF page:", parent=root)
font_size = simpledialog.askinteger("Input", "Enter the font size:", parent=root)

if text and font_size is not None:
folder_path = askdirectory() # フォルダ選択ダイアログを開く
add_text_to_pdf(folder_path, text, font_size)

if __name__ == "__main__":
main()

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

まとめ

この方法を用いることで、多くのPDF文書に対して効率的かつ一貫した形で重要なテキストマーキングを自動で追加することができます。企業や団体における文書管理の効率を向上させることが可能であり、特に機密性が高い情報を扱う際に有効です。Pythonの強力なライブラリを活用して、繁雑な作業をシンプルかつ正確に実行しましょう。

-PDF, Pythonツール