Introductie
PDF is de facto‑standaard voor contracten, specificaties, rapporten en regelgevende indieningen — en met meerdere versies in omloop wordt het snel omslachtig om precies te achterhalen wat er tussen twee bestanden is veranderd. Het naast‑elkaar scrollen door documenten en handmatig annoteren van verschillen schaalt niet, en zelfs speciaal gebouwde tools zoals Adobe Acrobat’s Compare‑functie vereisen handmatige tussenkomst voor elk bestandspaar.
GroupDocs.Comparison for .NET laat je PDF‑vergelijking volledig vanuit code uitvoeren en kiezen hoe het resultaat wordt gepresenteerd. Versie 26.4 introduceerde een speciale PdfCompareOptions‑klasse met drie weergavemodi:
- Inline (standaard) — een enkele samengevoegde PDF waarbij verwijderingen en toevoegingen in verschillende kleuren op dezelfde pagina’s worden gemarkeerd. Dit is het klassieke gedrag en is het gemakkelijkste resultaat om te delen als een zelfstandig bestand.
- Side‑by‑Side — elke resultaatpagina toont de bron‑ en doelpagina naast elkaar, zonder inhouds‑overlap. Ideaal wanneer documenten sterk verschillen en het mengen van inhoud op één pagina verwarrend zou zijn.
- Interleaved — het resultaat bevat afwisselende pagina’s: oneven pagina’s komen van de bron (verwijderingen gemarkeerd), even pagina’s van het doel (toevoegingen gemarkeerd). Wijzigingen worden weergegeven als native PDF‑annotaties — een ingebouwd PDF‑objecttype dat metadata draagt zoals het type wijziging en de auteurnaam. De meeste PDF‑viewers (Adobe Acrobat Reader, Foxit, enz.) laten gebruikers het annotatie‑paneel openen en individuele annotaties accepteren of verwijderen, waardoor een lichtgewicht review‑workflow ontstaat zonder extra software. Het openen van dit bestand in een “Two Page View” PDF‑lezer levert een natuurlijke links/rechts‑vergelijking op.
In dit artikel lopen we alle drie de modi door met werkende C#‑voorbeelden, verkennen we PdfCompareOptions en de eigenschappen ervan, en behandelen we kort hoe dezelfde taak handmatig in Adobe Acrobat kan worden uitgevoerd.
PDF’s vergelijken in Adobe Acrobat
Voordat we de programmeer‑aanpak induiken, is het de moeite waard te weten wat Adobe Acrobat Pro standaard biedt. Acrobat’s ingebouwde Compare Files‑tool (beschikbaar onder Tools → Compare Files) produceert een side‑by‑side‑rapport dat tekstwijzigingen, afbeeldingsverschillen en opmaakverschillen markeert.
Zo voer je een vergelijking uit in Acrobat Pro:
- Open Acrobat Pro en kies Tools → Compare Files.
- Selecteer het Older File (bron) en het Newer File (doel).
- Klik op Compare. Acrobat genereert een interactief vergelijkingsrapport met een samenvattingspagina en inline‑wijzigingsmarkeringen.
Dit werkt goed voor incidentele handmatige reviews. Echter, de compare‑tool van Acrobat heeft aanzienlijke beperkingen wanneer vergelijking deel moet uitmaken van een geautomatiseerde pijplijn.
Wanneer vergelijking moet plaatsvinden op een server, binnen een CI/CD‑pipeline, of als onderdeel van een aangepaste review‑workflow, is een code‑first bibliotheek het juiste gereedschap.
Voorvereisten
Voordat je begint:
- .NET 6.0 of later.
- GroupDocs.Comparison for .NET 26.4 of later — installeer via NuGet:
dotnet add package GroupDocs.Comparison
- Een license‑bestand (
GroupDocs.Comparison.lic). Zonder licentie draait de bibliotheek in evaluatiemodus met watermerken en paginalimieten. Je kunt een temporary license aanvragen voor testdoeleinden. - Twee PDF‑bestanden om te vergelijken — we noemen ze
source.pdfentarget.pdf. Voorbeeldinhoud:
source.pdf |
target.pdf |
|---|
Modus 1: Inline‑vergelijking (Standaard)
Wanneer te gebruiken: je wilt één zelf‑containend PDF‑bestand dat iedereen kan openen en direct ziet wat er is veranderd — zonder een speciale viewer of een tweepagina‑lay‑out nodig te hebben. Een typisch scenario is het delen van een roodlijn‑contractconcept met een tegenpartij.
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);
}
Opmerking:
Inlineis de standaardwaarde vanDisplayMode, dus hetoptions‑blok hierboven is optioneel. Een eenvoudigecomparer.Compare("result_inline.pdf")‑aanroep levert dezelfde output op.
Resultaatdocument in Inline‑modus:
Wat er onder de motorkap gebeurt:
- Verwijderde inhoud uit het bron‑document wordt gemarkeerd in één kleur (standaard rood).
- Toegevoegde inhoud uit het doel‑document wordt gemarkeerd in een andere kleur (standaard groen).
- Beide sets wijzigingen bestaan naast elkaar op dezelfde pagina’s, waardoor het resultaat compact is maar druk kan lijken wanneer documenten sterk verschillen. Bij aanzienlijke tekstbewerkingen kunnen verwijderde en toegevoegde inhoud fysiek overlappen op de pagina — bijvoorbeeld, een vervangen alinea wordt bovenop de originele geplaatst, wat een onleesbare warboel oplevert. In zulke gevallen is
SideBySideofInterleavedeen betere keuze.
Modus 2: Side‑by‑Side‑vergelijking
Wanneer te gebruiken: de twee documenten verschillen sterk en het plaatsen van verwijderingen en toevoegingen op dezelfde pagina zou het resultaat moeilijk leesbaar maken. Side‑by‑Side houdt bron‑ en doelinhoud strikt gescheiden, waardoor je elke pagina in één oogopslag kunt scannen.
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);
}
Resultaatdocument in Side‑by‑Side‑modus:
Wat er onder de motorkap gebeurt:
- Elke resultaatpagina is in feite een breed canvas verdeeld in twee helften.
- De linkerdeel toont de overeenkomstige bronpagina met gemarkeerde verwijderingen.
- De rechterdeel toont de doelpagina met gemarkeerde toevoegingen.
- Inhoud van de twee documenten overlapt nooit, zodat zelfs zwaar bewerkte pagina’s leesbaar blijven.
Modus 3: Interleaved‑vergelijking
Wanneer te gebruiken: je wilt wijzigingen pagina voor pagina beoordelen in een standaard PDF‑lezer met de Two Page View (of “Facing Pages”) modus. Elke bronpagina staat links, de bijbehorende doelpagina rechts — de fysieke paginalay‑out spiegelt wat Side‑by‑Side op één canvas weergeeft, maar elke pagina behoudt zijn volledige grootte.
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);
}
Resultaatdocument in Interleaved‑modus (getoond in Two Page View):
Wat er onder de motorkap gebeurt:
- Het resultaatdocument bevat
2 × Npagina’s voor eenN‑pagina bron/target‑paar. - Oneven genummerde pagina’s (1, 3, 5 …) zijn bronpagina’s met gemarkeerde verwijderingen.
- Even genummerde pagina’s (2, 4, 6 …) zijn doelpagina’s met gemarkeerde toevoegingen.
AnnotationAuthorNameplaatst de auteursnaam op PDF‑annotaties die tijdens de vergelijking worden geproduceerd — handig wanneer het resultaat in een review‑workflow terechtkomt waarbij commentaren van meerdere auteurs onderscheidbaar moeten zijn.
Tip: open het resultaat in Adobe Acrobat Reader of een andere viewer die View → Page Display → Two Page View ondersteunt om automatisch de beoogde links/rechts‑lay‑out te krijgen.
Beperken van vergelijking tot een paginabereik
Alle drie de modi ondersteunen paginabereik‑filtering via de eigenschap PagesSetup. Dit is handig wanneer alleen een specifiek hoofdstuk of sectie van een groot document is gewijzigd en je de rest wilt overslaan.
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);
}
Wanneer PagesSetup null is (of niet ingesteld), worden alle pagina’s vergeleken — hetzelfde gedrag als in eerdere versies.
Verkennen van PdfCompareOptions
PdfCompareOptions is een PDF‑specifieke subklasse van CompareOptions, volgens hetzelfde patroon als WordCompareOptions geïntroduceerd in versie 26.2. Het groepeert alle PDF‑enkelvoudige instellingen op één plek zodat je per ongeluk geen Word‑ of spreadsheet‑specifieke opties op een PDF‑taak toepast.
| Eigenschap | Type | Beschrijving |
|---|---|---|
DisplayMode |
ComparisonDisplayMode |
Bepaalt de resultaatslay‑out: Inline (standaard), SideBySide of Interleaved. |
PagesSetup |
PagesSetup |
Paginabereik om te vergelijken. Wanneer null, worden alle pagina’s verwerkt. |
CompareImagesPdf |
bool |
Of ingesloten afbeeldingen in de vergelijking worden meegenomen. |
AnnotationAuthorName |
string |
Auteursnaam die op PDF‑annotaties wordt gestempeld (gebruikt in Interleaved‑modus). |
ImagesInheritanceMode |
enum | Regelt welk document afbeeldingen levert wanneer afbeeldingsvergelijking is uitgeschakeld. |
Een volledig geconfigureerd voorbeeld:
var options = new PdfCompareOptions
{
DisplayMode = PdfCompareOptions.ComparisonDisplayMode.Interleaved,
CompareImagesPdf = true,
AnnotationAuthorName = "Review Bot",
PagesSetup = new PagesSetup { StartPage = 1, EndPage = 5 }
};
De geërfde basis‑eigenschappen van CompareOptions — InsertedItemStyle, DeletedItemStyle, ChangedItemStyle — zijn ook beschikbaar, zodat je de standaard markeerkleuren kunt overschrijven wanneer dat nodig is.
Wijzigingen programmatically ophalen
Ongeacht de weergavemodus kun je een gestructureerde lijst van alle gedetecteerde verschillen ophalen via Comparer.GetChanges(). Dit is nuttig voor het bouwen van aangepaste rapporten, het voeden van resultaten in een review‑systeem, of het verzamelen van statistieken over de omvang van de bewerkingen.
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}");
}
Zie de officiële API‑referentie voor details: Comparer.GetChanges.
Werken met wachtwoord‑beveiligde PDF’s
Wachtwoord‑beveiligde PDF’s worden volledig ondersteund. Geef het wachtwoord door via LoadOptions bij het aanmaken van de 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);
}
Een gratis proefversie krijgen
Je kunt GroupDocs.Comparison for .NET downloaden van de official releases page. Voor onbeperkt testen, vraag een temporary license aan — geen creditcard vereist.
Veelgestelde vragen
Q: Heb ik Adobe Acrobat of andere PDF‑software op de server geïnstalleerd nodig?
A: Nee. GroupDocs.Comparison is een zelfstandige .NET‑bibliotheek die PDF‑bestanden leest en schrijft zonder externe afhankelijkheden.
Q: Welke weergavemodus moet ik standaard gebruiken?
A: Begin met Inline — het levert het meest compacte resultaat en is het gemakkelijkst te delen. Schakel over naar SideBySide wanneer zware bewerkingen de inline‑weergave onleesbaar maken, of gebruik Interleaved wanneer reviewers het resultaat in een “Two Page View” PDF‑lezer openen.
Q: Kan ik documenten vergelijken in andere formaten dan PDF?
A: Ja — de bibliotheek ondersteunt Word‑documenten, Excel‑spreadsheets, PowerPoint‑presentaties, platte‑tekst‑bestanden en nog veel meer. De volledige lijst staat in de documentation.
Q: Wat gebeurt er als ik geen licentie instel?
A: De bibliotheek draait in evaluatiemodus. Uitvoerdocumenten bevatten een watermerk en alleen de eerste paar pagina’s worden verwerkt. Een temporary license verwijdert deze beperkingen voor testdoeleinden.
Q: Kan ik alleen afbeeldingen in een PDF vergelijken en tekstwijzigingen negeren?
A: Gebruik CompareImagesPdf = true op PdfCompareOptions om afbeeldingsvergelijking op te nemen. Om uitsluitend op afbeeldingen te focussen kun je dit combineren met de eigenschap ImagesInheritanceMode; zie de API‑referentie voor details.
Conclusie
GroupDocs.Comparison for .NET 26.4 geeft je precieze, code‑gedreven controle over hoe PDF‑vergelijkingsresultaten worden gepresenteerd. Inline‑modus dekt het meest voorkomende gebruiksscenario — een enkel, deelbaar roodlijn‑PDF. SideBySide houdt sterk gewijzigde inhoud schoon en leesbaar. Interleaved past zich natuurlijk aan elke PDF‑viewer’s Two Page View aan voor een volledige pagina‑voor‑pagina‑walkthrough. Daarnaast laat paginabereik‑filtering je precies de secties targeten die ertoe doen, en consolideert PdfCompareOptions alle PDF‑specifieke instellingen in één overzichtelijke klasse.
Kies de modus die bij jouw workflow past, of genereer alle drie en laat elk publiek hun voorkeursweergave kiezen.