gpt4 book ai didi

java - Apache FileUtils 比较两个相同的 pdf 时不断返回 false

转载 作者:行者123 更新时间:2023-12-01 23:01:21 25 4
gpt4 key购买 nike

我正在使用 FileUtils 来比较两个相同的 pdf。这是代码:

boolean comparison = FileUtils.contentEquals(pdfFile1, pdfFile2);

尽管两个 pdf 文件是相同的,但我总是得到 false。我还注意到,当我执行时:

byte[] byteArray = FileUtils.readFileToByteArray(pdfFile1);
byte[] byteArrayTwo = FileUtils.readFileToByteArray(pdfFile2);
System.out.println(byteArray);
System.out.println(byteArrayTwo);

我得到两个 pdf 文件的以下字节码:

[B@3a56f631
[B@233d28e3

因此,尽管两个 pdf 文件在视觉上完全相同,但它们的字节码不同,因此无法通过 boolean 测试。有没有办法测试相同的pdf文件是否相同?

最佳答案

不幸的是,对于 PDF 来说,“相同的文件”和“视觉上相同”的文件之间存在很大差异。所以第一个问题是你在寻找什么。

一个非常简单的例子,PDF文件中的信息可以压缩也可以不压缩,并且可以使用不同的压缩过滤器进行压缩。例如,采用一个部分内容未压缩的文件,并使用 ZIP 压缩过滤器压缩该内容,将得到两个在字节级别上非常不同的文件,但在视觉上却非常相似。

因此您可以执行多种不同的操作来比较 PDF 文件:

1)如果您想检查是否有“相同的文件”,请读入它们并计算某种校验和,如 Peter Petrov 之前回答的那样。

2)如果您想知道或知道文件在视觉上是否相同,最常见的方法是某种渲染。将所有页面渲染为图像并比较图像。实际上,这并不像听起来那么简单,有简单的(例如 callas pdfToolbox)和复杂的(例如 Global Vision DigitalPage)应用程序实现某种“相同”算法(注意,我与这两种算法都相关)这些供应商)。

因此,首先要明确您到底需要什么,然后仔细选择哪种方法最有效。

关于java - Apache FileUtils 比较两个相同的 pdf 时不断返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23337096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com