Introdução

PDF é o padrão de fato para contratos, especificações, relatórios e arquivamentos regulatórios — e com várias versões em circulação, rastrear exatamente o que mudou entre dois arquivos rapidamente se torna tedioso. Rolar documentos lado a lado e anotar diferenças manualmente não escala, e até mesmo ferramentas específicas como o recurso Comparar do Adobe Acrobat exigem intervenção manual para cada par de arquivos.

GroupDocs.Comparison for .NET permite executar a comparação de PDFs totalmente a partir de código e escolher exatamente como o resultado é apresentado. A versão 26.4 introduziu a classe dedicada PdfCompareOptions com três modos de exibição de saída:

  1. Inline (padrão) — um único PDF mesclado onde exclusões e inserções são destacadas em cores diferentes nas mesmas páginas. Este é o comportamento clássico e é o resultado mais fácil de compartilhar como um arquivo independente.
  2. Side‑by‑Side — cada página de resultado mostra as páginas de origem e destino colocadas lado a lado, sem sobreposição de conteúdo. Ideal quando os documentos diferem bastante e misturar conteúdo em uma página seria confuso.
  3. Interleaved — o resultado contém páginas alternadas: páginas ímpares vêm da origem (exclusões destacadas), páginas pares do destino (inserções destacadas). As mudanças são representadas como anotações nativas de PDF — um tipo de objeto PDF incorporado que carrega metadados como o tipo de mudança e o nome do autor. A maioria dos visualizadores de PDF (Adobe Acrobat Reader, Foxit, etc.) permite que os usuários abram o painel de anotações e aceitem ou excluam anotações individuais, proporcionando um fluxo de revisão leve sem software extra. Abrir este arquivo em um leitor PDF com “Visualização de Duas Páginas” produz uma comparação natural esquerda/direita.

Neste artigo percorreremos os três modos com exemplos funcionais em C#, exploraremos PdfCompareOptions e suas propriedades, e abordaremos brevemente como a mesma tarefa pode ser feita manualmente no Adobe Acrobat.


Comparando PDFs no Adobe Acrobat

Antes de mergulhar na abordagem programática, vale a pena conhecer o que o Adobe Acrobat Pro oferece pronto para uso. A ferramenta interna Compare Files do Acrobat (disponível em Ferramentas → Compare Files) produz um relatório lado a lado que destaca alterações de texto, diferenças de imagem e mudanças de formatação.

Para executar uma comparação no Acrobat Pro:

  1. Abra o Acrobat Pro e escolha Ferramentas → Compare Files.
  2. Selecione o Older File (origem) e o Newer File (destino).
  3. Clique em Compare. O Acrobat gera um relatório de comparação interativo com uma página de resumo e marcadores de mudança embutidos.

Isso funciona bem para revisões manuais ocasionais. No entanto, a ferramenta de comparação do Acrobat tem limitações significativas quando a comparação precisa fazer parte de um pipeline automatizado.

Quando a comparação deve acontecer em um servidor, dentro de um pipeline CI/CD, ou como parte de um fluxo de revisão personalizado, uma biblioteca code‑first é a ferramenta certa.


Pré‑requisitos

Antes de começar:

  • .NET 6.0 ou posterior.
  • GroupDocs.Comparison for .NET 26.4 ou posterior — instale via NuGet:
dotnet add package GroupDocs.Comparison
  • Um arquivo de licença (GroupDocs.Comparison.lic). Sem ele a biblioteca roda em modo de avaliação com marcas d’água e limites de contagem de páginas. Você pode solicitar uma licença temporária para testes.
  • Dois arquivos PDF para comparar — os chamaremos de source.pdf e target.pdf. Exemplo de conteúdo:
source.pdf target.pdf

Modo 1: Comparação Inline (Padrão)

