我有一个生成 pdf 的自动化流程然后我们通过批准测试将其与已知版本进行比较验证该管道中没有任何损坏。我标准化不匹配的字段例如创建/修改日期和时区,本地所有内容始终 100% 匹配。然而由于某种原因,我们的构建服务器上生成的 pdf 是very与我在本地生成的数据不同,有时我在本地生成的数据要大 20%。
在 winmerge 中比较文件时的第一个区别是/FontName
字段如下所示:
本地生成
/FontName/QOAAAA+TimesNewRomanRegular
构建服务器生成
/FontName/QYAAAA+TimesNewRomanRegular
之后我们有分歧/FontBBox
、长度和二进制数据。我看到了这样的几个街区。
我怀疑两台机器上可用的字体略有不同,在两台机器上选择的字体并嵌入到 pdf 中,但我不知道是什么Q*AAAA
上面的代码意味着也不意味着如何验证该假设。
Edit:
pdffonts 报告两者具有相同的字体,但这难道不是同一嵌入字体的不同版本吗?
W:\xpdfbin-win-3.03\bin64> .\pdffonts.exe w:\...\PhantomRasterizer\Can_rasterize_html_to_pdf.slide_with_table_and_svg.approved.pdf
name type emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
TimesNewRomanRegular CID TrueType yes no yes 7 0
ArialBold CID TrueType yes no yes 12 0
ArialRegular CID TrueType yes no yes 17 0
W:xpdfbin-win-3.03\bin64> .\pdffonts.exe W:\...\PhantomRasterizer\Can_rasterize_html_to_pdf.slide_with_table_and_svg.received.pdf
name type emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
TimesNewRomanRegular CID TrueType yes no yes 7 0
ArialBold CID TrueType yes no yes 12 0
ArialRegular CID TrueType yes no yes 17 0
请阅读我对这个问题的回答:为什么PDF文件内容相同却不同?
你的问题相当于“为什么a中的条目顺序是这样的”HashMap
在不同的 JVM 上有不同吗?”答案很简单:因为HashMap
s 就是这样设计的。 AHashMap
不是一个TreeMap
.
您现在关注的是字体,更具体地说是字体子集(关于字体子集名称中的随机字符 ISO-32000-1 规定“字母的选择是任意的”,因此您在问题中质疑 ISO 标准) 。然而,这是你遇到的最小的麻烦。 PDF 的 ID 也应该不同,字典中的条目顺序就像字典中的条目一样HashMap
。阅读 ISO-32000-1 第 7.3.7 节:
字典中的条目代表一个关联表,因此
即使可以施加任意命令,也应是无序的
当它们写入文件时。该顺序将被忽略。
对象编号也是如此。我见过一些测试,检查对象编号为 1 的对象是否是这个或那个字典,以及对象编号 2 的对象是这个还是那个数组。但是:对象数量并不重要。您可以在一个系统中创建一个 PDF 文档,其中第一个对象是字典,第二个对象是数组,并且相同的 PDF 文档使用相同的代码情况恰恰相反。我们最近注意到,当使用 Java 8 而不是 Java 7 测试我们的软件时,我们的一个测试很糟糕。一旦更改 JVM,您的测试就会遇到同样的问题。
你的验证是错误的。当我们测试 PDF 时,我们使用完全不同的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)