From 2323fa61506923e8b2ad8e34b4455c724a0a200b Mon Sep 17 00:00:00 2001 From: tiezhu Date: Tue, 3 Nov 2026 12:00:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=9B=9E=E5=86=99=E4=B8=A4bug?= =?UTF-8?q?=EF=BC=9Ainsert=5Fpdf=E8=B7=A8=E7=89=88=E6=9C=AC=E5=A4=B1?= =?UTF-8?q?=E6=95=88=E6=94=B9=E7=9B=B4=E5=AD=98=E6=BA=90=E6=96=87=E6=A1=A3?= =?UTF-8?q?=EF=BC=9Bapp=E9=A1=B5=E7=A0=810/1=E5=9F=BA=E9=94=99=E4=BD=8D?= =?UTF-8?q?=E3=80=82=E7=BA=BF=E4=B8=8Ae2e=E5=85=A8=E7=BB=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PROGRESS-deploy.md | 5 +++++ app.py | 7 ++++--- tmkit/redactor.py | 8 +++----- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/PROGRESS-deploy.md b/PROGRESS-deploy.md index e05e78e..197a9a1 100644 --- a/PROGRESS-deploy.md +++ b/PROGRESS-deploy.md @@ -16,3 +16,8 @@ - PaddleOCR 接入(扫描件路径) - 跨词/跨行 PII 识别优化(平台组已发现紧贴文字漏检问题) - 人审界面 + 审计日志 + +## 首轮线上端到端验收(11:03 更新) +- 测试件:含身份证/手机号/邮箱的中文合同 PDF,经 https://tm.tongueclaw.com/ 全流程 +- 结果:三类敏感信息全部从文本层彻底删除 ✅ 非敏感正文完整保留 ✅ 脱敏件下载正常 ✅ +- 修复记录:① redactor insert_pdf 跨版本失效 → 改直接保存源文档;② app 页码 1 基/0 基错位导致回写落空 → 已修;③ 服务器 PyMuPDF 统一锁 1.26.5;④ 服务器加 1G swap 防 OOM diff --git a/app.py b/app.py index 4c2b7b9..609f372 100644 --- a/app.py +++ b/app.py @@ -51,15 +51,16 @@ def process_pdf(input_path: Path, out_path: Path, task: dict): doc = fitz.open(stream=pdf_bytes, filetype="pdf") hits, items = [], [] for i, page in enumerate(doc): - page_no = i + 1 + page_no = i + 1 # 对外展示用 1 基页码 words = tmkit.extract_page_words(page) - found = detector.scan_page_words(words, page_no) + found = detector.scan_page_words(words, i) # tmkit/redactor 内部用 0 基 for h in found or []: items.append({"type": h.get("type", "未知"), "text": h.get("text", ""), "page": h.get("page", page_no)}) if h.get("bbox") is not None: - hits.append({"page": h.get("page", page_no), "bbox": h["bbox"]}) + # 回写用 0 基页码,展示用 1 基,两者分开 + hits.append({"page": i, "bbox": h["bbox"]}) # 阶段 4:脱敏回写 task["stage"] = "脱敏回写" diff --git a/tmkit/redactor.py b/tmkit/redactor.py index 3cf3d0f..6823dbd 100644 --- a/tmkit/redactor.py +++ b/tmkit/redactor.py @@ -26,7 +26,6 @@ def redact_pdf(pdf_bytes: bytes, hits: List[dict], method: str = "redact") -> by by_page.setdefault(h["page"], []).append(h["bbox"]) src = fitz.open(stream=pdf_bytes, filetype="pdf") - out = fitz.open() for pno, page in enumerate(src): boxes = by_page.get(pno, []) if method == "redact": @@ -39,10 +38,9 @@ def redact_pdf(pdf_bytes: bytes, hits: List[dict], method: str = "redact") -> by page.draw_rect(bbox, color=None, fill=(0, 0, 0)) else: raise ValueError(f"unknown method: {method}") - out.insert_pdf(src, from_page=pno, to_page=pno) - # 注意:redact 修改的是 src 中的页,insert_pdf 会拷贝修改后的页 + # 直接保存原文档本身(apply_redactions 已就地修改页对象)。 + # 不用 insert_pdf 搬运到新文档——部分 PyMuPDF 版本会拷贝未脱敏的原始页。 buf = io.BytesIO() - out.save(buf) + src.save(buf, garbage=3, deflate=True) src.close() - out.close() return buf.getvalue()