Java porównywanie plików PDF – główny przewodnik GroupDocs.Comparison API

W tym przewodniku dowiesz się, jak java compare pdf files efektywnie używać z GroupDocs.Comparison dla Javy. Niezależnie od tego, czy tworzysz portal do przeglądania umów, system kontroli wersji, czy narzędzie do sprawdzania prac akademickich, możliwość wykrycia nawet najmniejszych zmian w dokumentach PDF jest niezbędna. Przeprowadzimy Cię przez konfigurację, podstawową logikę porównywania, generowanie podglądów, obsługę haseł, integrację z chmurą oraz wydajne praktyki – abyś mógł w kilka minut wdrożyć niezawodne rozwiązanie.

Szybkie odpowiedzi

  • Co robi GroupDocs Comparison Java? Porównuje dwa lub więcej dokumentów, podświetla każdą zmianę i może generować wizualne podglądy do szybkiego przeglądu.
  • Jakie formaty plików są obsługiwane? Word, PDF, Excel, PowerPoint, obrazy, HTML i wiele innych.
  • Czy potrzebna jest licencja do produkcji? Tak – ważna licencja GroupDocs usuwa znaki wodne i odblokowuje pełny zestaw funkcji.
  • Czy mogę obsługiwać duże dokumenty? Tak – przy odpowiednim zarządzaniu pamięcią i paginacją podglądów możesz przetwarzać PDF‑y o setkach stron.
  • Gdzie znaleźć najnowszą zależność Maven? W repozytorium GroupDocs – sprawdź najnowszą wersję przed dodaniem.

Czym jest java compare pdf files?

java compare pdf files odnosi się do programowego procesu ładowania dwóch wersji PDF, wykrywania różnic tekstowych, formatowania i graficznych oraz opcjonalnego tworzenia dokumentu wynikowego, który wizualnie zaznacza te zmiany. GroupDocs.Comparison realizuje to jednym wywołaniem API, eliminując potrzebę ręcznej logiki diff.

Dlaczego używać GroupDocs.Comparison w projektach Java?

GroupDocs.Comparison zapewnia dokładne wykrywanie zmian w ponad 50 obsługiwanych formatach, przetwarza PDF‑y do 200 stron w mniej niż 5 sekund na standardowej JVM z 8 GB pamięci i zawiera wbudowane generowanie podglądów. Jego artefakty gotowe do Maven ułatwiają integrację, a biblioteka skaluje się poziomo przy stosowaniu zalecanych wzorców zarządzania pamięcią.

Wymagania wstępne: Co potrzebujesz, aby rozpocząć

Zanim zanurzysz się w kod, sprawdź, czy Twoje środowisko spełnia następujące wymagania:

  • Java Development Kit: JDK 8 lub nowszy; zalecany jest JDK 11 lub wyższy dla lepszej wydajności garbage‑collection.
  • Narzędzie budowania: Maven lub Gradle do rozwiązywania zależności.
  • IDE: IntelliJ IDEA, Eclipse lub VS Code – działa każde nowoczesne IDE Java.
  • Podstawowa znajomość Javy: Powinieneś być pewny w pracy z klasami, metodami i operacjami I/O na plikach.
  • Dostęp do sieci: Aby pobrać artefakt Maven GroupDocs oraz, w razie użycia przechowywania w chmurze, dostęp do punktu końcowego Twojego magazynu.

Dodawanie GroupDocs.Comparison do projektu

Dodaj następującą zależność do swojego pom.xml (zastąp X.Y.Z najnowszą wersją dostępną na stronie GroupDocs):

<dependency>
    <groupId>com.groupdocs</groupId>
    <artifactId>groupdocs-comparison</artifactId>
    <version>X.Y.Z</version>
</dependency>

Wskazówka: Sprawdź notatki wydawnicze GroupDocs pod kątem poprawek specyficznych dla wersji i nowego wsparcia formatów przed aktualizacją.

Licencjonowanie (nie pomijaj tego!)

Licencja próbna pozwala ocenić API, ale wdrożenia produkcyjne wymagają stałej licencji, aby usunąć znaki wodne i odblokować pełną funkcjonalność.

  1. Bezpłatna wersja próbna: Pobierz z GroupDocs
  2. Licencja tymczasowa: Uzyskaj tymczasową licencję do rozszerzonego testowania
  3. Pełna licencja: Kup w GroupDocs Store

Wstępna konfiguracja: przygotowanie GroupDocs.Comparison

Podstawowa inicjalizacja

