为啥在 pdf 结构中使用 % 符号

Posted

技术标签:

【中文标题】为啥在 pdf 结构中使用 % 符号【英文标题】: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,那么为什么上面两个术语不同?

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

【问题讨论】:

为什么你用malware和security标记你的问题? 【参考方案1】:

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

关于为什么 bash 脚本在脚本开头需要 #! 可以阅读更多信息:https://***.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 的历史

【讨论】:

以上是关于为啥在 pdf 结构中使用 % 符号的主要内容,如果未能解决你的问题,请参考以下文章

有时候将PPT(powerpoint)文件转化成PDF文件后,打开来看,发现很多汉字变成了一些奇怪的符号,为啥?

为啥在迭代时省略了作为索引值的符号?

如何在 django 中使用 xhtml2pdf 生成的 PDF 中显示表情符号字符?

Ruby PDF::Reader 使用正则表达式匹配项目符号

尝试使用 java 签署 pdf 文档。为啥 PDF 文件中的签名无效?

尝试使用点符号在控制台中记录数据对象但它不起作用,为啥?