IRONSOFTWAREHOME
KORZYSTANIE Z IRONPDF

Jak stworzyć .NET PDF API z użyciem IronPDF

Curtis Chau
Curtis Chau
Updated: 28 czerwca 2026

Programowe porównywanie dokumentów PDF jest niezbędne do śledzenia zmian, weryfikacji różnych wersji oraz automatyzacji procesów zapewnienia jakości. Niezależnie od tego, czy chcesz porównać dwa pliki PDF w ramach zarządzania dokumentami, czy też znaleźć różnice w poprawkach umów, IronPDF zapewnia usprawnione rozwiązanie do porównywania plików PDF w języku C#.

Ten samouczek pokazuje, jak porównać dwa dokumenty PDF przy użyciu funkcji wyodrębniania tekstu IronPDF, od podstawowych porównań po tworzenie szczegółowych raportów różnic. Poznasz praktyczne techniki wraz z przykładami kodu, które działają w systemach Windows, Linux, macOS, Docker oraz na platformach chmurowych.

Porównanie dwóch plików PDF za pomocą C# z IronPDF: Obraz 1 - IronPDF

Wymagania wstępne i konfiguracja

Przed rozpoczęciem upewnij się, że masz zainstalowane:

  • Visual Studio 2019 lub nowsze
  • .NET Framework 4.6.2+ lub .NET Core 3.1+
  • Podstawowa znajomość języka C#

Instalacja pakietu IronPDF .NET

Zainstaluj IronPDF za pomocą menedżera pakietów NuGet w swoim projekcie .NET:

PM > Install-Package IronPdf

Porównanie dwóch plików PDF za pomocą C# z IronPDF: Obraz 2 - Instalacja

Lub przy użyciu interfejsu CLI platformy .NET:

dotnet add package IronPdf

Dodaj niezbędne odniesienie do przestrzeni nazw do swoich plików:

using IronPdf;
using System;

Porównanie dwóch plików PDF za pomocą C# z IronPDF: Obraz 3 - Funkcje

Podstawowe porównanie dokumentów PDF

Zacznijmy od przykładowego kodu służącego do porównywania plików PDF poprzez wyodrębnianie i porównywanie ich treści tekstowej:

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

Ten kod ładuje dwa pliki PDF za pomocą metody PdfDocument.FromFile() z IronPDF, wyodrębnia całą zawartość tekstową i wykonuje bezpośrednie porównanie ciągów. Metoda porównania dostarcza wskaźników pozwalających określić stopień zgodności dokumentów.

Dane wejściowe

Porównanie dwóch plików PDF za pomocą C# z IronPDF: Obraz 4 - Przykładowe dane wejściowe PDF 1

Porównanie dwóch plików PDF za pomocą C# z IronPDF: Obraz 5 - Przykładowe dane wejściowe PDF 2

Wynik

Porównanie dwóch plików PDF za pomocą C# z IronPDF: Obraz 6 - Wyjście konsolowe

Metoda porównania strona po stronie

Aby uzyskać bardziej szczegółową analizę, porównaj dwa pliki PDF strona po stronie, aby dokładnie zidentyfikować miejsca, w których występują różnice:

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

Metoda ExtractTextFromPage() umożliwia ukierunkowane wyodrębnianie z określonych stron. Takie podejście pomaga programistom wskazać rozbieżności między różnymi wersjami dokumentów PDF.

Wykorzystanie wzorca klasy porównawczej

Utwórz dedykowaną klasę porównawczą, aby ulepszyć funkcjonalność porównywania:

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

Ta struktura klas zapewnia przejrzysty sposób porównywania dokumentów PDF przy jednoczesnym prawidłowym zarządzaniu obiektami dokumentów i odwołaniami.

Wynik

Porównanie dwóch plików PDF za pomocą C# z IronPDF: Obraz 7 - Schemat wyjściowy klasy porównawczej

Tworzenie raportu z porównaniem wizualnym

Wygeneruj raport w formacie HTML, który podkreśla różnice między dwoma dokumentami, i zapisz go jako plik 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}");
}

Ten kod pokazuje, jak utworzyć profesjonalny dokument PDF z wynikami porównania. Raport jest zapisywany w określonej ścieżce.

Porównanie wielu dokumentów PDF

Jeśli chcesz porównać jednocześnie wiele dokumentów PDF, skorzystaj z tej metody:

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

