pdf-patch 面向扫描或纯图像 PDF 的视觉修复,而不是语义 PDF 文本编辑。当文本提取结果为空或不含目标文字,且页面包含图像时,可按扫描件处理。主要流程:先用 PyMuPDF 统计页数并提取文本,判断是否为图像型 PDF;再以 2 倍或 3 倍缩放渲染页面,用渲染像素坐标定位目标字符或短语,裁剪目标行并识别暗像素连续段;仅对旧字符或短语加少量边距做局部补丁,必要时参考邻近原字符匹配字体族、字号、基线、字重与灰度。中文公文场景可测试 simfang.ttf、STFANGSO.TTF、simsun.ttc、STSONG.TTF、simkai.ttf,FangSong/simfang 适合类似公文正文的字体。补丁背景从目标区域附近亮像素采样并加入确定性噪声,避免平白矩形;仅在需要匹配扫描柔和度时对替换文字做小幅高斯模糊。每次迭代必须从原始 PDF 重新渲染并应用单个补丁,避免累积模糊、光晕和脏块。验证时重新渲染修复后 PDF,裁剪目标行目视检查,确认页数与页面尺寸不变,并与邻近原字符比较暗像素数量和平均灰度。提供脚本包括 inspect_pdf.py 用于检查文本层、图像数量、页面尺寸并渲染裁剪;find_dark_runs.py 用于定位暗像素连续段;font_variants.py 生成字体/字号预览表;repair_scanned_pdf_text.py 执行最终局部修复,默认保留其他页面。坐标参数 --cover、--position、--crop 均为渲染图像坐标而非 PDF 点坐标,默认渲染缩放为 2。常见失败模式包括字体不匹配、平白块、字形高低或粗细偏差、迭代后重复伪影,可分别通过测试邻近系统字体、局部纸张采样与噪声、调整位置 y、字重/透明度/描边、确认输入为原始 PDF 等方式处理。适用场景为扫描件或图像型 PDF 中少量短文本的视觉替换;限制是仅做局部视觉修补,不改变语义文本层,复杂排版或长段替换未提供支持说明。
pdf-patch
办公与效率
更新于 10-19 01:10