デジカタ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の該当品番にハイパーリンクが付けられたことがわかる。
