java - 由于预告片,两个相同 PDF 文件的比较失败

标签 java pdf junit mocking

我是新来的,在 Java 方面有一些经验。 我创建了简单的单元测试,下载一些 pdf 文件并尝试将其与本地文件进行比较。

        final byte[] content = mockMvc.perform(
                get(URL, SAMPLE_1_ID)
                        .contentType(MediaType.APPLICATION_JSON))
                .andDo(print())
                .andExpect(status().isOk())
                .andReturn().getResponse().getContentAsByteArray();

        final byte[] expectedContent = Files.readAllBytes(Paths.get("src\\test\\resources\\my-local-file.pdf"));

        assertThat(content).isEqualTo(expectedContent);

我试图比较两个完全相同的 PDF 文件,但是当我使用字节比较时,这给了我:

Expected :[B@1b708791
Actual   :[B@42e6e4b6

实际上,我试图找出问题所在并发现了这一点(当使用字符串输出格式(.getContentAsString())时)

在第一个文件中:

trailer
<</Info 7 0 R/ID [<435536b10a5043b4c9e7a580fddc1aad><0c71af32c6741a3e5d5b226eb852934a>]/Root 6 0 R/Size 8>>
startxref
3274
%%EOF

在第二个文件中:

trailer
<</Info 7 0 R/ID [<af96b826e05e3a7d865b83646cae3b40><98b845965d6bf45ee9a8faf6f6be9981>]/Root 6 0 R/Size 8>>
startxref
3274
%%EOF

如你所见,ID 不同,这就是我断言失败的原因

我发现每个文档生成的标识符都是唯一的: https://www.oreilly.com/library/view/developing-with-pdf/9781449327903/ch01.html

screenshot

所以,我不知道如何比较这两个文件。

默认情况下,我无法修改响应,所以也许我可以使用比字节到字节比较更智能的东西,可以识别文件内容并仅使用它。

最佳答案

Google 建议您将 PDF 渲染为图像并像此库一样比较图像:

还有像这个库这样更灵活的解决方案:

关于java - 由于预告片,两个相同 PDF 文件的比较失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61665531/

相关文章:

java - 如何从动态代理显式调用默认方法?

java - Spring Roo : difference between [controller scaffold --class] and [web mvc scaffold --class ]

java - Spring调度器多次执行任务

pdf - Bootstrap 3 - 打印/PDF

iphone - 使用其他应用程序打开 pdf

java - 单元测试覆盖率和测试大型组件

java - 如何编写使用 XML 的测试用例?

java - 在 Java 中转换对象

c# - 在浏览器中流式传输 Pdf 时如何设置文件名?

java - 捕获应用程序上下文错误 spring junit