デジカタPDFページ内の品番に、ハイパーリンクを追加する要望時々あります。イメージとして、品番/商品名等をクリックしたらECサイトの該当商品ページに飛ぶ。PyMuPDFを利用すれば、簡単にできてしまう。(※該当文字列が途中から改行、または縦組pdfの場合は、処理できない)
import os import fitz def insert_link(page, text: str, link: str): # text: 探したい文字列 # link: 上記の文字列のリンク先 quads = page.search_for(text) # quad: https://pymupdf.readthedocs.io/en/latest/quad.html#quad for quad in quads: page.insert_link({'kind': fitz.LINK_URI, 'from': quad, 'uri': link}) def add_links_to_pdf(pdf: str, links: list): doc = fitz.open(pdf) for page in doc: contents = page.get_text() # ページコンテンツ: str for text, link in links: if text in contents: insert_link(page, text, link) # 同じ階層に処理済みのpdfとして保存 doc.save("_処理済み".join(os.path.splitext(test_pdf))) links = [ # links一覧 # 例: [品番, 品番のリンク先], ["ABC-123", "https://www.autodtp.app"], ["ABC-456", "https://www.google.com"], ["ABC-789", "https://github.com/mlove4u/InDesign-Automation-Python-Mac-Appscript"], ] test_pdf = "test.pdf" add_links_to_pdf(test_pdf, links)
処理完了後、PDFの該当品番にハイパーリンクが付けられたことがわかる。