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ść.
- Bezpłatna wersja próbna: Pobierz z GroupDocs
- Licencja tymczasowa: Uzyskaj tymczasową licencję do rozszerzonego testowania
- 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)
- Ogranicz generowanie podglądów – żądaj tylko potrzebnych stron; użyj
pageNumbers, aby pominąć nieistotne sekcje. - Wybierz odpowiedni format obrazu – PNG dla bezstratnych dokumentów prawnych, JPEG dla miniatur, gdzie liczy się rozmiar.
- Wdrożenie buforowania – przechowuj wyniki porównania (np. hash źródła + celu), aby uniknąć ponownego przetwarzania niezmienionych plików.
- Zarządzaj pamięcią – otaczaj użycie
Comparerblokiem try‑with‑resources i wywołujclose()po zakończeniu. - 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);