当前时间: 1970-01-01 08:00:00
分类:办公文件
评论(0)
PDF 水印签名解析器:给文件做「身份鉴定」配套 PDF Watermark Pro 使用,从 PDF 元数据中提取隐藏签名,验证文件来源。
上篇文章介绍了 **PDF 加水印**——一款带防清除能力和隐藏签名的水印工具。有读者问:签名藏进去了,怎么看?
#一、它能干嘛
一句话:**判断一个 PDF 是否被 PDF Watermark Pro 处理过,以及处理的具体细节。**把这些信息硬编码进 PDF 元数据,再用这个解析器批量读出来——这就是整套方案的「验证端」。
#三、解析结果怎么看
| **有效** | 签名完整,含水印文字、指纹、时间戳 || **无签名** | PDF 没有嵌入签名,未被本工具处理 || **残缺** | 有签名但缺关键字段(可能是旧版本或损坏) || **异常** | subject 字段不是合法 JSON,可能是其他工具写的 |北京时间: 2026-06-18 14:55:29创建者: PDF Watermark Pro v2.0#四、这有什么用
很多人觉得"元数据嘛,随便改"。确实,Info Dictionary 和 XMP 都可以被修改。但它的价值不在防篡改,而在**可追溯和可对比**。某份标了「机密」的 PDF 流出去了。你手上有多个部门发出去的版本,不知道哪份泄露。- 每份文件因为处理时间不同,
ts 不同,但同一个水印文字的wm 相同
公司历史档案里有几千份 PDF,哪些加过防清除水印,哪些没加过?- 一秒出结果:「有效签名 847 / 共 1000」
#五、技术实现
解析器做的事就是把水印工具「写进去的东西」原样「读出来」:├── /Info Dictionary (旧式元数据)│ └── /Subject → JSON 字符串└── XMP Metadata Stream (现代元数据)└── dc:subject → JSON 字符串解析引擎同时读两个来源,优先取 XMP(更可靠),然后:
依赖只有 PyMuPDF 和 Python 标准库,tkinter 做 GUI。#六、工具组合拳
| `main7.py` | 「盖章」——加水印 + 嵌入签名 || `wm_reader.py` | 「验章」——批量解析签名 |加水印工具 → 处理文件 → 生成带签名的 PDF#七、怎么获取
> 一个加水印、一个读水印。加了防清除的 PDF,哪怕图层被抹掉,元数据里的签名也会一直跟着文件。给自己留个底,总比事后扯皮强。
基本
文件
流程
错误
SQL
调试
- 请求信息 : 2026-06-28 13:39:46 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/811742.html
- 运行时间 : 0.233272s [ 吞吐率:4.29req/s ] 内存消耗:5,075.36kb 文件加载:145
- 缓存信息 : 0 reads,0 writes
- 会话信息 : SESSION_ID=fe0f5ea907bc062f0416f024a36a03a3
- CONNECT:[ UseTime:0.001155s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
- SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001584s ]
- SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000776s ]
- SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000713s ]
- SHOW FULL COLUMNS FROM `set` [ RunTime:0.001383s ]
- SELECT * FROM `set` [ RunTime:0.000630s ]
- SHOW FULL COLUMNS FROM `article` [ RunTime:0.001416s ]
- SELECT * FROM `article` WHERE `id` = 811742 LIMIT 1 [ RunTime:0.001623s ]
- UPDATE `article` SET `lasttime` = 1782625186 WHERE `id` = 811742 [ RunTime:0.032230s ]
- SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000733s ]
- SELECT * FROM `article` WHERE `id` < 811742 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001292s ]
- SELECT * FROM `article` WHERE `id` > 811742 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001159s ]
- SELECT * FROM `article` WHERE `id` < 811742 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.002060s ]
- SELECT * FROM `article` WHERE `id` < 811742 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001880s ]
- SELECT * FROM `article` WHERE `id` < 811742 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.003024s ]
0.237296s