From c2d28a3e61302d8576f745c102777bb6b1489b2a Mon Sep 17 00:00:00 2001 From: Haitao Pan Date: Sun, 28 Jun 2026 12:02:12 +0800 Subject: [PATCH] fix(pdf): use cjk font for Chinese annotations --- .../scripts/fill_pdf_form_with_annotations.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/skills/marketplace/pdf/scripts/fill_pdf_form_with_annotations.py b/skills/marketplace/pdf/scripts/fill_pdf_form_with_annotations.py index b430069..80143a4 100644 --- a/skills/marketplace/pdf/scripts/fill_pdf_form_with_annotations.py +++ b/skills/marketplace/pdf/scripts/fill_pdf_form_with_annotations.py @@ -5,6 +5,19 @@ from pypdf import PdfReader, PdfWriter from pypdf.annotations import FreeText +def _contains_cjk(text): + return any( + "\u3400" <= char <= "\u4dbf" + or "\u4e00" <= char <= "\u9fff" + or "\uf900" <= char <= "\ufaff" + for char in text + ) + + +def _default_font_for_text(text): + if _contains_cjk(text): + return "Songti SC" + return "Arial" def transform_from_image_coords(bbox, image_width, image_height, pdf_width, pdf_height): @@ -72,8 +85,8 @@ def fill_pdf_form(input_pdf_path, fields_json_path, output_pdf_path): text = entry_text["text"] if not text: continue - - font_name = entry_text.get("font", "Arial") + + font_name = entry_text.get("font") or _default_font_for_text(text) font_size = str(entry_text.get("font_size", 14)) + "pt" font_color = entry_text.get("font_color", "000000")