根据规格的最小 PDF 大小

Posted

技术标签:

【中文标题】根据规格的最小 PDF 大小【英文标题】:Minimal PDF size according to specs 【发布时间】:2016-04-25 12:36:01 【问题描述】:

我正在阅读 PDF 规范,但我对它的结构有一些疑问。

首先,文件签名是%PDF-n.m(8字节)。 在那之后,文档说可能至少 4字节的二进制数据(但也可能没有)。文档没有说可能有多少二进制字节,所以这是我的第一个问题。如果我试图解析 PDF 文件,我应该如何解析那部分?我怎么知道放在那里的二进制字节(如果有的话)?我应该在哪里停止解析?

在那之后,应该有一个正文、一个外部参照表和一个预告片以及一个%%EOF

假设 PDF 文件中根本没有任何内容(没有任何对象)并且假设文件开头不包含可选的二进制字节部分,那么 PDF 的最小文件大小可能是多少?

第三个也是最后一个问题:如果有多个 body+xref+trailer 部分,在 %%EOF 指向之前会偏移哪里?第一个还是最后一个xref 表?

【问题讨论】:

第二行不能是任意的“二进制数据”——它只是一个注释行。话虽如此:您可以将其解析为任何随机注释行。 @Jongware 不,据我在规范中看到的,这些实际上是 至少 4 个完全随机的字节。 不是完全随机的——它应该仍然是可解析的! Adobe 自己的指南(我的 iPad 上没有 ISO-32000)在 3.4.1 中说“包含至少四个二进制字符的注释行”。注意“评论”;想象你的第一个角色是一个LF! (他们还使用“二进制”作为字符代码 >128 的同义词:P 他们的明确意思是“设置了最高位”。) @Jongware 啊,是的,我也是这么想的。无论如何,我怎么知道 PDF 有多少个二进制字符?我应该寻找任何“断点”吗? 哦...我刚刚意识到...值 > 128... 我应该只搜索值 【参考方案1】:

首先,文件签名是 %PDF-n.m(8 字节)。在那之后,文档说可能至少有 4 个字节的二进制数据(但也可能没有)。文档没有说可能有多少二进制字节,所以这是我的第一个问题。如果我试图解析 PDF 文件,我应该如何解析那部分?我怎么知道放在那里的二进制字节(如果有的话)?我应该在哪里停止解析?

您有哪些文档? PDF 规范ISO 32000-1 说:

如果 PDF 文件包含二进制数据,大多数情况下(参见 7.2,“词汇约定”),标题行应为 紧随其后的 comment line 至少包含四个二进制字符,即 代码为 128 或更大。

因此,那些至少 4 字节的二进制数据并没有紧跟在没有任何结构的文件签名之后,而是在注释!这意味着他们是

    前面有 %(它开始注释,即在解析时必须忽略的数据)和 后跟换行符,即 CR、LF 或 CR LF。

因此在解析时很容易识别。特别是它只是注释行的一个特例,没有什么特别的处理。

(叹气,我刚刚看到你和@Jongware 在我写这篇文章时在 cmets 中清除了它......)

假设 PDF 文件中根本没有任何内容(没有任何对象)并且假设文件开头不包含可选的二进制字节部分,那么 PDF 的最小文件大小可能是多少?

如果没有对象,则您没有 PDF 文件,因为 PDF 文件中需要某些对象,尤其是目录。那么您的意思是最小的有效 PDF 文件吗?

正如您评论的那样,您确实是指最小的有效 PDF。

请查看 *** 上的问题What is the smallest possible valid PDF?,有一些尝试创建或多或少严格遵守规范的最小 PDF。阅读例如@plinth's answer 您将看到不再是 PDF 但仍被 Adob​​e Reader 接受的内容。

第三个也是最后一个问题:如果有多个主体+外部参照+拖车部分,在 %%EOF 指向之前会偏移哪里?

通常它是最后一个交叉引用表/流,因为通常的用例是

您从只有一个交叉引用部分的 PDF 开始; 您附加了一个增量更新,其中交叉引用部分指向原始作为previous%%EOF 之前的新偏移量指向该新交叉引用; 您附加了另一个增量更新,其中交叉引用部分指向第一次更新的交叉引用作为previous%%EOF 之前的新偏移量指向最新的交叉引用;李> 等等……

线性化文档的例外情况是,%%EOF 之前的偏移量指向初始交叉引用,而交叉引用又指向文件末尾的部分,如 以前的。有关详细信息,请参阅。 ISO 32000-1的附件F。

当然,您可以对线性化文档应用增量更新,因此您可以使用混合形式。

一般来说,解析器最好能够解析任何顺序的部分交叉引用。并且不要忘记,不仅有交叉引用部分,还可以选择交叉引用流。

【讨论】:

%我不太确定 OP 是否理解它必须是一个完全正常的评论...á§₩ü - 在这里,几个“二进制”字符在评论中显示它们有效的。它也以% 开头。 感谢您的澄清!现在应该讨论问题的第一部分。 So do you mean a minimal valid PDF file? -> 是的,我的意思是 PDF 文件的最小可能内容。 The exception is the case of linearized documents -> 你能告诉我更多关于那个案子的信息吗? 好的,所以只剩下最小尺寸的问题了。我还有另一个问题,但那是另一个完整的问题,所以我会发布另一个问题。 我发布了我的下一个问题:***.com/questions/34888029/…

以上是关于根据规格的最小 PDF 大小的主要内容,如果未能解决你的问题,请参考以下文章

规格px是啥意思

根据商品规格筛选商品

根据订单规格匹配通用托盘规格

根据订单规格匹配通用托盘规格

根据订单规格匹配通用托盘规格

SKU商品规格选择