Java porovnání PDF souborů – hlavní GroupDocs.Comparison API
V tomto průvodci se naučíte, jak efektivně java compare pdf files pomocí GroupDocs.Comparison pro Java. Ať už vytváříte portál pro kontrolu smluv, systém pro správu verzí nebo nástroj pro kontrolu akademických prací, schopnost detekovat i ty nejmenší změny v PDF dokumentech je nezbytná. Provedeme vás nastavením, jádrovou logikou porovnání, generováním náhledů, zpracováním hesel, integrací do cloudu a výkonnostně optimalizovanými osvědčenými postupy — abyste mohli během několika minut nasadit spolehlivé řešení.
Rychlé odpovědi
- Co dělá GroupDocs Comparison Java? Porovnává dva nebo více dokumentů, zvýrazňuje každou změnu a může generovat vizuální náhledy pro rychlou kontrolu.
- Které formáty souborů jsou podporovány? Word, PDF, Excel, PowerPoint, obrázky, HTML a mnoho dalších.
- Potřebuji licenci pro produkci? Ano – platná licence GroupDocs odstraňuje vodoznaky a odemyká kompletní sadu funkcí.
- Mohu zpracovávat velké dokumenty? Ano – při správném řízení paměti a stránkování náhledů můžete zpracovat PDF s několika stovkami stránek.
- Kde najdu nejnovější Maven závislost? V repozitáři GroupDocs – před přidáním zkontrolujte nejnovější verzi.
Co je java compare pdf files?
java compare pdf files označuje programový proces načtení dvou verzí PDF, detekci textových, formátovacích a grafických rozdílů a volitelně vytvoření výsledného dokumentu, který vizuálně označuje tyto změny. GroupDocs.Comparison to implementuje jedním API voláním, čímž eliminuje potřebu ručního diff logiky.
Proč používat GroupDocs.Comparison v Java projektech?
GroupDocs.Comparison poskytuje přesnou detekci změn napříč více než 50 podporovanými formáty, zpracovává PDF až do 200 stran za méně než 5 sekund na standardní JVM s 8 GB RAM a obsahuje vestavěné generování náhledů. Jeho artefakty připravené pro Maven usnadňují integraci a knihovna horizontálně škáluje, pokud dodržujete doporučené vzory řízení paměti.
Předpoklady: Co potřebujete k zahájení
Before diving into code, verify that your environment meets these requirements:
- Java Development Kit: JDK 8 nebo novější; JDK 11 nebo vyšší se doporučuje pro lepší výkon garbage‑collection.
- Nástroj pro sestavení: Maven nebo Gradle pro řešení závislostí.
- IDE: IntelliJ IDEA, Eclipse nebo VS Code – funguje jakékoli moderní Java IDE.
- Základní znalost Javy: Měli byste být obeznámeni s třídami, metodami a souborovým I/O.
- Přístup k síti: Pro stažení Maven artefaktu GroupDocs a v případě použití cloudového úložiště přístup k vašemu úložnému koncovému bodu.
Přidání GroupDocs.Comparison do vašeho projektu
Add the following dependency to your pom.xml (replace X.Y.Z with the newest version you find on the GroupDocs site):
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-comparison</artifactId>
<version>X.Y.Z</version>
</dependency>
Tip: Zkontrolujte poznámky k vydání GroupDocs pro opravy chyb a podporu nových formátů specifických pro verzi před aktualizací.
Licencování (nevynechávejte!)
A trial license lets you evaluate the API, but production deployments require a permanent license to remove watermarks and enable full functionality.
- Bezplatná zkušební verze: Stáhnout z GroupDocs
- Dočasná licence: Získat dočasnou licenci pro rozšířené testování
- Plná licence: Zakoupit v GroupDocs Store
Počáteční nastavení: připravení GroupDocs.Comparison
Základní inicializace
The Comparer class is the entry point for all comparison operations. It orchestrates document loading, diff calculation, and result generation.
<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 tento úryvek dělá: Vytvoří instanci Comparer, použije licenci (pokud ji máte) a připraví engine pro následná volání porovnání.
Průvodce krok za krokem
Část 1: nastavení porovnání dokumentů
Krok 1: inicializujte svůj comparer
Objekt Comparer je hlavní komponenta, která provádí diff algoritmus. Uchovává konfiguraci, jako jsou možnosti porovnání a informace o licenci.
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);
Proč je to důležité: Poskytnutý zdrojový dokument se stane referenčním bodem; každá změna je měřena vůči němu.
Krok 2: přidejte cílové dokumenty
Můžete porovnat zdroj s jedním nebo více cílovými soubory. V scénáři správy smluv je zdroj originální smlouva a cíl je revidovaná verze od právního týmu.
// Initialize comparer with the source document
Comparer comparer = new Comparer(SampleFiles.SOURCE_WORD);
Část 2: generování náhledů stránek
Krok 1: nastavení vytváření výstupního proudu
Vzor delegáta náhledu vám dává plnou kontrolu nad tím, kde jsou náhledové obrázky ukládány — lokální disk, cloudový bucket nebo databáze.
// Add a target document for comparison
comparer.add(SampleFiles.TARGET1_WORD);
Krok 2: konfigurace možností náhledu
Generujte náhledy pouze pro stránky, které skutečně potřebujete; tím se sníží využití CPU až o 60 % u velkých PDF.
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: generování náhledů
API vykreslí každou požadovanou stránku jako PNG (bezztrátové) nebo JPEG (menší velikost). PNG se doporučuje pro právní dokumenty, kde je důležitá pixel‑dokonalá věrnost.
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();
Podporované formáty souborů
GroupDocs.Comparison pracuje s více než 50 vstupními a výstupními formáty, včetně:
- Microsoft Office: DOCX, DOC, XLSX, XLS, PPTX, PPT
- PDF: Všechny verze PDF‑1.x, šifrované PDF a PDF s vloženými fonty
- Text a značkování: TXT, RTF, HTML, MHTML
- Obrázky: JPEG, PNG, BMP, GIF
- OpenDocument: ODT, ODS, ODP
Tyto široké možnosti vám umožní porovnat smlouvu uloženou jako Word soubor se skenovanou PDF verzí, vše v rámci jednoho API volání.
Časté problémy a řešení
Problém 1: FileNotFoundException během generování náhledu
Pokud výstupní adresář neexistuje nebo aplikace nemá oprávnění k zápisu, delegát náhledu vyvolá tuto výjimku.
// Generate page previews
comparer.getTargets().get(0).generatePreview(previewOptions);
Řešení: Ověřte cestu, programově vytvořte chybějící složky a udělte Java procesu příslušná oprávnění k souborovému systému.
Problém 2: Problémy s pamětí u velkých dokumentů
Zpracování PDF s 300 stránkami může překročit výchozí haldu 512 MB, což vede k 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);
}
}
};
Řešení: Zvyšte haldu JVM (-Xmx2g nebo vyšší) a zpracovávejte dokument v menších rozsazích stránek pomocí funkce stránkování PreviewOptions.
Problém 3: Problémy s licencí
Když chybí soubor licence nebo je poškozený, API přidá vodoznak ke každému výstupu a zakáže některé pokročilé možnosti.
// 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
Řešení: Umístěte soubor licence na známé místo a načtěte jej pomocí License.setLicense("path/to/license.lic") před jakýmkoli voláním porovnání.
Tipy pro výkon a osvědčené postupy (java comparison best practices)
- Omezte generování náhledů – požadujte pouze stránky, které potřebujete; použijte
pageNumbersk přeskočení nerelevantních částí. - Zvolte správný formát obrázku – PNG pro bezztrátové právní dokumenty, JPEG pro miniatury, kde záleží na velikosti.
- Implementujte cachování – uložte výsledky porovnání (např. hash zdroje + cíle), abyste se vyhnuli opakovanému zpracování nezměněných souborů.
- Řiďte paměť – obalte používání
Comparerblokem try‑with‑resources a po dokončení zavolejteclose(). - Uvolňujte objekty comparer – vždy uvolněte nativní zdroje, aby byl paměťový otisk JVM co nejmenší.
Kódový vzor připravený pro produkci
Níže je doporučený životní cyklus úkolu porovnání v mikroservisu.
// Apply license at the start of your application
License license = new License();
license.setLicense("path/to/your/license.lic");
Příklady reálných implementací
Příklad 1: systém správy smluv
Právní oddělení nahrává originální smlouvu (zdroj) a revidovanou verzi (cíl). Služba vrací zvýrazněný PDF a sadu PNG náhledů stránek pro rychlou vizuální kontrolu.
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...
}
}
Příklad 2: recenze akademické práce
Výzkumníci odesílají revidované rukopisy. Systém porovná nový PDF s předchozí verzí, označí změněné citace a vygeneruje náhledové obrázky pro dashboard 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 s ochranou heslem
LoadOptions je třída, která vám umožní specifikovat parametry načítání, jako jsou hesla pro šifrované dokumenty. Pro porovnání chráněného PDF vytvořte instanci LoadOptions s heslem, předávejte ji Comparer při načítání dokumentu a poté spusťte porovnání jako obvykle. Knihovna soubor v paměti dešifruje, což zajišťuje, že žádný čistý text není zapisován na disk, a všechny následné operace — včetně generování náhledů a výpočtu rozdílů — fungují transparentně.
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);
}
}
}
Porovnávání dokumentů uložených v cloudu
Pokud vaše zdrojové a cílové soubory sídlí v Amazon S3, Azure Blob nebo Google Cloud Storage, jednoduše poskytněte InputStream získaný z cloudového SDK místo lokální cesty k souboru.
LoadOptions loadOptions = new LoadOptions();
loadOptions.setPassword("your-password");
Comparer comparer = new Comparer("protected-document.docx", loadOptions);
Často kladené otázky
Q: Jak mám zacházet s dokumenty chráněnými heslem?
A: Použijte LoadOptions k zadání hesla při vytváření instance Comparer, jak je ukázáno výše.
Q: Mohu porovnávat dokumenty uložené v cloudovém úložišti?
A: Ano — jednoduše poskytněte vstupní proudy od vašeho poskytovatele cloudu do Comparer.
Q: Jaká je maximální velikost souboru, kterou GroupDocs.Comparison zvládne?
A: Neexistuje pevný limit, ale pro soubory větší než 100 MB byste měli zvýšit velikost haldy JVM nebo zpracovávat dokument v menších částech, aby se předešlo OutOfMemoryError.
Q: Jak přesný je algoritmus porovnání?
A: Knihovna používá pokročilé diff algoritmy, které detekují změny v textu, formátování, obrázcích, tabulkách a vložených objektech, a poskytuje téměř pixel‑dokonalé vizuální výsledky rozdílů.
Q: Můžu přizpůsobit, které typy změn jsou detekovány?
A: Rozhodně. Nastavte CompareOptions pro povolení nebo zakázání detekce textu, formátování, obrázků, tabulek a dalších.
Q: Podporuje API generování náhledů pouze pro vybrané stránky?
A: Ano — nakonfigurujte PreviewOptions s konkrétním polem pageNumbers, abyste omezili výstup na požadované stránky.
Závěr
Nyní máte kompletní, připravený průvodce pro java compare pdf files s GroupDocs.Comparison. Dodržením kroků nastavení, aplikací výkonových doporučení a využitím úryvků pro zpracování hesel a integraci do cloudu můžete vložit robustní funkce porovnání dokumentů do jakékoli Java aplikace — ať už jde o portál pro kontrolu smluv, workflow akademických prací nebo systém pro archivaci dokumentů ve velkém měřítku.
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);