AIGC标识 PDF 去水印怎么彻底去掉?先分清你是哪一种水印

搜索"PDF 去水印"的人,真正想要的是同一件事:把那份文件上的字或者 logo 弄掉,而且弄掉之后文件还是正常的。

但绝大多数人踩的第一个坑是——用了三个工具都没去掉,于是以为是工具不行。实际上更可能是:你的水印属于 A 类,你一直在用处理 B 类的方法。

先花两分钟分清类型,比换十个工具管用。

一、快速判断:你的水印是哪一类

打开 PDF,用鼠标去拖选水印上的文字:

  • 能选中、能复制 → 文字型水印,最好处理
  • 选不中,但放大边缘很清晰 → 图片型水印(可能是 Form XObject)
  • 整页像一张扫描图,水印是印在纸上的 → 扫描件水印,必须走图像处理
  • 在浏览器里能看到,用 Adobe 打开能选中并删除 → 注释型水印(Annots)

这四种的处理路径完全不同,混着来必然失败。

二、四类水印分别该怎么处理

1. 文字型水印

水印是内容流里的一段绘制指令。难点不在"找到",在找全:

  • 中文水印通常用 Identity-H 的 CID 字体,内容是字形编号(类似 <GID>),直接搜文字搜不到,必须先查 ToUnicode CMap 把字形映射回字符
  • 水印可能被旋转、缩放、改透明度,只匹配字符串会漏

验证有没有清干净,别用肉眼看,用命令:

pdftotext 处理后.pdf - | grep -i "水印关键词"

搜不到才算过。

2. 图片型水印(Form XObject)

这是最常被漏掉的一类。它的特点是:水印不直接画在页面上,而是定义成一个独立的可复用对象(Form XObject),页面通过 Do 操作符引用它,还可能带一个 cm 矩阵做旋转缩放。

所以你扫页面的内容流,看到的是一行 /Fm1 Do,根本看不出里面是什么。必须递归进入这个 XObject 内部去看,而且要把外层的 CTM 矩阵复合进去算真实位置。

这也是为什么很多工具能删"直接画的水印",却删不掉这种。

3. 注释型水印

有些 PDF 的水印是 /Subtype /Watermark 的注释。这类有个很反直觉的现象:

你用白色矩形把它盖住,在大多数阅读器里确实看不见了——但文字还在文件里,pdftotext 一搜就出来。

正确做法是在对象层把这条注释删掉,不是遮盖。判断方法:

pdfinfo -js 文件.pdf    # 或
qpdf --qdf --object-streams=disable 文件.pdf out.pdf
grep -a "Watermark" out.pdf

4. 扫描件水印

水印已经是页面像素的一部分,没有"文字"可以删。只能走图像处理:去色、阈值化、inpainting。这条路必然有损,别追求无损。

三、为什么"删完又出来了"

三个最常见的原因:

  1. 只处理了页面内容流,没处理 Form XObject(第二类)
  2. 只遮盖,没删除(第三类)
  3. PDF 的增量更新机制:很多工具是在文件尾部追加修改,旧对象还物理留在文件里。你用工具"删掉"了,但换个工具打开还能恢复出来。真正的清理必须做全量重写

第三点可以自己验证:

pdfimages -list 文件.pdf      # 看残留图片
pdftotext 文件.pdf - | wc -c  # 看还能提取多少文字
strings 文件.pdf | grep -i watermark

四、不想折腾的话

如果你只是要处理手头这一份文件,不想装软件也不想敲命令,可以直接用在线的。我自己参与的 PDFnoted(pdfnoted.com)就是按"先检测再处理"的思路做的:上传后先扫描,把文字水印、图片水印、注释水印、元数据、隐藏文字分开标注并给出页码,你确认后再处理导出——免费的文字水印和元数据清理不用登录。

它和常见去水印工具的区别是:不假设你的水印是哪一类,而是先把四类都扫一遍告诉你结果。

小结

你的情况 该走的路
水印文字能选中 内容流/CID 字形层删除
选不中,是独立对象 递归 Form XObject
Adobe 里能选中删除 对象层删注释,别遮盖
扫描件 图像处理,必然有损

最省时间的判断顺序:先拖选一下 → 能选中就走第一类,选不中就查是不是 Form XObject,两者都不是再看是不是扫描件。

别一上来就换工具,先确定类型。

posted @ 2026-10-24 18:54  PDFnoted  阅读(13)  评论(0)    收藏  举报