Klasa Comparer jest punktem wejścia dla wszystkich operacji porównywania. Koordynuje ładowanie dokumentów, obliczanie różnic i generowanie wyników.

<repositories>
   <repository>
      <id>repository.groupdocs.com</id>
      <name>GroupDocs Repository</name>
      <url>https://releases.groupdocs.com/comparison/java/</url>
   </repository>
</repositories>
<dependencies>
   <dependency>
      <groupId>com.groupdocs</groupId>
      <artifactId>groupdocs-comparison</artifactId>
      <version>25.2</version>
   </dependency>
</dependencies>

Co robi fragment kodu: Tworzy instancję Comparer, stosuje licencję (jeśli ją posiadasz) i przygotowuje silnik do kolejnych wywołań porównania.

Przewodnik krok po kroku

Część 1: konfiguracja porównywania dokumentów

Krok 1: zainicjalizuj comparer

Obiekt Comparer jest podstawowym komponentem wykonującym algorytm diff. Przechowuje konfigurację, taką jak opcje porównywania i informacje o licencji.

import com.groupdocs.comparison.Comparer;
import com.groupdocs.comparison.examples.SampleFiles;

// Initialize the comparer with a source document
Comparer comparer = new Comparer(SampleFiles.SOURCE_WORD);

Dlaczego to ważne: Dostarczony dokument źródłowy staje się bazą; każda zmiana jest mierzona względem niego.

Krok 2: dodaj dokumenty docelowe

Możesz porównać źródło z jednym lub wieloma plikami docelowymi. W scenariuszu zarządzania umowami źródło to oryginalna umowa, a docelowy to zrewidowana wersja od zespołu prawnego.

// Initialize comparer with the source document
Comparer comparer = new Comparer(SampleFiles.SOURCE_WORD);

Część 2: generowanie podglądów stron

Krok 1: skonfiguruj tworzenie strumienia wyjściowego

Wzorzec delegata podglądu daje pełną kontrolę nad miejscem przechowywania obrazów podglądu — lokalny dysk, zasobnik w chmurze lub baza danych.

// Add a target document for comparison
comparer.add(SampleFiles.TARGET1_WORD);

Krok 2: skonfiguruj opcje podglądu

Generuj podglądy tylko dla stron, które naprawdę potrzebujesz; zmniejsza to zużycie CPU nawet o 60 % przy dużych PDF‑ach.

import com.groupdocs.comparison.common.delegates.Delegates;
import java.io.FileOutputStream;
import java.io.OutputStream;

