【问题标题】:why % sign used in pdf strcuture为什么在 pdf 结构中使用 % 符号
【发布时间】:2017-03-16 05:42:51
【问题描述】:

我有一个关于pdf结构的问题,为什么在pdf中使用%符号。

我得到了一些结果,他们提到 % 符号用于 cmets,但如果我们将 % 符号用于 cmets,那么 %PDF-1.5%%EOF 中使用的 % 符号呢?

%PDF-1.5 定义文件头和

%%EOF 定义 pdf 结构的结尾。

那么为什么 % 符号用于 PDF-1.5 以及为什么 % 符号在 EOF 中使用了 2 次?

从结果我知道%符号用于cmets,那么为什么上面两个术语不同?

您的帮助将不胜感激 - 谢谢您

【问题讨论】:

标签: security pdf malware pdf-form


【解决方案1】:

我实际上对 pdf 结构或正确使用 % 一无所知,但它似乎与 shell 脚本(如 bash、perl 甚至 python)需要 shebang #! 后跟可执行文件的原因相同。

关于为什么 bash 脚本在脚本开头需要 #! 可以阅读更多信息:https://stackoverflow.com/a/8968514/6037755

【讨论】:

    【解决方案2】:

    为什么 % 符号用于 PDF-1.5,为什么 % 符号在 EOF 中使用了 2 次?

    从结果中我知道 % 符号是用于 cmets 的,那为什么上面两个术语不同呢?

    您可以考虑将这些条目实际上是 cmets(毕竟它们不包含任何用于 PDF 渲染的 PDF 对象)您是需要放置的在 PDF 文件的某些位置。

    根据规范 ISO 32000-1:

    7.5.2 文件头

    PDF 文件的第一行应为 标题,由 5 个字符 %PDF– 后跟 1.N 形式的版本号组成,其中 N 是 0 到 7 之间的数字。

    7.5.5 文件预告

    PDF 文件的预告片使符合标准的读者能够快速找到交叉引用表和某些特殊对象。符合要求的读者应该从头开始阅读 PDF 文件。文件的最后一行应仅包含文件结束标记 %%EOF

    正如此处使用的“应”所表明的,这些是要求。


    这些标记在所有其他方面都是 cmets 确实是有道理的。

    这些标记仅用于识别 PDF 的开始和结束,在 PDF 处理器开始处理实际 PDF 对象之前具有特殊含义。一旦确定了开始和结束,就必须忽略这些标记。因此,制作这些标记 cmets 是一个显而易见的选择。

    对于不寻常的处理类型也是如此。例如。如果由于某种原因 PDF 的交叉引用被破坏并且某些程序试图通过搜索间接 PDF 对象来重新创建它们,它不需要特别处理这些标记,它会自动将它们作为 cmets 忽略。


    PS根据 Adob​​e 在其 PDF 参考附件 H 中的实施说明,他们的工具也接受替代标题:

    3.4.1,“文件头”

    [...]

    14.Acrobat 查看器也接受表单的标题

    %!PS−Adobe−N.n PDF−M.m
    

    如果你想知道为什么标记注释的内容被选择和它们完全一样,那么你应该研究一下 PDF 和 Postscript 的历史

    【讨论】:

      猜你喜欢
      • 2014-02-19
      • 1970-01-01
      • 2019-08-21
      • 1970-01-01
      • 1970-01-01
      • 2017-10-16
      • 1970-01-01
      • 1970-01-01
      • 2023-01-20
      相关资源
      最近更新 更多