为什么相同的自动化过程生成的pdf在不同的机器上是不同的?

  • 本文关键字:机器 pdf 是不同 自动化 过程 pdf
  • 更新时间 :
  • 英文 :


我有一个自动生成pdf文件的过程,然后我们通过批准测试将其与已知版本进行比较,以验证管道中的任何内容都没有损坏。我规范了不匹配的字段,如创建/修改日期和时区,本地所有内容总是100%匹配。然而,由于某些原因,在我们的构建服务器上生成的pdf与我在本地生成的pdf 非常不同,有时我在本地生成的pdf大20%。

在winmerge中比较文件的第一个区别是/FontName字段,它看起来像这样:

本地生成

/FontName/QOAAAA+TimesNewRomanRegular

构建服务器生成

/FontName/QYAAAA+TimesNewRomanRegular

之后,我们有/FontBBox,长度和二进制数据的差异。我看到好几块这样的

我的怀疑是稍微不同的字体是可用的,并在两台机器上被选择,并嵌入到pdf中,但我不知道上面的Q*AAAA代码意味着什么,也不知道如何验证这个假设。

编辑:

pdffont报告两种相同的字体,但不可能只是相同嵌入字体的不同版本吗?

W:xpdfbin-win-3.03bin64> .pdffonts.exe w:...PhantomRasterizerCan_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.03bin64> .pdffonts.exe W:...PhantomRasterizerCan_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文件不同,即使内容是相同的?

你的问题相当于"为什么在不同的jvm上HashMap中的条目顺序不同?"答案很简单:因为HashMap就是这样设计的。HashMap不是TreeMap

你现在关注的是字体,更具体地说是字体子集(关于字体子集名称中的随机字符ISO-32000-1声明"字母的选择是任意的",所以你在你的问题中与ISO标准相抗衡)。然而,这是你最不需要担心的。PDF的id也应该是不同的,字典中条目的顺序就像HashMap中的条目。阅读ISO-32000-1第7.3.7节:

字典中的条目表示一个关联表,因此即使可以任意命令,也不得无序当它们被写入文件时。该顺序将被忽略。

对象编号也是如此。我见过测试检查对象编号为1的对象是这个还是那个字典,对象编号为2的对象是这个还是那个数组。然而,对象编号并不重要。您可以在一个系统中创建一个PDF文档,其中第一个对象是一个字典,第二个对象是一个数组,并且使用相同的代码创建相同的PDF文档,其中使用的是另一种方式。我们最近注意到,当我们用Java 8而不是Java 7测试软件时,我们的一个测试很糟糕。一旦您更改了JVM,您的测试就会出现同样的问题。

您的验证错误。当我们测试pdf时,我们使用完全不同的方法。

相关内容

最新更新