IRONSOFTWAREHOME
USANDO O IRONPDF

Como criar uma API PDF em .NET usando o IronPDF

Curtis Chau
Curtis Chau
Updated: 28 de junho de 2026

A comparação programática de documentos PDF é essencial para rastrear alterações, validar diferentes versões e automatizar fluxos de trabalho de garantia de qualidade. Seja para comparar dois arquivos PDF para gerenciamento de documentos ou para encontrar diferenças em revisões de contratos, o IronPDF oferece uma solução simplificada para comparar arquivos PDF em C#.

Este tutorial demonstra como comparar dois documentos PDF usando os recursos de extração de texto do IronPDF, desde comparações básicas até a criação de relatórios de diferenças detalhados. Você aprenderá técnicas práticas com exemplos de código que funcionam em plataformas Windows, Linux, macOS, Docker e nuvem.

Como Comparar Dois Arquivos PDF Usando C# com a IronPDF: Imagem 1 - IronPDF

Pré-requisitos e configuração

Antes de começar, certifique-se de ter instalado:

  • Visual Studio 2019 ou posterior
  • .NET Framework 4.6.2 ou superior ou .NET Core 3.1 ou superior
  • Conhecimento básico de C#

Instalando o pacote IronPDF .NET

Instale o IronPDF através do Gerenciador de Pacotes NuGet em seu projeto .NET :

PM > Install-Package IronPdf

Como Comparar Dois Arquivos PDF Usando C# com a IronPDF: Imagem 2 - Instalação

Ou usando a CLI do .NET:

dotnet add package IronPdf

Adicione a referência de namespace necessária aos seus arquivos:

using IronPdf;
using System;

Como Comparar Dois Arquivos PDF Usando C# com a IronPDF: Imagem 3 - Recursos

Comparação básica de documentos PDF

Vamos começar com um exemplo de código para comparar arquivos PDF, extraindo e comparando seu conteúdo de texto:

public class BasicPdfComparer
{
    public static bool ComparePdfFiles(string firstPdfPath, string secondPdfPath)
    {
        // Load two PDF documents
        var pdf1 = PdfDocument.FromFile(firstPdfPath);
        var pdf2 = PdfDocument.FromFile(secondPdfPath);
        // Extract all text from both PDFs
        string text1 = pdf1.ExtractAllText();
        string text2 = pdf2.ExtractAllText();
        // Compare the two documents
        bool areIdentical = text1 == text2;
        // Find differences and calculate similarity
        double similarity = CalculateSimilarity(text1, text2);
        Console.WriteLine($"Documents are {(areIdentical ? "identical" : "different")}");
        Console.WriteLine($"Similarity: {similarity:F2}%");
        return areIdentical;
    }
    private static double CalculateSimilarity(string text1, string text2)
    {
        if (text1 == text2) return 100.0;
        if (string.IsNullOrEmpty(text1) || string.IsNullOrEmpty(text2)) return 0.0;
        int matchingChars = 0;
        int minLength = Math.Min(text1.Length, text2.Length);
        for (int i = 0; i < minLength; i++)
        {
            if (text1[i] == text2[i]) matchingChars++;
        }
        return (double)matchingChars / Math.Max(text1.Length, text2.Length) * 100;
    }
}

Este código carrega dois arquivos PDF usando o método PdfDocument.FromFile() da IronPDF, extrai todo o conteúdo de texto e realiza uma comparação direta de strings. O método de comparação fornece métricas para identificar o grau de similaridade entre os documentos.

Entrada

Como Comparar Dois Arquivos PDF Usando C# com a IronPDF: Imagem 4 - PDF de Amostra 1

Como Comparar Dois Arquivos PDF Usando C# com a IronPDF: Imagem 5 - PDF de Amostra 2

Saída

Como Comparar Dois Arquivos PDF Usando C# com a IronPDF: Imagem 6 - Saída do Console

Método de comparação página por página

Para uma análise mais detalhada, compare os dois PDFs página por página para identificar exatamente onde ocorrem as diferenças:

