READMESource: main@8fbdd871
文档去水印 · dsh-watermark-remover
给 DSH 用的 PDF / Word 去水印工具。结构级、无损:不栅格化、不重绘、不 OCR —— 文字还是文字,图片还是图片,被拿掉的只有水印那一层。
它怎么做的
水印在文件里通常不是"一层滤镜",而是具体结构。本插件按结构识别、按结构移除:
- 跨页共享的 XObject(Form / Image)水印层 —— 典型特征:同一对象绘制在每一页、盖在全部文字之后、带极低不透明度的 SMask
- 内容流里直接绘制的文字水印(BT..ET 块)
- 移除方式:从内容流剥掉
/Name Do、删除 Resources 引用,再回收失去引用的间接对象 —— 水印图像像素真的不在输出文件里,不是被隐藏
Word(.docx)
- 页眉里的 VML 艺术字水印(
v:textpath) wp:anchor behindDoc="1"衬于文字下方的图形、w:background背景- 移除方式:整 run 摘除(优先摘整个
<w:r>,摘不干净才退到元素本身)
两步走:先看,再删
| 步骤 | 工具 | 作用 |
|---|---|---|
| 分析 | analyze |
列出候选 id 与置信度(xobj:21、text:内部资料 …),不改文件 |
| 移除 | remove |
按 id 执行;不传 targets 时只动高/中置信度候选;输出新文件,原件不动 |
对 agent 直接说话就行:"看看这个 PDF 的水印,能去就去掉"。
置信度与防误删
跨页重复是主要证据,但重复不等于水印——正文在每一页也会重复。所以文字候选只有命中水印词表(水印 / 内部 / 机密 / DRAFT / CONFIDENTIAL / SAMPLE …)才会升到中/高置信度,其余一律 low 且不参与自动移除。
实测例子:一份 2 页中文 PDF,正文用 CID 子集字体编码,解码出来是「盩」「盯」「%^」这类乱码、且跨页重复 —— 修复前会被判成 132 个 medium 候选(自动模式会把正文全删),修复后是 {medium: 1, low: 132},自动模式只动那一个真水印。
能做到 / 做不到(不吹牛)
| 情况 | 结果 |
|---|---|
| PDF 整页水印层(XObject) | ✅ 无损移除 |
| Word 页眉艺术字水印 | ✅ 无损移除 |
| 扫描件、图片内部的水印像素 | ❌ 无法无损去除(属于内容像素) |
| CID/子集字体编码的文字水印 | ⚠️ 字节不可读、无法按文本匹配;这类水印多以 XObject 承载,通常会被 XObject 候选覆盖 |
| 加密 PDF | ❌ 拒绝(请先解密) |
安装
dsh plugin --profile web add dsh-watermark-remover
依赖
pdf-lib(PDF 解析/重写)、adm-zip(docx 解包重打包)。无原生模块,不需要编译工具链。
许可
BSD-3-Clause
No comments yet. Be the first to write one.