【问题标题】:Flying saucer/OpenPdf same string html content but different byte[]飞碟/OpenPdf 相同的字符串 html 内容但不同的字节 []
【发布时间】:2020-04-05 04:58:16
【问题描述】:

我正在使用带有 openpdf 的飞碟 pd 来生成 pdf。 我使用 thymleaf 3 从 htm 文件生成 pdf。

一切正常,但不是测试。

我的想法是创建一个生成 pdf 文件的测试方法...之后我将 ButeArrayStream 转换为 byte[] ...最后测试使用 byte[] 生成的 byte[] 我从以前的编译。

但是,我发现 ItextRenderer.createPdf(htmlContent) 每次生成不同的 byte[]。

正常吗?有没有办法每次都得到相同的字节[]?

【问题讨论】:

  • 注意:html内容每次都是一样的……所以不是thymleaf生成不同的html……真的是ItextRenderer的createPdf方法。
  • 这可能是正常的,我希望它包含元数据,例如渲染时间戳。你能检查一下 PDF 看看有什么不同吗?
  • 出于测试的目的,如果你想测试自己的代码而不是飞碟,测试到PDF渲染器的HTML输入应该足够了。
  • 比较字节,可能是十六进制的可视化。也许变化很小。例如,在开始时有几个字节未指定,通常用非 ASCII 填充,因此 Unix 将数据识别为二进制。但是,如果长度也不同,作为内部地址的内部数字也会被移动。
  • 或者,可以将两个 pdf 都渲染为图像,应用一些智能图像操作,并检查差异。

标签: java thymeleaf integration-testing flying-saucer openpdf


【解决方案1】:

这很正常。如果要测试文档,则需要进行结构或视觉比较,而不是字节比较。要了解如何执行此操作,请查看 iText 7 的 CompareTool 类(OpenPdf 是旧版 iText 的分支,因此 API 可能看起来很熟悉)。

【讨论】:

  • Set 并不是随机化的。在相同的 JVM 和架构上运行相同的代码,使用相同的输入将产生相同的输出。
  • 谢谢,我看到了 Windows 上的 Java 7 和 Linux 上的 Java 11 之间的区别。
猜你喜欢
  • 1970-01-01
  • 2014-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
  • 2013-04-03
  • 2023-03-11
  • 1970-01-01
相关资源
最近更新 更多