我是新来的,在 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
所以,我不知道如何比较这两个文件。
默认情况下,我无法修改响应,所以也许我可以使用比字节到字节比较更智能的东西,可以识别文件内容并仅使用它。
最佳答案
Google 建议您将 PDF 渲染为图像并像此库一样比较图像:
还有像这个库这样更灵活的解决方案:
关于java - 由于预告片,两个相同 PDF 文件的比较失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61665531/