乐于分享
好东西不私藏

PDF 水印签名解析器:给文件做「身份鉴定」

PDF 水印签名解析器:给文件做「身份鉴定」

配套 PDF Watermark Pro 使用,从 PDF 元数据中提取隐藏签名,验证文件来源。

上篇文章介绍了 **PDF 加水印**——一款带防清除能力和隐藏签名的水印工具。有读者问:签名藏进去了,怎么看?

于是就有了这个**解析器**。

#一、它能干嘛

一句话:**判断一个 PDF 是否被 PDF Watermark Pro 处理过,以及处理的具体细节。**
拿到一个 PDF,你可能会想问:
  • 这个文件加过水印吗?
  • 什么时候加的?
  • 加了什么内容的水印?
  • 用的是哪个版本的工具?
把这些信息硬编码进 PDF 元数据,再用这个解析器批量读出来——这就是整套方案的「验证端」。

#二、怎么用

界面延续了水印工具的深色科技风:
左侧 — 文件列表,支持批量添加 PDF
右侧 — 解析结果,每文件一张信息卡片
底部 — 状态栏,实时显示进度
操作步骤:
  1. 点「添加 PDF」选中一个或多个文件
  2. 点「解析全部」
  3. 每张卡片展示水印文字、指纹、时间、版本
  4. 点「 详情」展开完整字段

#三、解析结果怎么看

每张卡片右上角有一个状态标签:
| 状态 | 含义 |
| **有效** | 签名完整,含水印文字、指纹、时间戳 |
| **无签名** | PDF 没有嵌入签名,未被本工具处理 |
| **残缺** | 有签名但缺关键字段(可能是旧版本或损坏) |
| **异常** | subject 字段不是合法 JSON,可能是其他工具写的 |
展开详情后可以看到完整字段:
文件路径: D:\docs\合同_水印版.pdf
水印文字: 机密文件·严禁外传
签名指纹: fe99a632adad8f73
UNIX时间戳: 1781852129
北京时间: 2026-06-18 14:55:29
工具版本: wm_pro_v2
创建者: PDF Watermark Pro v2.0

#四、这有什么用

很多人觉得"元数据嘛,随便改"。确实,Info Dictionary 和 XMP 都可以被修改。但它的价值不在防篡改,而在**可追溯和可对比**。
场景一:内部文件泄露
某份标了「机密」的 PDF 流出去了。你手上有多个部门发出去的版本,不知道哪份泄露。
  • 用解析器逐个读取wm 哈希值
  • 每份文件因为处理时间不同,ts 不同,但同一个水印文字的wm 相同
  • 比对后锁定流出批次
场景二:合同被替换
对方发回一份声称是你提供的合同,你怀疑被调包。
  • 你手上有原始发送记录的签名
  • 解析对方那份,比对wm、ts、text
  • 三点全部吻合 → 确认为你发出的文件
  • 任何一点对不上 → 文件被篡改或替换
场景三:批量文档管理
公司历史档案里有几千份 PDF,哪些加过防清除水印,哪些没加过?
  • 批量导入解析器
  • 一秒出结果:「有效签名 847 / 共 1000」
  • 剩下 153 份需要补处理

#五、技术实现

解析器做的事就是把水印工具「写进去的东西」原样「读出来」:
```
PDF 文件
├── /Info Dictionary (旧式元数据)
│ └── /Subject → JSON 字符串
└── XMP Metadata Stream (现代元数据)
└── dc:subject → JSON 字符串
```
解析引擎同时读两个来源,优先取 XMP(更可靠),然后:
  1. `json.loads()` 解析出字典
  2. 校验 `wm`、`ts` 必填字段
  3. 把 Unix 时间戳转成北京时间
  4. 把水印原文字段 `text` 直接展示
依赖只有 PyMuPDF 和 Python 标准库,tkinter 做 GUI。

#六、工具组合拳

| 工具 | 角色 |
| `main7.py` | 「盖章」——加水印 + 嵌入签名 |
| `wm_reader.py` | 「验章」——批量解析签名 |
两件套配合使用:
```
加水印工具 → 处理文件 → 生成带签名的 PDF
↓
对方去水印(可视图层没了)
↓
解析器 → 读出隐藏签名 → 确认来源
```

#七、怎么获取

关注公众号回复【PDF签名解析】即可获得下载链接
> 一个加水印、一个读水印。加了防清除的 PDF,哪怕图层被抹掉,元数据里的签名也会一直跟着文件。给自己留个底,总比事后扯皮强。

相关学习资料