为什么即使内容相同,PDF文件也不同?

pro*_*er8 5 pdf pdf-generation

"在PDF查看器中打开时,通常有多种方法可以创建看起来像同卵双胞胎的PDF文档.即使您使用完全相同的代码创建两个相同的PDF文档,两个结果文件之间也会有很小的差异. PDF格式固有的."

我在"Itext in action-second edition"中读到了这一段.(第17页).任何人都可以解释一下作者所说的是什么样的差异.如果我可以说,pdf格式有这个缺陷的原因.

Bru*_*gie 7

在不同时刻创建的文件具有不同的值,CreationDate并且它们具有不同的文件标识符(具有在不同时刻创建的两个文件,应该具有IDPDF规范中定义的不同).

文件标识符通常是基于日期,路径名,文件大小,PDF文件的部分内容(例如,信息字典中的条目)创建的散列.我引用ISO-32000-1:

文件标识符的计算不需要是可再现的; 重要的是标识符可能是唯一的.例如,前述算法的两种实现可能对当前时间使用不同的格式,导致它们为同时创建的同一文件生成不同的文件标识符,但标识符的唯一性不受影响.

加密文档时,文件标识符是必需的,因为它们在加密过程中使用.因此,具有不同文件标识符的加密PDF文件将具有完全不同的流.这不是一个缺陷,这是设计的.我是ISO委员会的成员,正致力于PDF 2.0规范,我可以向您保证,没有计划改变这一点.即使使用相同的代码,在不同时间点创建的文件也会有所不同.(我也是你提到的那本书的作者.)

ISO规范还允许其他差异.例如:用于在页面上显示图形和文本的语法可以出于任何原因重新组织.参见ISO-32000-1的8.2节,其中说:

重要的是,对图形状态运算符的精确排列没有语义意义.PDF内容流的一致读取器或写入器可以将图形状态操作符的布置改变为实现每个图形对象的相关图形状态参数的相同值的任何其他布置.

当处理PDF内容流时,PDF处理器可以将图形状态运算符的排列改变为实现每个图形对象的相关图形状态参数的相同值的任何其他布置.这样做可以优化页面,使其更快地呈现,使其更容易调试,改进压缩,或出于任何其他原因.

两个看似相同的PDF可能在内部有所不同的另一个原因是PDF字典.字典中键的顺序在PDF中没有任何重要性.实现该字母规范的软件将使用例如HashMap故事键/值对.根据JVM,相同的代码可以生成两个PDF,其中词典在语义上相同,但其中的条目以不同的方式排序.这不是错误.这完全符合ISO-32000-1.

重要提示:使用相同代码创建的两个PDF文件之间的内部差异,但在不同时刻,在PDF查看器中打开文档或在纸张上打印文档时可能不会产生视觉差异.