Introduzione
PDF è lo standard de‑facto per contratti, specifiche, report e documenti normativi — e con più versioni in circolazione, individuare rapidamente cosa è cambiato tra due file diventa tedioso. Scorrere i documenti fianco a fianco e annotare manualmente le differenze non è scalabile, e anche strumenti dedicati come la funzione Confronta di Adobe Acrobat richiedono un intervento manuale per ogni coppia di file.
GroupDocs.Comparison for .NET consente di eseguire il confronto PDF interamente dal codice e di scegliere esattamente come presentare il risultato. La versione 26.4 ha introdotto una classe dedicata PdfCompareOptions con tre modalità di visualizzazione dell’output:
- Inline (predefinita) — un unico PDF unito in cui le cancellazioni e le inserzioni sono evidenziate in colori diversi sulle stesse pagine. Questo è il comportamento classico ed è il risultato più semplice da condividere come file autonomo.
- Side‑by‑Side — ogni pagina del risultato mostra le pagine di origine e di destinazione affiancate, senza sovrapposizione di contenuti. Ideale quando i documenti differiscono notevolmente e mescolare i contenuti su una sola pagina sarebbe confuso.
- Interleaved — il risultato contiene pagine alternate: le pagine dispari provengono dal documento di origine (cancellazioni evidenziate), le pagine pari dal documento di destinazione (inserzioni evidenziate). Le modifiche sono rappresentate come annotazioni PDF native — un tipo di oggetto PDF incorporato che trasporta metadati come il tipo di modifica e il nome dell’autore. La maggior parte dei visualizzatori PDF (Adobe Acrobat Reader, Foxit, ecc.) consente di aprire il pannello delle annotazioni e di accettare o eliminare singole annotazioni, creando un flusso di revisione leggero senza software aggiuntivo. Aprire questo file in un lettore PDF con “Visualizzazione a due pagine” produce un confronto naturale sinistra/destra.
In questo articolo vedremo tutti e tre i modi con esempi C# funzionanti, esploreremo PdfCompareOptions e le sue proprietà, e tratteremo brevemente come eseguire la stessa operazione manualmente in Adobe Acrobat.
Confrontare PDF in Adobe Acrobat
Prima di immergersi nell’approccio programmatico, è utile conoscere ciò che Adobe Acrobat Pro offre di default. Lo strumento integrato Confronta file di Acrobat (disponibile in Strumenti → Confronta file) produce un report affiancato che evidenzia le modifiche di testo, le differenze di immagine e le variazioni di formattazione.
Per eseguire un confronto in Acrobat Pro:
- Apri Acrobat Pro e scegli Strumenti → Confronta file.
- Seleziona il File più vecchio (origine) e il File più nuovo (destinazione).
- Fai clic su Confronta. Acrobat genera un report interattivo con una pagina di riepilogo e marcatori di modifica in linea.
Questo funziona bene per revisioni manuali occasionali. Tuttavia, lo strumento di confronto di Acrobat presenta limitazioni significative quando il confronto deve far parte di una pipeline automatizzata.
Quando il confronto deve avvenire su un server, all’interno di una pipeline CI/CD, o come parte di un flusso di revisione personalizzato, una libreria code‑first è lo strumento giusto.
Prerequisiti
Prima di iniziare:
- .NET 6.0 o versioni successive.
- GroupDocs.Comparison for .NET 26.4 o versioni successive — installa tramite NuGet:
dotnet add package GroupDocs.Comparison
- Un file di licenza (
GroupDocs.Comparison.lic). Senza di esso la libreria funziona in modalità valutazione con filigrane e limiti sul numero di pagine. Puoi richiedere una licenza temporanea per i test. - Due file PDF da confrontare — li chiameremo
source.pdfetarget.pdf. Esempio di contenuto:
source.pdf |
target.pdf |
|---|
Modalità 1: Confronto Inline (predefinito)
Quando usarla: desideri un unico file PDF autonomo che chiunque possa aprire e vedere immediatamente le modifiche — senza bisogno di un visualizzatore speciale o di una disposizione a due pagine. Uno scenario tipico è la condivisione di una bozza di contratto con le modifiche evidenziate a un controparte.
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);
}
Nota:
Inlineè il valore predefinito diDisplayMode, quindi il bloccooptionssopra è facoltativo. Una semplice chiamatacomparer.Compare("result_inline.pdf")produce lo stesso output.
Documento risultante in modalità Inline:
Cosa succede dietro le quinte:
- Il contenuto cancellato dal documento di origine è evidenziato in un colore (rosso per impostazione predefinita).
- Il contenuto inserito dal documento di destinazione è evidenziato in un altro colore (verde per impostazione predefinita).
- Entrambi i set di modifiche coesistono sulle stesse pagine, quindi il risultato è compatto ma può apparire affollato quando i documenti differiscono molto. Con modifiche testuali consistenti, il contenuto cancellato e quello inserito può sovrapporsi fisicamente sulla pagina — ad esempio, un paragrafo sostituito viene renderizzato sopra quello originale, creando un miscuglio illeggibile. In tali casi la modalità
SideBySideoInterleavedè una scelta migliore.
Modalità 2: Confronto Side‑by‑Side
Quando usarla: i due documenti differiscono notevolmente e posizionare cancellazioni e inserzioni sulla stessa pagina renderebbe il risultato difficile da leggere. Side‑by‑Side mantiene il contenuto di origine e di destinazione strettamente separato, facilitando la scansione di ogni pagina a colpo d’occhio.
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);
}
Documento risultante in modalità Side‑by‑Side:
Cosa succede dietro le quinte:
- Ogni pagina del risultato è effettivamente una tela larga divisa in due metà.
- La metà sinistra mostra la pagina di origine corrispondente con le cancellazioni evidenziate.
- La metà destra mostra la pagina di destinazione con le inserzioni evidenziate.
- I contenuti dei due documenti non si sovrappongono mai, quindi anche le pagine pesantemente modificate rimangono leggibili.
Modalità 3: Confronto Interleaved
Quando usarla: desideri revisionare le modifiche pagina per pagina in un lettore PDF standard usando la sua Visualizzazione a due pagine (o “Pagine affiancate”). Ogni pagina di origine si trova a sinistra, la corrispondente pagina di destinazione a destra — il layout fisico rispecchia ciò che Side‑by‑Side rende su una singola tela, ma ogni pagina è mantenuta a dimensione intera.
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);
}
Documento risultante in modalità Interleaved (visualizzato in Visualizzazione a due pagine):
Cosa succede dietro le quinte:
- Il documento risultato contiene
2 × Npagine per una coppia di documentiN‑pagina. - Le pagine dispari (1, 3, 5 …) sono le pagine di origine con le cancellazioni evidenziate.
- Le pagine pari (2, 4, 6 …) sono le pagine di destinazione con le inserzioni evidenziate.
AnnotationAuthorNameaggiunge il nome dell’autore alle annotazioni PDF generate durante il confronto — utile quando il risultato alimenta un flusso di revisione in cui i commenti di più autori devono essere distinguibili.
Suggerimento: apri il risultato in Adobe Acrobat Reader o in qualsiasi visualizzatore che supporti Visualizza → Layout pagina → Visualizzazione a due pagine per ottenere automaticamente il layout sinistra/destra previsto.
Limitare il confronto a un intervallo di pagine
Tutte e tre le modalità supportano il filtraggio per intervallo di pagine tramite la proprietà PagesSetup. Questo è utile quando solo un capitolo o una sezione specifica di un documento voluminoso è cambiata e si desidera saltare il resto.
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);
}
Quando PagesSetup è null (o non impostato), vengono confrontate tutte le pagine — lo stesso comportamento delle versioni precedenti.
Esplorare PdfCompareOptions
PdfCompareOptions è una sottoclasse specifica per PDF di CompareOptions, seguendo lo stesso schema di WordCompareOptions introdotto nella versione 26.2. Raggruppa tutte le impostazioni esclusivamente PDF in un unico posto così da non applicare accidentalmente opzioni specifiche di Word o di foglio di calcolo a un lavoro PDF.
| Proprietà | Tipo | Descrizione |
|---|---|---|
DisplayMode |
ComparisonDisplayMode |
Controlla il layout del risultato: Inline (predefinito), SideBySide o Interleaved. |
PagesSetup |
PagesSetup |
Intervallo di pagine da confrontare. Quando null, vengono elaborate tutte le pagine. |
CompareImagesPdf |
bool |
Indica se includere le immagini incorporate nel confronto. |
AnnotationAuthorName |
string |
Nome dell’autore inserito nelle annotazioni PDF (usato nella modalità Interleaved). |
ImagesInheritanceMode |
enum | Controlla quale documento fornisce le immagini quando il confronto delle immagini è disabilitato. |
Esempio di configurazione completa:
var options = new PdfCompareOptions
{
DisplayMode = PdfCompareOptions.ComparisonDisplayMode.Interleaved,
CompareImagesPdf = true,
AnnotationAuthorName = "Review Bot",
PagesSetup = new PagesSetup { StartPage = 1, EndPage = 5 }
};
Le proprietà ereditate da CompareOptions — InsertedItemStyle, DeletedItemStyle, ChangedItemStyle — sono anch’esse disponibili, consentendo di sovrascrivere i colori di evidenziazione predefiniti quando necessario.
Ottenere le modifiche programmaticamente
Indipendentemente dalla modalità di visualizzazione, è possibile recuperare un elenco strutturato di tutte le differenze rilevate tramite Comparer.GetChanges(). Questo è utile per creare report personalizzati, alimentare sistemi di revisione o raccogliere statistiche sull’entità delle modifiche.
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}");
}
Consulta il riferimento API ufficiale per i dettagli: Comparer.GetChanges.
Lavorare con PDF protetti da password
I PDF protetti da password sono pienamente supportati. Passa la password tramite LoadOptions quando crei il 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);
}
Ottieni una prova gratuita
Puoi scaricare GroupDocs.Comparison for .NET dalla pagina ufficiale dei rilasci. Per test senza limitazioni, richiedi una licenza temporanea — non è necessaria alcuna carta di credito.
Domande frequenti
D: È necessario avere Adobe Acrobat o altro software PDF installato sul server?
R: No. GroupDocs.Comparison è una libreria .NET autonoma che legge e scrive file PDF senza dipendenze di terze parti.
D: Quale modalità di visualizzazione dovrei usare di default?
R: Inizia con Inline — produce il risultato più compatto e più facile da condividere. Passa a SideBySide quando le modifiche pesanti rendono difficile la lettura in modalità inline, oppure usa Interleaved quando i revisori apriranno il risultato in un lettore PDF con “Visualizzazione a due pagine”.
D: Posso confrontare documenti in formati diversi da PDF?
R: Sì — la libreria supporta documenti Word, fogli Excel, presentazioni PowerPoint, file di testo semplice e molti altri. L’elenco completo è nella documentazione.
D: Cosa succede se non imposto una licenza?
R: La libreria funziona in modalità valutazione. I documenti di output conterranno una filigrana e verranno elaborate solo le prime pagine. Una licenza temporanea rimuove queste restrizioni per i test.
D: Posso confrontare solo le immagini all’interno di un PDF ignorando le modifiche di testo?
R: Usa CompareImagesPdf = true su PdfCompareOptions per includere il confronto delle immagini. Per concentrarti esclusivamente sulle immagini puoi combinare questa impostazione con la proprietà ImagesInheritanceMode; consulta il riferimento API per i dettagli.
Conclusione
GroupDocs.Comparison for .NET 26.4 ti offre un controllo preciso, basato sul codice, su come presentare i risultati del confronto PDF. La modalità Inline copre il caso d’uso più comune — un unico PDF con le modifiche evidenziate. SideBySide mantiene i contenuti pesantemente modificati chiari e leggibili. Interleaved si abbina naturalmente a qualsiasi visualizzatore PDF con “Visualizzazione a due pagine” per una revisione pagina per pagina a dimensione intera. Inoltre, il filtraggio per intervallo di pagine ti permette di mirare esattamente alle sezioni rilevanti, e PdfCompareOptions raggruppa tutte le impostazioni specifiche per PDF in una classe facilmente scopriabile.
Scegli la modalità che meglio si adatta al tuo flusso di lavoro, o genera tutte e tre le versioni e lascia che ogni pubblico selezioni la visualizzazione preferita.