public static void ComparePageByPage(string firstPdfPath, string secondPdfPath)
{
    // Load two files
    var pdf1 = PdfDocument.FromFile(firstPdfPath);
    var pdf2 = PdfDocument.FromFile(secondPdfPath);
    int maxPages = Math.Max(pdf1.PageCount, pdf2.PageCount);
    int differencesFound = 0;
    for (int i = 0; i < maxPages; i++)
    {
        // Process each page
        string page1Text = i < pdf1.PageCount ? pdf1.ExtractTextFromPage(i) : "";
        string page2Text = i < pdf2.PageCount ? pdf2.ExtractTextFromPage(i) : "";
        if (page1Text != page2Text)
        {
            differencesFound++;
            Console.WriteLine($"Page {i + 1}: Differences detected");
        }
        else
        {
            Console.WriteLine($"Page {i + 1}: Identical");
        }
    }
    Console.WriteLine($"\nSummary: {differencesFound} page(s) with changes");
}

O método ExtractTextFromPage() permite extração direcionada de páginas específicas. Essa abordagem ajuda os desenvolvedores a identificar discrepâncias entre diferentes versões de documentos PDF.

Utilizando o padrão de classe Comparer

Crie uma classe de comparação dedicada para aprimorar sua funcionalidade de comparação:

public class PdfComparer
{
    private PdfDocument pdf1;
    private PdfDocument pdf2;
    private bool disposed;
    public PdfComparer(string file1Path, string file2Path)
    {
        // Load the two PDFs
        pdf1 = PdfDocument.FromFile(file1Path);
        pdf2 = PdfDocument.FromFile(file2Path);
    }
    public ComparisonResult Compare()
    {
        var result = new ComparisonResult();
        // Compare PDF documents
        string text1 = pdf1?.ExtractAllText() ?? string.Empty;
        string text2 = pdf2?.ExtractAllText() ?? string.Empty;
        result.AreIdentical = string.Equals(text1, text2, StringComparison.Ordinal);
        result.SimilarityPercent = CalculateSimilarity(text1, text2);
        result.Differences = FindDifferences(text1, text2);
        return result;
    }
    private List<string> FindDifferences(string text1, string text2)
    {
        var differences = new List<string>();
        // Normalize nulls
        text1 ??= string.Empty;
        text2 ??= string.Empty;
        if (string.Equals(text1, text2, StringComparison.Ordinal))
            return differences;
        // Page-aware comparisons aren't possible here because we only have full-text;
        // produce a concise, actionable difference entry:
        int min = Math.Min(text1.Length, text2.Length);
        int firstDiff = -1;
        for (int i = 0; i < min; i++)
        {
            if (text1[i] != text2[i])
            {
                firstDiff = i;
                break;
            }
        }
        if (firstDiff == -1 && text1.Length != text2.Length)
        {
            // No differing character in the overlap, but lengths differ
            firstDiff = min;
        }
        // Create short excerpts around the first difference for context
        int excerptLength = 200;
        string excerpt1 = string.Empty;
        string excerpt2 = string.Empty;
        if (firstDiff >= 0)
        {
            int start1 = Math.Max(0, firstDiff);
            int len1 = Math.Min(excerptLength, Math.Max(0, text1.Length - start1));
            excerpt1 = start1 < text1.Length ? text1.Substring(start1, len1) : string.Empty;
            int start2 = Math.Max(0, firstDiff);
            int len2 = Math.Min(excerptLength, Math.Max(0, text2.Length - start2));
            excerpt2 = start2 < text2.Length ? text2.Substring(start2, len2) : string.Empty;
        }
        // HTML-encode excerpts if they will be embedded into HTML reports
        string safeExcerpt1 = System.Net.WebUtility.HtmlEncode(excerpt1);
        string safeExcerpt2 = System.Net.WebUtility.HtmlEncode(excerpt2);
        double similarity = CalculateSimilarity(text1, text2);
        differences.Add($"Similarity: {similarity:F2}%. Lengths: [{text1.Length}, {text2.Length}]. First difference index: {firstDiff}. Excerpt1: \"{safeExcerpt1}\" Excerpt2: \"{safeExcerpt2}\"");
        return differences;
    }
    public void Close()
    {
        Dispose();
    }
    public void Dispose()
    {
        if (disposed) return;
        disposed = true;
        pdf1?.Dispose();
        pdf2?.Dispose();
    }
}
public class ComparisonResult
{
    // True when extracted text is exactly the same
    public bool AreIdentical { get; set; }
    // Similarity expressed as percent (0..100)
    public double SimilarityPercent { get; set; }
    // Human readable difference entries
    public List<string> Differences { get; set; } = new List<string>();
}

Essa estrutura de classes oferece uma maneira clara de comparar documentos PDF, gerenciando objetos e referências de documentos de forma adequada.

Saída

Como Comparar Dois Arquivos PDF Usando C# com a IronPDF: Imagem 7 - Saída do Padrão Classe Comparadora

