根据规格的最小 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 但仍被 Adobe 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 大小的主要内容,如果未能解决你的问题,请参考以下文章