Сравнение PDF‑документов в Java

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);
}