AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 79313035
Accepted
user2609605
user2609605
Asked: 2024-12-28 08:48:31 +0800 CST2024-12-28 08:48:31 +0800 CST 2024-12-28 08:48:31 +0800 CST

PDF 中的文档尾部 ID:为什么它由两个字符串组成以及如何通过命令行工具提取它

  • 772

尽管有工具可以访问 PDF 元数据,例如pdfinfo,但我没有找到获取预告片 ID 的正确方法。相反,我使用编辑器并搜索... 所以我的第一个问题是,是否有命令行工具可以为我完成这项工作。

尽管如此,我发现并且感到疑惑:该 ID 有两个部分,预告片如下所示:

trailer << /Info 2 0 R /Root 1 0 R /Size 3656 
/ID [<2442556d3492442c8e034f4bf45c46d4><31415926535897932384626433832795>] >>

我对这两个部分 ID 的用途感到疑惑;PDF 规范对此没有说明。在我用 latex 创建的 PDF 中,这两个部分是一致的。

我还想知道为什么有些工具似乎喜欢qpdf写小写字母,而其他工具(如 latex 编译器)似乎使用大写字母。这使得相等性测试变得困难。

即使调用,qpdf结果SOURCE_DATE_EPOCH=hex number也不会改变。...这与乳胶编译器不同。

pdf
  • 2 2 个回答
  • 35 Views

2 个回答

  • Voted
  1. Best Answer
    mkl
    2024-12-28T15:50:24+08:002024-12-28T15:50:24+08:00

    关于你的第二个问题

    我对这两个部分 ID 的用途感到疑惑;PDF 规范对此没有说明。在我用 latex 创建的 PDF 中,这两个部分是一致的。

    PDF规范解释道:

    14.4 文件标识符

    PDF 文件标识符应由 PDF 文件尾部字典中的ID条目定义(请参阅 7.5.5,“文件尾部”)。此条目的值应为两个字节字符串的数组。第一个字节字符串应为基于 PDF 文件最初创建时内容的永久标识符,并且在 PDF 文件更新时不会更改。第二个字节字符串应为基于 PDF 文件上次更新时内容的变化标识符(请参阅 7.5.6,“增量更新”)。首次写入 PDF 文件时,两个标识符应设置为相同的值。如果引用中的第一个标识符与引用文件的ID条目中的第一个标识符匹配,并且引用中的最后一个标识符与引用文件的ID条目中的最后一个标识符匹配,则很可能找到了正确且未更改的 PDF 文件。如果只有第一个标识符匹配,则找到了正确 PDF 文件的不同版本。

    (ISO 32000-2)

    因此,第一部分标识跨修订的文档,第二部分标识单个修订。

    我还想知道为什么像 qpdf 这样的工具似乎会写小写字母,而像 latex 编译器这样的其他工具似乎会使用大写字母。这使得相等性测试变得困难。

    十六进制字符串可以使用小写或大写字母,甚至可以混合使用。ID 比较必须准备好处理这种情况。

    • 1
  2. johnwhitington
    2024-12-28T21:29:53+08:002024-12-28T21:29:53+08:00

    您可以使用以下方式提取 JSON 格式的 ID

    cpdf -print-dict-entry /ID in.pdf

    例如

    $ cpdf -print-dict-entry /ID cpdfmanual.pdf
    ["\u000ez?$?r,~?\"?\nd?\"9","\u000ez?$?r,~?\"?\nd?\"9"]
    
    • 0

相关问题

  • SVG 透明度破坏了 PDF/A 兼容性

  • 使用旧版 iText-2.1.7 将符号添加到 PDF

  • Adobe DRM 无法获取图像 pdf 的 acsm 文件

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    为什么这个简单而小的 Java 代码在所有 Graal JVM 上的运行速度都快 30 倍,但在任何 Oracle JVM 上却不行?

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    何时应使用 std::inplace_vector 而不是 std::vector?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Martin Hope
    Aleksandr Dubinsky 为什么 InetAddress 上的 switch 模式匹配会失败,并出现“未涵盖所有可能的输入值”? 2024-12-23 06:56:21 +0800 CST
  • Martin Hope
    Phillip Borge 为什么这个简单而小的 Java 代码在所有 Graal JVM 上的运行速度都快 30 倍,但在任何 Oracle JVM 上却不行? 2024-12-12 20:46:46 +0800 CST
  • Martin Hope
    Oodini 具有指定基础类型但没有枚举器的“枚举类”的用途是什么? 2024-12-12 06:27:11 +0800 CST
  • Martin Hope
    sleeptightAnsiC `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它? 2024-11-09 07:18:53 +0800 CST
  • Martin Hope
    The Mad Gamer 何时应使用 std::inplace_vector 而不是 std::vector? 2024-10-29 23:01:00 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST
  • Martin Hope
    MarkB 为什么 GCC 生成有条件执行 SIMD 实现的代码? 2024-02-17 06:17:14 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve