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