Úvod
PDF je de‑facto standardem pro smlouvy, specifikace, zprávy a regulatorní podání — a s několika verzemi v oběhu se rychle stává únavné zjistit, co se přesně změnilo mezi dvěma soubory. Posouvání dokumentů vedle sebe a ruční anotování rozdílů se nedá škálovat a dokonce i nástroje vytvořené speciálně pro tento účel, jako je funkce Compare v Adobe Acrobat, vyžadují ruční zásah u každého páru souborů.
GroupDocs.Comparison for .NET vám umožní spustit porovnání PDF zcela z kódu a zvolit si přesně, jak bude výsledek prezentován. Verze 26.4 představila dedikovanou třídu PdfCompareOptions se třemi režimy zobrazení výstupu:
- Inline (výchozí) — jeden sloučený PDF, kde jsou odstranění a vložení zvýrazněny různými barvami na stejných stránkách. Jedná se o klasické chování a je to nejjednodušší výsledek ke sdílení jako samostatný soubor.
- Side‑by‑Side — každá výstupní stránka zobrazuje zdrojovou a cílovou stránku vedle sebe, bez překrývání obsahu. Ideální, když se dokumenty výrazně liší a míchání obsahu na jedné stránce by bylo matoucí.
- Interleaved — výsledek obsahuje střídavé stránky: liché stránky pocházejí ze zdroje (odstranění zvýrazněna), sudé stránky z cíle (vložené zvýrazněny). Změny jsou reprezentovány jako nativní PDF anotace — vestavěný typ PDF objektu, který nese metadata jako typ změny a jméno autora. Většina PDF prohlížečů (Adobe Acrobat Reader, Foxit atd.) umožňuje uživatelům otevřít panel anotací a přijmout nebo smazat jednotlivé anotace, což představuje lehký revizní workflow bez jakéhokoli dalšího softwaru. Otevření tohoto souboru v PDF čtečce s „Two Page View“ poskytuje přirozené porovnání vlevo/vpravo.
V tomto článku projdeme všechny tři režimy s funkčními příklady v C#, prozkoumáme PdfCompareOptions a jeho vlastnosti a stručně se podíváme, jak lze stejný úkol provést ručně v Adobe Acrobat.
Porovnávání PDF v Adobe Acrobat
Než se pustíme do programového přístupu, stojí za to vědět, co Adobe Acrobat Pro nabízí „out of the box“. Vestavěný nástroj Compare Files (k dispozici pod Tools → Compare Files) vytváří vedle‑sebe report, který zvýrazňuje změny textu, rozdíly obrázků a posuny formátování.
Jak spustit porovnání v Acrobat Pro:
- Otevřete Acrobat Pro a zvolte Tools → Compare Files.
- Vyberte Older File (zdroj) a Newer File (cíl).
- Klikněte na Compare. Acrobat vygeneruje interaktivní report s úvodní stránkou a inline značkami změn.
To funguje dobře pro občasné ruční revize. Nicméně nástroj pro porovnání v Acrobat má významná omezení, pokud má být porovnání součástí automatizovaného pipeline.
Když musí porovnání probíhat na serveru, v CI/CD pipeline nebo jako součást vlastního revizního workflow, je správným nástrojem knihovna zaměřená na kód.
Požadavky
Než začnete:
- .NET 6.0 nebo novější.
- GroupDocs.Comparison for .NET 26.4 nebo novější — instalace přes NuGet:
dotnet add package GroupDocs.Comparison
- Licenční soubor (
GroupDocs.Comparison.lic). Bez něj knihovna běží v evaluačním režimu s vodoznaky a omezením počtu stránek. Můžete požádat o temporary license pro testování. - Dva PDF soubory k porovnání — budeme je nazývat
source.pdfatarget.pdf. Příklad obsahu:
source.pdf |
target.pdf |
|---|
Režim 1: Inline porovnání (výchozí)
Kdy použít: chcete jeden samostatný PDF soubor, který si kdokoli může otevřít a okamžitě vidět, co se změnilo — bez potřeby speciálního prohlížeče nebo dvoustránkového rozvržení. Typický scénář je sdílení redigovaného návrhu smlouvy s protistranou.
using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;
using (var comparer = new Comparer("source.pdf"))
{
comparer.Add("target.pdf");
var options = new PdfCompareOptions
{
DisplayMode = PdfCompareOptions.ComparisonDisplayMode.Inline
};
comparer.Compare("result_inline.pdf", options);
}
Poznámka:
Inlineje výchozí hodnotaDisplayMode, takže blokoptionsvýše je volitelný. Pouze volánícomparer.Compare("result_inline.pdf")vytvoří stejný výstup.
Výsledný dokument v Inline režimu:
Co se děje pod kapotou:
- Odstraněný obsah ze zdrojového dokumentu je zvýrazněn jednou barvou (standardně červená).
- Vložený obsah z cílového dokumentu je zvýrazněn jinou barvou (standardně zelená).
- Obě sady změn koexistují na stejných stránkách, takže výsledek je kompaktní, ale může vypadat rušivě, když se dokumenty výrazně liší. Při rozsáhlých úpravách textu se může smazaný a vložený obsah fyzicky překrývat — například nahrazený odstavec se vykreslí nad původním, což vede k nečitelnému zmatku. V takových případech je lepší volba
SideBySideneboInterleaved.
Režim 2: Side‑by‑Side porovnání
Kdy použít: dokumenty se výrazně liší a umístění odstranění a vložení na stejnou stránku by výsledek ztížilo čitelnost. Side‑by‑Side udržuje obsah zdroje a cíle striktně oddělený, což usnadňuje rychlý přehled každé stránky.
using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;
using (var comparer = new Comparer("source.pdf"))
{
comparer.Add("target.pdf");
var options = new PdfCompareOptions
{
DisplayMode = PdfCompareOptions.ComparisonDisplayMode.SideBySide
};
comparer.Compare("result_side_by_side.pdf", options);
}
Výsledný dokument v Side‑by‑Side režimu:
Co se děje pod kapotou:
- Každá výstupní stránka je ve skutečnosti široké plátno rozdělené na dvě poloviny.
- Levá polovina zobrazuje odpovídající zdrojovou stránku s zvýrazněnými odstraněními.
- Pravá polovina zobrazuje cílovou stránku se zvýrazněnými vloženími.
- Obsah ze dvou dokumentů se nikdy nepřekrývá, takže i silně editované stránky zůstávají čitelné.
Režim 3: Interleaved porovnání
Kdy použít: chcete revizi změn stránku po stránce v běžném PDF čtečce pomocí Two Page View (nebo „Facing Pages“) režimu. Každá zdrojová stránka je vlevo, odpovídající cílová stránka vpravo — fyzické rozložení stránek odráží to, co Side‑by‑Side vykresluje na jednom plátně, ale každá stránka je zachována v plné velikosti.
using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;
using (var comparer = new Comparer("source.pdf"))
{
comparer.Add("target.pdf");
var options = new PdfCompareOptions
{
DisplayMode = PdfCompareOptions.ComparisonDisplayMode.Interleaved,
AnnotationAuthorName = "GroupDocs"
};
comparer.Compare("result_interleaved.pdf", options);
}
Výsledný dokument v Interleaved režimu (zobrazený v Two Page View):
Co se děje pod kapotou:
- Výsledný dokument obsahuje
2 × Nstránek proN‑stránkový pár zdroj/cíl. - Liché stránky (1, 3, 5 …) jsou zdrojové stránky s zvýrazněnými odstraněními.
- Sudé stránky (2, 4, 6 …) jsou cílové stránky s zvýrazněnými vloženími.
AnnotationAuthorNamevloží jméno autora do PDF anotací vytvořených během porovnání — užitečné, když výsledek vstupuje do revizního workflow, kde je potřeba rozlišovat komentáře od různých autorů.
Tip: otevřete výsledek v Adobe Acrobat Reader nebo jakémkoli prohlížeči, který podporuje View → Page Display → Two Page View, abyste automaticky získali zamýšlené levé/pravé rozložení.
Omezení porovnání na rozsah stránek
Všechny tři režimy podporují filtrování pomocí vlastnosti PagesSetup. To je užitečné, když se změnil jen konkrétní kapitola nebo sekce velkého dokumentu a chcete ostatní přeskočit.
using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;
using (var comparer = new Comparer("source.pdf"))
{
comparer.Add("target.pdf");
var options = new PdfCompareOptions
{
DisplayMode = PdfCompareOptions.ComparisonDisplayMode.SideBySide,
PagesSetup = new PagesSetup
{
StartPage = 3,
EndPage = 10
}
};
comparer.Compare("result_pages_3_to_10.pdf", options);
}
Když je PagesSetup null (nebo není nastaven), porovnají se všechny stránky — stejné chování jako v předchozích verzích.
Prozkoumání PdfCompareOptions
PdfCompareOptions je PDF‑specifická podtřída CompareOptions, následující stejný vzor jako WordCompareOptions zavedený ve verzi 26.2. Shromažďuje všechna nastavení jen pro PDF na jednom místě, aby nedošlo k nechtěnému použití Word‑ nebo tabulkových možností u PDF úlohy.
| Property | Type | Description |
|---|---|---|
DisplayMode |
ComparisonDisplayMode |
Řídí rozložení výsledku: Inline (výchozí), SideBySide nebo Interleaved. |
PagesSetup |
PagesSetup |
Rozsah stránek k porovnání. Když je null, zpracují se všechny stránky. |
CompareImagesPdf |
bool |
Zda zahrnout vložené obrázky do porovnání. |
AnnotationAuthorName |
string |
Jméno autora vložené do PDF anotací (používá se v Interleaved režimu). |
ImagesInheritanceMode |
enum | Řídí, který dokument poskytuje obrázky, když je porovnání obrázků vypnuto. |
Plně nakonfigurovaný příklad:
var options = new PdfCompareOptions
{
DisplayMode = PdfCompareOptions.ComparisonDisplayMode.Interleaved,
CompareImagesPdf = true,
AnnotationAuthorName = "Review Bot",
PagesSetup = new PagesSetup { StartPage = 1, EndPage = 5 }
};
Zděděné základní vlastnosti CompareOptions — InsertedItemStyle, DeletedItemStyle, ChangedItemStyle — jsou také k dispozici a umožňují přepsat výchozí barvy zvýraznění podle potřeby.
Získání změn programově
Bez ohledu na režim zobrazení můžete získat strukturovaný seznam všech detekovaných rozdílů pomocí Comparer.GetChanges(). To je užitečné pro tvorbu vlastních reportů, napojení výsledků do revizního systému nebo sběr statistik o rozsahu úprav.
using (var comparer = new Comparer("source.pdf"))
{
comparer.Add("target.pdf");
comparer.Compare("result.pdf");
var changes = comparer.GetChanges(); // returns ChangeInfo[]
Console.WriteLine($"Total changes detected: {changes.Length}");
}
Podívejte se na oficiální API reference pro podrobnosti: Comparer.GetChanges.
Práce s PDF chráněnými heslem
PDF chráněná heslem jsou plně podporována. Heslo předáte pomocí LoadOptions při vytváření Comparer:
using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;
using (var comparer = new Comparer("source_protected.pdf",
new LoadOptions { Password = "secret" }))
{
comparer.Add("target_protected.pdf", new LoadOptions { Password = "secret" });
var options = new PdfCompareOptions
{
DisplayMode = PdfCompareOptions.ComparisonDisplayMode.SideBySide
};
comparer.Compare("result_protected.pdf", options);
}
Získat bezplatnou zkušební verzi
GroupDocs.Comparison for .NET si můžete stáhnout ze official releases page. Pro neomezené testování požádejte o temporary license — žádná kreditní karta není vyžadována.
Často kladené otázky
Q: Potřebuji mít na serveru nainstalovaný Adobe Acrobat nebo jiný PDF software?
A: Ne. GroupDocs.Comparison je samostatná .NET knihovna, která čte a zapisuje PDF soubory bez jakýchkoli třetích závislostí.
Q: Který režim zobrazení bych měl použít jako výchozí?
A: Začněte s Inline — produkuje nejkompaktnější výsledek a je nejjednodušší ke sdílení. Přepněte na SideBySide, když těžké úpravy ztíží čitelnost inline pohledu, nebo použijte Interleaved, když recenzenti otevřou výsledek v PDF čtečce s „Two Page View“.
Q: Můžu porovnávat dokumenty i v jiných formátech než PDF?
A: Ano — knihovna podporuje Word dokumenty, Excel tabulky, PowerPoint prezentace, prosté textové soubory a mnoho dalších. Kompletní seznam najdete v documentation.
Q: Co se stane, když nenastavím licenci?
A: Knihovna běží v evaluačním režimu. Výstupní dokumenty budou obsahovat vodoznak a bude zpracováno jen několik úvodních stránek. Temporary license tyto omezení pro testování odstraní.
Q: Můžu porovnávat jen obrázky uvnitř PDF a ignorovat textové změny?
A: Použijte CompareImagesPdf = true na PdfCompareOptions, aby se zahrnulo porovnání obrázků. Pro zaměření výhradně na obrázky můžete tuto volbu kombinovat s vlastností ImagesInheritanceMode; podrobnosti najdete v API referenci.
Závěr
GroupDocs.Comparison for .NET 26.4 vám poskytuje přesnou, kódem řízenou kontrolu nad tím, jak jsou výsledky PDF porovnání prezentovány. Inline režim pokrývá nejčastější případ — jeden sdílitelný redigovaný PDF. SideBySide udržuje silně změněný obsah čistý a čitelný. Interleaved se přirozeně hodí k jakémukoli PDF čteči s Two Page View pro detailní prohlížení po stránkách. Navíc filtrování podle rozsahu stránek vám umožní zaměřit se přesně na relevantní sekce a PdfCompareOptions konsoliduje všechna PDF‑specifická nastavení v jedné přehledné třídě.
Vyberte režim, který nejlépe vyhovuje vašemu workflow, nebo vygenerujte všechny tři a nechte každé publikum zvolit si preferovaný pohled.