From f128400a32e27841e49c21fa0068040da8ab90ad Mon Sep 17 00:00:00 2001 From: Yasutake Yohei <61961825+yasutakeyohei@users.noreply.github.com> Date: Wed, 23 Sep 2026 00:03:57 +0900 Subject: フロー図のPDF: a要素の中身が欠けていたのを修正 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PyMuPDFのSVG→PDF変換はa要素の中身を描画しないため、ベクター化して以降のPDFからは課題マーカーと課題・論点の一覧がごっそり欠けていた。PDF化するときだけa要素を外して中身を残すようにし、課題⑨の追加も反映した。 --- scripts/make-flow-pdfs.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'scripts/make-flow-pdfs.py') diff --git a/scripts/make-flow-pdfs.py b/scripts/make-flow-pdfs.py index f6e263b..ae7ba26 100644 --- a/scripts/make-flow-pdfs.py +++ b/scripts/make-flow-pdfs.py @@ -15,6 +15,7 @@ base は SVG の元の高さ(リンク行を追記する前の値)。SVG の 使い方: python scripts/make-flow-pdfs.py """ import pathlib +import re import sys import pymupdf @@ -41,12 +42,24 @@ FOOT_1P = TITLE + " 全体像(縮小のため文字は小さめ。読みや # (SVGファイル名, 出力の6ページ版, 出力の1ページ版, SVGの元の高さ) JOBS = [ - ("ijime-judai-flow.svg", "ijime-judai-flow-a4-6p.pdf", "ijime-judai-flow-a4-1p.pdf", 3890), + ("ijime-judai-flow.svg", "ijime-judai-flow-a4-6p.pdf", "ijime-judai-flow-a4-1p.pdf", 3930), ("ijime-judai-flow-private.svg", "ijime-judai-flow-private-a4-6p.pdf", "ijime-judai-flow-private-a4-1p.pdf", 3624), ] +ANCHOR_RE = re.compile(r"]*>|") + + +def strip_anchors(svg_text): + """要素を取り除く(中身は残す)。 + + PyMuPDF の SVG→PDF 変換は の中身を描画しないため、PDF化するときだけ外す。 + リンクとしては機能しなくなるが、元のラスタ版PDFもリンクは持っていなかった。 + """ + return ANCHOR_RE.sub("", svg_text) + + def one_page_rect(base_h): """1ページ版の配置(旧スクリプトの縮小計算を再現)。""" sc = min((2900 / 2.5) / 1820, ((4182 / 2.5) - 30) / base_h) @@ -69,7 +82,8 @@ def add_footer(page, text): def build(svg_name, out_6p, out_1p, base_h): - svg = pymupdf.open(IMAGES / svg_name) + path = IMAGES / svg_name + svg = pymupdf.open("svg", strip_anchors(path.read_text(encoding="utf-8")).encode("utf-8")) # show_pdf_page は PDF しか受け付けないため、いったんベクターPDFに変換する src = pymupdf.open("pdf", svg.tobytes(garbage=4, deflate=True)) svg.close() -- cgit v1.3.1