Delegates.CreatePageStream createPageStream = new Delegates.CreatePageStream() {
    @Override
    public OutputStream invoke(int pageNumber) {
        String pagePath = "YOUR_OUTPUT_DIRECTORY" + "/result-GetPagePreviewsForTargetDocument_" + pageNumber + ".png";
        try {
            return new FileOutputStream(pagePath);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
};

Krok 3: generuj podglądy

API renderuje każdą żądaną stronę jako PNG (bezstratny) lub JPEG (mniejszy rozmiar). PNG jest zalecany dla dokumentów prawnych, gdzie istotna jest perfekcyjna wierność pikseli.

import com.groupdocs.comparison.options.PreviewOptions;
import com.groupdocs.comparison.options.enums.PreviewFormats;

// Set preview options
PreviewOptions previewOptions = new PreviewOptions.Builder(createPageStream)
    .setPreviewFormat(PreviewFormats.PNG) // High-quality images
    .setPageNumbers(new int[]{1, 2}) // Only generate what you need
    .build();

Obsługiwane formaty plików

GroupDocs.Comparison obsługuje ponad 50 formatów wejściowych i wyjściowych, w tym:

  • Microsoft Office: DOCX, DOC, XLSX, XLS, PPTX, PPT
  • PDF: Wszystkie wersje PDF‑1.x, zaszyfrowane PDF‑y oraz PDF‑y z wbudowanymi czcionkami
  • Tekst i znacznikowanie: TXT, RTF, HTML, MHTML
  • Obrazy: JPEG, PNG, BMP, GIF
  • OpenDocument: ODT, ODS, ODP

Te szerokie możliwości pozwalają porównać umowę zapisaną jako plik Word ze skanowanym PDF‑em, wszystko w jednym wywołaniu API.

Typowe problemy i rozwiązania

Problem 1: FileNotFoundException podczas generowania podglądu

Jeśli katalog wyjściowy nie istnieje lub aplikacja nie ma uprawnień do zapisu, delegat podglądu zgłasza ten wyjątek.

// Generate page previews
comparer.getTargets().get(0).generatePreview(previewOptions);

Rozwiązanie: Zweryfikuj ścieżkę, programowo utwórz brakujące foldery i przyznaj procesowi Java odpowiednie uprawnienia systemu plików.

Problem 2: Problemy z pamięcią przy dużych dokumentach

Przetwarzanie PDF‑a o 300 stronach może przekroczyć domyślny stos 512 MB, co skutkuje OutOfMemoryError.

Delegates.CreatePageStream createPageStream = new Delegates.CreatePageStream() {
    @Override
    public OutputStream invoke(int pageNumber) {
        String outputDir = "previews";
        File directory = new File(outputDir);
        if (!directory.exists()) {
            directory.mkdirs(); // Create directory if it doesn't exist
        }
        
        String pagePath = outputDir + "/preview_page_" + pageNumber + ".png";
        try {
            return new FileOutputStream(pagePath);
        } catch (FileNotFoundException e) {
            System.err.println("Failed to create output file: " + pagePath);
            throw new RuntimeException("Cannot create preview file", e);
        }
    }
};

Rozwiązanie: Zwiększ stos JVM (-Xmx2g lub wyżej) i przetwarzaj dokument w mniejszych zakresach stron, używając paginacji w PreviewOptions.

Problem 3: Problemy z licencjonowaniem

Gdy plik licencji jest brakujący lub niepoprawny, API dodaje znak wodny do każdego wyniku i wyłącza niektóre zaawansowane opcje.

// Process fewer pages at a time
PreviewOptions previewOptions = new PreviewOptions.Builder(createPageStream)
    .setPreviewFormat(PreviewFormats.PNG)
    .setPageNumbers(new int[]{1, 2, 3}) // Limit page range
    .build();

// Always dispose of the comparer when done
try (Comparer comparer = new Comparer(sourceDocument)) {
    comparer.add(targetDocument);
    comparer.getTargets().get(0).generatePreview(previewOptions);
} // Automatic cleanup

Rozwiązanie: Umieść plik licencji w znanej lokalizacji i załaduj go przy pomocy License.setLicense("path/to/license.lic") przed jakimkolwiek wywołaniem porównania.

Wskazówki dotyczące wydajności i najlepsze praktyki (java comparison best practices)

  1. Ogranicz generowanie podglądów – żądaj tylko potrzebnych stron; użyj pageNumbers, aby pominąć nieistotne sekcje.
  2. Wybierz odpowiedni format obrazu – PNG dla bezstratnych dokumentów prawnych, JPEG dla miniatur, gdzie liczy się rozmiar.
  3. Wdrożenie buforowania – przechowuj wyniki porównania (np. hash źródła + celu), aby uniknąć ponownego przetwarzania niezmienionych plików.
  4. Zarządzaj pamięcią – otaczaj użycie Comparer blokiem try‑with‑resources i wywołuj close() po zakończeniu.
  5. Uwalniaj obiekty comparer – zawsze zwalniaj zasoby natywne, aby utrzymać niski ślad pamięci JVM.

Wzorzec kodu gotowego do produkcji

Poniżej znajduje się zalecany cykl życia zadania porównania w mikroserwisie.

// Apply license at the start of your application
License license = new License();
license.setLicense("path/to/your/license.lic");

Przykłady implementacji w rzeczywistych projektach

Przykład 1: system zarządzania umowami

Dział prawny przesyła oryginalną umowę (źródło) i zrewidowaną wersję (cel). Usługa zwraca podświetlony PDF oraz zestaw podglądów PNG stron do szybkiej inspekcji wizualnej.

public class DocumentComparisonService {
    private static final String OUTPUT_DIR = "document-previews/";
    
    public ComparisonResult compareDocuments(String sourcePath, String targetPath) {
        try (Comparer comparer = new Comparer(sourcePath)) {
            comparer.add(targetPath);
            
            // Perform comparison
            String resultPath = OUTPUT_DIR + "comparison-result.docx";
            comparer.compare(resultPath);
            
            // Generate previews if needed
            generatePreviews(comparer, 3); // First 3 pages only
            
            return new ComparisonResult(resultPath, true);
        } catch (Exception e) {
            log.error("Document comparison failed", e);
            return new ComparisonResult(null, false);
        }
    }
    
    private void generatePreviews(Comparer comparer, int maxPages) {
        // Implementation details...
    }
}

Przykład 2: recenzja pracy akademickiej

Badacze przesyłają zrewidowane rękopisy. System porównuje nowy PDF z poprzednią wersją, oznacza zmienione cytaty i generuje obrazy podglądu dla panelu recenzenta.

public class ContractVersionManager {
    public void reviewContractChanges(String originalContract, String revisedContract) {
        try (Comparer comparer = new Comparer(originalContract)) {
            comparer.add(revisedContract);
            
            // Generate comparison document
            String comparisonResult = "contracts/comparison-" + System.currentTimeMillis() + ".docx";
            comparer.compare(comparisonResult);
            
            // Create preview for stakeholder review
            generatePreviewsForReview(comparer);
        }
    }
}

Jak java compare pdf files z ochroną hasłem

LoadOptions to klasa umożliwiająca określenie parametrów ładowania, takich jak hasła do zaszyfrowanych dokumentów. Aby porównać chroniony PDF, utwórz instancję LoadOptions z hasłem, przekaż ją do Comparer podczas ładowania dokumentu i następnie wykonaj porównanie jak zwykle. Biblioteka odszyfrowuje plik w pamięci, zapewniając, że żaden tekst jawny nie jest zapisywany na dysku, a wszystkie kolejne operacje — w tym generowanie podglądów i obliczanie różnic — działają transparentnie.

public class AcademicDocumentReview {
    public void compareResearchDrafts(String draft1, String draft2) {
        try (Comparer comparer = new Comparer(draft1)) {
            comparer.add(draft2);
            
            // Focus on specific sections (first 10 pages typically contain main content)
            PreviewOptions options = new PreviewOptions.Builder(createPageStream)
                .setPageNumbers(IntStream.rangeClosed(1, 10).toArray())
                .setPreviewFormat(PreviewFormats.PNG)
                .build();
                
            comparer.getTargets().get(0).generatePreview(options);
        }
    }
}

Porównywanie dokumentów przechowywanych w chmurze

Jeśli Twoje źródło i cel znajdują się w Amazon S3, Azure Blob lub Google Cloud Storage, po prostu podaj InputStream uzyskany z SDK chmury zamiast lokalnej ścieżki pliku.

LoadOptions loadOptions = new LoadOptions();
loadOptions.setPassword("your-password");
Comparer comparer = new Comparer("protected-document.docx", loadOptions);

Najczęściej zadawane pytania

P: Jak obsługiwać dokumenty chronione hasłem?
O: Użyj LoadOptions, aby podać hasło przy tworzeniu instancji Comparer, jak pokazano powyżej.

P: Czy mogę porównywać dokumenty przechowywane w chmurze?
O: Tak — po prostu dostarcz strumienie wejściowe od swojego dostawcy chmury do Comparer.

P: Jaki jest maksymalny rozmiar pliku, który GroupDocs.Comparison może obsłużyć?
O: Nie ma sztywnego limitu, ale dla plików większych niż 100 MB powinieneś zwiększyć rozmiar stosu JVM lub przetwarzać dokument w mniejszych fragmentach, aby uniknąć OutOfMemoryError.

P: Jak dokładny jest algorytm porównywania?
O: Biblioteka używa zaawansowanych algorytmów diff, które wykrywają zmiany w tekście, formatowaniu, obrazach, tabelach i obiektach wbudowanych, dostarczając wyniki wizualnego diff prawie bezbłędne pod względem pikseli.

P: Czy mogę dostosować, które typy zmian są wykrywane?
O: Oczywiście. Ustaw CompareOptions, aby włączyć lub wyłączyć wykrywanie tekstu, formatowania, obrazów, tabel i innych.

P: Czy API obsługuje generowanie podglądów tylko dla wybranych stron?
O: Tak — skonfiguruj PreviewOptions z określoną tablicą pageNumbers, aby ograniczyć wyjście do potrzebnych stron.

Podsumowanie

Masz teraz kompletny, gotowy do produkcji przewodnik po java compare pdf files z GroupDocs.Comparison. Postępując zgodnie z krokami konfiguracji, stosując zalecenia wydajnościowe i wykorzystując fragmenty obsługi haseł oraz integracji z chmurą, możesz wbudować solidne możliwości porównywania dokumentów w każdej aplikacji Java — niezależnie od tego, czy jest to portal do przeglądania umów, przepływ pracy przy pracach akademickich, czy system archiwizacji dokumentów na dużą skalę.


Last Updated: 2026-11-01
Tested With: GroupDocs.Comparison 25.2
Author: GroupDocs

InputStream sourceStream = getDocumentFromCloud("source-doc-id");
InputStream targetStream = getDocumentFromCloud("target-doc-id");
Comparer comparer = new Comparer(sourceStream);
comparer.add(targetStream);

Powiązane samouczki