Quando usar: você quer um único arquivo PDF autocontido que qualquer pessoa possa abrir e ver imediatamente o que mudou — sem precisar de um visualizador especial ou de um layout de duas páginas. Um cenário típico é compartilhar um rascunho de contrato com marcações de alterações com a outra parte.

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 é o valor padrão de DisplayMode, portanto o bloco options acima é opcional. Uma chamada simples comparer.Compare("result_inline.pdf") produz o mesmo resultado.

Documento resultante no modo Inline:

PDF comparison result in Inline mode

O que acontece nos bastidores:

  • O conteúdo excluído do documento de origem é destacado em uma cor (vermelho por padrão).
  • O conteúdo inserido do documento de destino é destacado em outra cor (verde por padrão).
  • Ambos os conjuntos de mudanças coexistem nas mesmas páginas, então o resultado é compacto, mas pode parecer carregado quando os documentos diferem bastante. Com edições substanciais de texto, o conteúdo excluído e inserido pode se sobrepor fisicamente na página — por exemplo, um parágrafo substituído aparece sobre o original, produzindo uma confusão ilegível. Nesses casos, o modo SideBySide ou Interleaved é uma escolha melhor.

Modo 2: Comparação Side‑by‑Side

Quando usar: os dois documentos diferem bastante e colocar exclusões e inserções na mesma página tornaria o resultado difícil de ler. Side‑by‑Side mantém o conteúdo de origem e destino estritamente separados, facilitando a visualização de cada página de relance.

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 resultante no modo Side‑by‑Side:

PDF comparison result in Side-by-Side mode

O que acontece nos bastidores:

  • Cada página de resultado é efetivamente uma tela larga dividida em duas metades.
  • A metade esquerda mostra a página de origem correspondente com exclusões destacadas.
  • A metade direita mostra a página de destino com inserções destacadas.
  • O conteúdo dos dois documentos nunca se sobrepõe, portanto mesmo páginas fortemente editadas permanecem legíveis.

Modo 3: Comparação Interleaved

Quando usar: você quer revisar mudanças página por página em um leitor PDF padrão usando seu modo Two Page View (ou “Facing Pages”). Cada página de origem fica à esquerda, sua página de destino correspondente à direita — o layout físico das páginas espelha o que o modo Side‑by‑Side renderiza em uma única tela, mas cada página é mantida em tamanho completo.

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 resultante no modo Interleaved (mostrado em Two Page View):

PDF comparison result in Interleaved mode viewed in Two Page View

O que acontece nos bastidores:

  • O documento resultante contém 2 × N páginas para um par de origem/destino de N páginas.
  • Páginas ímpares (1, 3, 5 …) são páginas de origem com exclusões destacadas.
  • Páginas pares (2, 4, 6 …) são páginas de destino com inserções destacadas.
  • AnnotationAuthorName grava o nome do autor nas anotações PDF produzidas durante a comparação — útil quando o resultado alimenta um fluxo de revisão onde os comentários de múltiplos autores precisam ser distinguíveis.

Dica: abra o resultado no Adobe Acrobat Reader ou em qualquer visualizador que suporte View → Page Display → Two Page View para obter automaticamente o layout esquerdo/direito pretendido.


Limitando a Comparação a um Intervalo de Páginas

Todos os três modos suportam filtragem por intervalo de páginas via a propriedade PagesSetup. Isso é útil quando apenas um capítulo ou seção específica de um documento grande foi alterada e você deseja pular o restante.

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 (ou não definido), todas as páginas são comparadas — o mesmo comportamento das versões anteriores.


Explorando PdfCompareOptions

PdfCompareOptions é uma subclasse específica para PDF de CompareOptions, seguindo o mesmo padrão de WordCompareOptions introduzido na versão 26.2. Ela agrupa todas as configurações exclusivas de PDF em um único local para que você não aplique acidentalmente opções específicas de Word ou planilha a um trabalho de PDF.

