PDF的Document Trailer ID相关问题:双段构成与命令行提取方法
PDF Trailer ID相关问题解答
1. 可获取Trailer ID的命令行工具
无需手动用编辑器搜索,以下工具可直接提取PDF的Trailer ID:
- qpdf:通过
--show-trailer参数输出Trailer内容,配合过滤工具提取ID:
输出会包含ID数组的两个十六进制字符串。qpdf --show-trailer yourfile.pdf | grep -A2 "/ID" - mutool(MuPDF工具集):使用
show命令直接查看Trailer:mutool show yourfile.pdf trailer | grep "/ID" - pdftk:通过
dump_data参数输出元数据,其中包含Trailer ID:pdftk yourfile.pdf dump_data | grep "ID"
2. Trailer ID两段内容的含义
PDF规范(PDF 32000-1:2008 第14.4节)明确规定,/ID是包含两个十六进制字符串的数组:
- 第一个字符串是PDF首次创建时生成的标识符;
- 第二个字符串是PDF最后一次修改时生成的标识符。
LaTeX生成的PDF通常为一次性编译完成,无后续修改操作,因此两段内容会完全一致。
3. ID大小写差异的处理
PDF规范定义十六进制字符串的大小写等价,大小写差异仅为表示方式不同,不影响值的相等性。校验时统一转换为小写或大写即可,例如用tr命令处理:
# 将LaTeX生成的大写ID转小写 echo "ABCDEF1234" | tr '[:upper:]' '[:lower:]'
转换后再与qpdf生成的小写ID对比即可。
4. SOURCE_DATE_EPOCH对qpdf的影响
qpdf默认不会根据SOURCE_DATE_EPOCH自动修改ID,若要实现和LaTeX编译器一致的可重现ID生成,需指定--deterministic-id参数,并配合--set-source-date-epoch:
qpdf --deterministic-id --set-source-date-epoch $SOURCE_DATE_EPOCH input.pdf output.pdf
这样生成的输出PDF会基于指定时间戳生成一致的ID,满足可重现编译需求。
内容的提问来源于stack exchange,提问作者user2609605
相关产品推荐
相关产品推荐