Criando um relatório de comparação visual

Gere um relatório em HTML que destaque as diferenças entre dois documentos e salve-o como um arquivo PDF:

public static void CreateComparisonReport(string pdf1Path, string pdf2Path, string outputPath)
{
    // Load PDFs for comparison
    var pdf1 = PdfDocument.FromFile(pdf1Path);
    var pdf2 = PdfDocument.FromFile(pdf2Path);
    // Build HTML report with details
    string htmlReport = @"
        <html>
        <head>
            <style>
                body { font-family: Arial, sans-serif; margin: 20px; }
                .identical { color: green; }
                .different { color: red; }
                table { width: 100%; border-collapse: collapse; }
                th, td { border: 1px solid #ddd; padding: 8px; }
            </style>
        </head>
        <body>
            <h1>PDF Comparison Report</h1>
            <table>
                <tr><th>Page</th><th>Status</th></tr>";
    // Process each page
    for (int i = 0; i < Math.Max(pdf1.PageCount, pdf2.PageCount); i++)
    {
        string page1 = i < pdf1.PageCount ? pdf1.ExtractTextFromPage(i) : "";
        string page2 = i < pdf2.PageCount ? pdf2.ExtractTextFromPage(i) : "";
        bool identical = page1 == page2;
        string status = identical ? "Identical" : "Different";
        htmlReport += $"<tr><td>Page {i + 1}</td><td class='{status.ToLower()}'>{status}</td></tr>";
    }
    htmlReport += "</table></body></html>";
    // Create and save the report
    var renderer = new ChromePdfRenderer();
    var reportPdf = renderer.RenderHtmlAsPdf(htmlReport);
    reportPdf.SaveAs(outputPath);
    Console.WriteLine($"Report saved to: {outputPath}");
}

Este código demonstra como criar um documento PDF profissional com resultados de comparação. O relatório foi salvo no caminho especificado.

Comparando vários documentos PDF

Quando precisar comparar vários documentos PDF simultaneamente, use este método:

public static void CompareMultiplePdfs(params string[] pdfPaths)
{
    if (pdfPaths.Length < 2)
    {
        Console.WriteLine("Need at least two files to compare");
        return;
    }
    // Load multiple PDF documents
    var pdfs = new List<PdfDocument>();
    foreach (var path in pdfPaths)
    {
        pdfs.Add(PdfDocument.FromFile(path));
    }
    // Compare all documents
    for (int i = 0; i < pdfs.Count - 1; i++)
    {
        for (int j = i + 1; j < pdfs.Count; j++)
        {
            string text1 = pdfs[i].ExtractAllText();
            string text2 = pdfs[j].ExtractAllText();
            bool identical = text1 == text2;
            Console.WriteLine($"File {i+1} vs File {j+1}: {(identical ? "Identical" : "Different")}");
        }
    }
    // Close all documents
    pdfs.ForEach(pdf => pdf.Dispose());
}

Essa abordagem permite comparar vários documentos PDF em uma única execução, sendo útil para requisitos de processamento em lote.

Saída

Como Comparar Dois Arquivos PDF Usando C# com a IronPDF: Imagem 8 - Saída de Múltiplos PDFs

Controle de versão de contratos do mundo real

Eis um exemplo prático para o controle de revisões em documentos jurídicos:

public class ContractVersionControl
{
    public static void CompareContractVersions(string originalPath, string revisedPath)
    {
        // System for comparing contract versions
        Console.WriteLine("Contract Version Comparison System");
        var original = PdfDocument.FromFile(originalPath);
        var revised = PdfDocument.FromFile(revisedPath);
        // Extract contract contents
        string originalText = original.ExtractAllText();
        string revisedText = revised.ExtractAllText();
        if (originalText == revisedText)
        {
            Console.WriteLine("No changes detected");
        }
        else
        {
            Console.WriteLine("Changes detected in revised version");
            // Create detailed report
            string reportPath = $"contract_comparison_{DateTime.Now:yyyyMMdd}.pdf";
            CreateComparisonReport(originalPath, revisedPath, reportPath);
            Console.WriteLine($"Report created: {reportPath}");
        }
        // Close documents
        original.Dispose();
        revised.Dispose();
    }
}

Este exemplo demonstra como comparar duas versões de contrato em PDF e gerar relatórios para revisão. O sistema detecta alterações automaticamente e cria a documentação.

Lidando com PDFs protegidos por senha

O IronPDF lida perfeitamente com arquivos PDF criptografados, passando a senha ao chamar o método de carregamento:

public static bool CompareProtectedPdfs(string pdf1Path, string pass1,
                                        string pdf2Path, string pass2)
{
    // Load password-protected two PDFs
    var pdf1 = PdfDocument.FromFile(pdf1Path, pass1);
    var pdf2 = PdfDocument.FromFile(pdf2Path, pass2);
    // Extract and compare text
    string text1 = pdf1.ExtractAllText();
    string text2 = pdf2.ExtractAllText();
    bool result = text1 == text2;
    // Close and dispose
    pdf1.Dispose();
    pdf2.Dispose();
    return result;
}

Basta passar o parâmetro de senha ao carregar PDFs protegidos. O IronPDF lida com a descriptografia automaticamente.

Entrada

Como Comparar Dois Arquivos PDF Usando C# com a IronPDF: Imagem 9 - PDF Protegido 1

Como Comparar Dois Arquivos PDF Usando C# com a IronPDF: Imagem 10 - PDF Protegido 2

Saída

Instruções passo a passo

Siga estes passos para implementar a comparação de PDFs no seu projeto .NET :

  1. Instale o pacote IronPDF for .NET via NuGet.
  2. Adicione a referência ao namespace IronPDF.
  3. Crie uma instância de PdfDocument para cada arquivo
  4. Use métodos como ExtractAllText() para obter conteúdos
  5. Compare o texto extraído ou implemente lógica personalizada.
  6. Salve os resultados ou gere relatórios conforme necessário.
  7. Feche os objetos do documento para liberar recursos.

Como Comparar Dois Arquivos PDF Usando C# com a IronPDF: Imagem 12 - Compatibilidade entre plataformas

Definindo sua licença

Para usar o IronPDF sem marcas d'água, defina sua chave de licença:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

Visite a página de licenciamento para obter detalhes sobre as opções disponíveis. Baixe a versão de avaliação gratuita do IronPDF e configure arquivos PDF usando recursos de comparação de nível profissional.

Melhores práticas

  1. Aceite todas as revisões antes da comparação, caso esteja trabalhando com alterações controladas.
  2. Desenvolver tratamento de erros para operações críticas de arquivos.
  3. Melhore o desempenho criando comparações específicas para cada página em documentos grandes.
  4. Execute comparações assíncronas para vários documentos PDF.
  5. Atualize sua biblioteca regularmente para obter os recursos e o suporte mais recentes.

Como Comparar Dois Arquivos PDF Usando C# com a IronPDF: Imagem 14 - Compare dois arquivos PDF usando C# - IronPDF

Conclusão

O IronPDF simplifica o processo de comparação de dois arquivos PDF usando C#, com sua API intuitiva e poderosos recursos de extração. Desde comparações básicas até a criação de relatórios detalhados, o IronPDF oferece todas as ferramentas necessárias para fluxos de trabalho robustos de comparação de documentos.

A combinação de fácil instalação, funcionalidade abrangente e suporte multiplataforma torna o IronPDF a escolha ideal para desenvolvedores que implementam comparação de PDFs em aplicativos .NET . Seja para desenvolver sistemas de gerenciamento de documentos ou soluções de controle de versão, a abordagem direta do IronPDF permite que você comece a usar rapidamente.

Comece hoje mesmo seu teste gratuito do IronPDF e implemente recursos profissionais de comparação de PDFs. Com suporte técnico completo e documentação abrangente, você terá funcionalidades prontas para produção em poucas horas. Consulte a documentação completa para saber mais sobre os recursos avançados.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais bem estruturados e visualmente atraentes.

...
Leia mais

Artigos relacionados

Key in blue circle

Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.

Your trial license will be sent to your email address

Sem limitações. 100% desbloqueado. Sem cartão de crédito.

bullet_checkedNão é necessário cartão de crédito nem criação de conta.Sem limitações. 100% desbloqueado. Sem cartão de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Agende sua demonstração ao vivo gratuita.
Booking Badge

Aprovado por milhões de engenheiros em todo o mundo.

Logotipos dos clientes da Iron Software
Agende sua consulta sem compromisso.
Preencha o formulário abaixo ou envie um e-mail para sales@ironsoftware.com
Os seus dados serão sempre mantidos em sigilo.
Aprovado por milhões de engenheiros em todo o mundo.
Logotipos dos clientes da Iron Software
Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.
Não é necessário cartão de crédito nem criação de conta.