Takie podejście pozwala na porównanie wielu dokumentów PDF w jednym przebiegu, co jest przydatne w przypadku przetwarzania wsadowego.

Wynik

Porównanie dwóch plików PDF za pomocą C# z IronPDF: Obraz 8 - Wyjście wielu plików PDF

Kontrola wersji w praktyce

Oto praktyczny przykład śledzenia zmian w dokumentach prawnych:

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

Poniżej przedstawiono sposób porównywania dwóch wersji umowy w formacie PDF oraz generowania raportów do przeglądu. System automatycznie wykrywa zmiany i tworzy dokumentację.

Obsługa plików PDF chronionych hasłem

IronPDF płynnie obsługuje zaszyfrowane pliki PDF, przekazując hasło podczas wywoływania metody ładowania:

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

Wystarczy przekazać parametr hasła podczas ładowania chronionych plików PDF. IronPDF automatycznie zajmuje się odszyfrowywaniem.

Dane wejściowe

Porównanie dwóch plików PDF za pomocą C# z IronPDF: Obraz 9 - Chroniony PDF 1

Porównanie dwóch plików PDF za pomocą C# z IronPDF: Obraz 10 - Chroniony PDF 2

Wynik

Instrukcje krok po kroku

Wykonaj poniższe kroki, aby wdrożyć porównywanie plików PDF w swoim projekcie .NET:

  1. Zainstaluj pakiet IronPDF for .NET za pośrednictwem NuGet
  2. Dodaj odwołanie do przestrzeni nazw IronPDF
  3. Utwórz instancję PdfDocument dla każdego pliku
  4. Użyj metod takich jak ExtractAllText(), aby uzyskać zawartość
  5. Porównaj wyodrębniony tekst lub zaimplementuj niestandardową logikę
  6. Zapisuj wyniki lub generuj raporty w razie potrzeby
  7. Zamknij obiekty dokumentu, aby zwolnić zasoby

Porównanie dwóch plików PDF za pomocą C# z IronPDF: Obraz 12 - Kompatybilność międzyplatformowa

Ustawianie licencji

Aby korzystać z IronPDF bez znaków wodnych, ustaw swój klucz licencyjny:

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

Odwiedź stronę licencyjną, aby uzyskać szczegółowe informacje na temat dostępnych opcji. Pobierz bezpłatną wersję próbną IronPDF i skonfiguruj pliki PDF, korzystając z profesjonalnych funkcji porównawczych.

Najlepsze praktyki

  1. Jeśli korzystasz z funkcji śledzenia zmian, zaakceptuj wszystkie poprawki przed porównaniem.
  2. Opracowanie obsługi błędów dla kluczowych operacji na plikach
  3. Zwiększ wydajność, tworząc porównania dla poszczególnych stron w przypadku dużych dokumentów
  4. Asynchroniczne porównywanie wielu dokumentów PDF
  5. Regularnie aktualizuj bibliotekę, aby uzyskać dostęp do najnowszych funkcji i wsparcia

Porównanie dwóch plików PDF za pomocą C# z IronPDF: Obraz 14 - Porównaj dwa pliki PDF za pomocą C# - IronPDF

Wnioski

IronPDF upraszcza proces porównywania dwóch plików PDF przy użyciu języka C# dzięki intuicyjnemu interfejsowi API i zaawansowanym możliwościom ekstrakcji danych. Od podstawowego porównania po tworzenie szczegółowych raportów — IronPDF zapewnia wszystkie narzędzia potrzebne do solidnych procesów porównywania dokumentów.

Połączenie łatwej instalacji, wszechstronnej funkcjonalności i obsługi wielu platform sprawia, że IronPDF jest idealnym wyborem dla programistów wdrażających porównywanie plików PDF w aplikacjach .NET. Niezależnie od tego, czy tworzysz systemy zarządzania dokumentami, czy rozwiązania do kontroli wersji, proste podejście IronPDF pozwoli Ci szybko rozpocząć pracę.

Bezpłatna próba IronPDF już dziś i wdrażaj profesjonalne funkcje porównywania plików PDF. Dzięki pełnemu wsparciu technicznemu i obszernej dokumentacji w ciągu kilku godzin uzyskasz funkcjonalność gotową do wdrożenia. Aby dowiedzieć się więcej o zaawansowanych funkcjach, zapoznaj się z pełną dokumentacją.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podręczników.

...
Czytaj więcej

Powiązane artykuły

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Your trial license will be sent to your email address

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta