Ú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:

  1. 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.
  2. 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í.
  3. 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:

  1. Otevřete Acrobat Pro a zvolte Tools → Compare Files.
  2. Vyberte Older File (zdroj) a Newer File (cíl).
  3. 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.pdf a target.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: Inline je výchozí hodnota DisplayMode, takže blok options výše je volitelný. Pouze volání comparer.Compare("result_inline.pdf") vytvoří stejný výstup.

Výsledný dokument v Inline režimu:

PDF comparison result in Inline mode

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 SideBySide nebo Interleaved.

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:

PDF comparison result in Side-by-Side mode

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):

PDF comparison result in Interleaved mode viewed in Two Page View

Co se děje pod kapotou:

  • Výsledný dokument obsahuje 2 × N stránek pro N‑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.
  • AnnotationAuthorName vloží 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.

Další zdroje