在 Java 中比较 PDF 文档

Aspose.PDF for Java 提供了并排和图形化比较 API,用于检测 PDF 文件之间的差异。

比较页面并导出差异图像

当您需要针对特定 PDF 页面对生成基于图像的差异输出时,请使用此示例。

  1. 打开两个源 PDF Document 对象。
  2. 使用 GraphicalPdfComparer 获取页面级别的 ImagesDifference。
  3. 使用 ‘GraphicalPdfComparer’ 来获取页面级别的 ‘ImagesDifference’。
  4. 导出生成的差异图像并释放比较结果。
public static void comparePdfWithGetDifferenceMethod(
        Path inputFile1, Path inputFile2, Path diffOutputFile, Path destinationOutputFile) throws Exception {
    try (Document document1 = new Document(inputFile1.toString());
         Document document2 = new Document(inputFile2.toString())) {
        GraphicalPdfComparer comparer = new GraphicalPdfComparer();
        ImagesDifference imagesDifference = comparer.getDifference(document1.getPages().get_Item(1),
                document2.getPages().get_Item(1));

        ImageIO.write(imagesDifference.differenceToImage(Color.getRed(), Color.getWhite()),
                "png", diffOutputFile.toFile());
        ImageIO.write(imagesDifference.getDestinationImage(), "png", destinationOutputFile.toFile());
        imagesDifference.dispose();
    }
    System.out.println("Difference images saved to " + diffOutputFile + " and " + destinationOutputFile);
}

并排比较特定页面

当仅需比较选定页面并将其保存为并排 PDF 结果时,请使用此示例。

  1. 打开两个源 PDF Document 对象。
  2. 配置 SideBySideComparisonOptions 用于所需的比较模式。
  3. 比较选定的页面并保存输出 PDF。
public static void comparingSpecificPages(Path inputFile1, Path inputFile2, Path outputFile) {
    try (Document document1 = new Document(inputFile1.toString());
         Document document2 = new Document(inputFile2.toString())) {
        SideBySideComparisonOptions options = new SideBySideComparisonOptions();
        options.setAdditionalChangeMarks(true);
        options.setComparisonMode(ComparisonMode.IgnoreSpaces);

        SideBySidePdfComparer.compare(document1.getPages().get_Item(1), document2.getPages().get_Item(1),
                outputFile.toString(), options);
    }
    System.out.println("Specific pages comparison saved to " + outputFile);
}

以图形方式比较完整的 PDF 文档

此示例生成一个图形化的 PDF 报告,突出显示整个文档中的视觉差异。

  1. 打开两个源 PDF Document 对象。
  2. 配置 GraphicalPdfComparer 阈值、颜色和分辨率。
  3. 比较完整的文档并保存图形化输出 PDF。
public static void comparePdfWithCompareDocumentsToPdfMethod(Path inputFile1, Path inputFile2, Path outputFile) {
    try (Document document1 = new Document(inputFile1.toString());
         Document document2 = new Document(inputFile2.toString())) {
        GraphicalPdfComparer pdfComparer = new GraphicalPdfComparer();
        pdfComparer.setThreshold(3.0);
        pdfComparer.setColor(Color.getBlue());
        pdfComparer.setResolution(new Resolution(300));
        pdfComparer.compareDocumentsToPdf(document1, document2, outputFile.toString());
    }
    System.out.println("Graphical comparison saved to " + outputFile);
}

并排比较整个文档

当需要将整个文档逐页进行对比并生成并排的 PDF 输出时,请使用此示例。

  1. 打开两个源 PDF Document 对象。
  2. 配置 SideBySideComparisonOptions 以实现所需的比较行为。
  3. 比较完整文档并将结果保存为 PDF。
public static void comparingEntireDocuments(Path inputFile1, Path inputFile2, Path outputFile) {
    try (Document document1 = new Document(inputFile1.toString());
         Document document2 = new Document(inputFile2.toString())) {
        SideBySideComparisonOptions options = new SideBySideComparisonOptions();
        options.setAdditionalChangeMarks(true);
        options.setComparisonMode(ComparisonMode.IgnoreSpaces);

        SideBySidePdfComparer.compare(document1, document2, outputFile.toString(), options);
    }
    System.out.println("Entire document comparison saved to " + outputFile);
}