Propriedade Tipo Descrição
DisplayMode ComparisonDisplayMode Controla o layout do resultado: Inline (padrão), SideBySide ou Interleaved.
PagesSetup PagesSetup Intervalo de páginas a comparar. Quando null, todas as páginas são processadas.
CompareImagesPdf bool Indica se imagens incorporadas devem ser incluídas na comparação.
AnnotationAuthorName string Nome do autor gravado nas anotações PDF (usado no modo Interleaved).
ImagesInheritanceMode enum Controla qual documento fornece as imagens quando a comparação de imagens está desativada.

Um exemplo totalmente configurado:

var options = new PdfCompareOptions
{
    DisplayMode = PdfCompareOptions.ComparisonDisplayMode.Interleaved,
    CompareImagesPdf = true,
    AnnotationAuthorName = "Review Bot",
    PagesSetup = new PagesSetup { StartPage = 1, EndPage = 5 }
};

As propriedades herdadas da classe base CompareOptionsInsertedItemStyle, DeletedItemStyle, ChangedItemStyle — também estão disponíveis, permitindo sobrescrever as cores de destaque padrão quando necessário.


Obtendo Mudanças Programaticamente

Independentemente do modo de exibição, você pode recuperar uma lista estruturada de todas as diferenças detectadas via Comparer.GetChanges(). Isso é útil para gerar relatórios personalizados, alimentar resultados em um sistema de revisão ou coletar estatísticas sobre o escopo das edições.

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}");
}

Veja a referência oficial da API para detalhes: Comparer.GetChanges.


Trabalhando com PDFs Protegidos por Senha

PDFs protegidos por senha são totalmente suportados. Passe a senha via LoadOptions ao criar o 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);
}

Obtenha um Teste Gratuito

Você pode baixar GroupDocs.Comparison for .NET na página oficial de releases. Para testes sem restrições, solicite uma licença temporária — sem necessidade de cartão de crédito.


Perguntas Frequentes

P: Preciso do Adobe Acrobat ou de outro software PDF instalado no servidor?
R: Não. GroupDocs.Comparison é uma biblioteca .NET autônoma que lê e grava arquivos PDF sem dependências de terceiros.

P: Qual modo de exibição devo usar por padrão?
R: Comece com Inline — ele produz o resultado mais compacto e é o mais fácil de compartilhar. Troque para SideBySide quando edições intensas tornarem a visualização inline difícil de ler, ou use Interleaved quando os revisores abrirão o resultado em um leitor PDF com “Two Page View”.

P: Posso comparar documentos em formatos diferentes de PDF?
R: Sim — a biblioteca suporta documentos Word, planilhas Excel, apresentações PowerPoint, arquivos de texto simples e muitos outros. A lista completa está na documentação.

P: O que acontece se eu não definir uma licença?
R: A biblioteca roda em modo de avaliação. Os documentos de saída conterão uma marca d’água e apenas as primeiras páginas serão processadas. Uma licença temporária remove essas restrições para testes.

P: Posso comparar apenas imagens dentro de um PDF e ignorar mudanças de texto?
R: Use CompareImagesPdf = true em PdfCompareOptions para incluir a comparação de imagens. Para focar exclusivamente em imagens, você pode combinar isso com a propriedade ImagesInheritanceMode; consulte a referência da API para detalhes.


Conclusão

GroupDocs.Comparison for .NET 26.4 oferece controle preciso e orientado a código sobre como os resultados da comparação de PDFs são apresentados. O modo Inline cobre o caso de uso mais comum — um único PDF com marcações de alterações compartilhável. SideBySide mantém conteúdo fortemente alterado limpo e legível. Interleaved combina naturalmente com o modo Two Page View de qualquer leitor PDF para uma revisão página a página em tamanho completo. Além disso, o filtro por intervalo de páginas permite focar exatamente nas seções que importam, e PdfCompareOptions consolida todas as configurações específicas de PDF em uma classe fácil de descobrir.

Escolha o modo que se encaixa no seu fluxo de trabalho, ou gere os três e deixe cada público escolher a visualização preferida.

Recursos Adicionais