Altbilgi içeriğine atla
IRONPDF KULLANARAK

C#'ta Iki PDF Dosyasini Nasıl Karsilastirilir

PDF belgelerini programlı olarak karşılaştırmak, değişiklikleri izlemek, farklı versiyonları doğrulamak ve kalite güvence iş akışlarını otomatikleştirmek için gereklidir. Iki PDF dosyasını doküman yönetimi veya sözleşme revizyonlarındaki farklılıkları bulmak icin karsilastirmaniz gerekiyorsa, IronPDF, C#'da PDF dosyalarını karşılaştırmak icin streamlined bir çozum sunar.

Bu eğitim, temel karsilastirmalardan detayli fark raporlari oluşturmaya kadar IronPDF'in metin elde etme yetenekleri kullanilarak iki PDF belgesinin nasıl karsilastirilacagini anlatir. Windows, Linux, macOS, Docker, ve bulut platformlari genelinde ise yarar kod örnekleri ile pratik teknikleri ogrenin.

C# ile IronPDF kullanarak iki PDF dosyasını karşılaştırma: Görüntü 1 - IronPDF

Ön Koşullar ve Kurulum

Başlamadan önce, şunların yüklü olduğundan emin olun:

  • Visual Studio 2019 veya sonrasi
  • .NET Framework 4.6.2+ veya .NET Core 3.1+
  • Temel C# bilgisi

IronPDF .NET Paketi Kurulumu

IronPDF'i, .NET projenizde NuGet Paket Yöneticisi üzerinden yükleyin:

Install-Package IronPdf
Install-Package IronPdf
SHELL

C# ile IronPDF kullanarak iki PDF dosyasını karşılaştırma: Görüntü 2 - Kurulum

.NET CLI kullanarak:

dotnet add package IronPdf
dotnet add package IronPdf
SHELL

Dosyalarınıza gerekli alan adını ekleyin:

using IronPdf;
using System;
using IronPdf;
using System;
Imports IronPdf
Imports System
$vbLabelText   $csharpLabel

C# ile IronPDF kullanarak iki PDF dosyasını karşılaştırma: Görüntü 3 - Özellikler

Temel PDF Belgesi Karsilastirmasi

PDF dosyalarını metin içeriklerini çıkarıp karşılaştırarak karsilastirmak icin örnek kodla başlayalim:

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

Public Class BasicPdfComparer
    Public Shared Function ComparePdfFiles(firstPdfPath As String, secondPdfPath As String) As Boolean
        ' Load two PDF documents
        Dim pdf1 = PdfDocument.FromFile(firstPdfPath)
        Dim pdf2 = PdfDocument.FromFile(secondPdfPath)
        ' Extract all text from both PDFs
        Dim text1 As String = pdf1.ExtractAllText()
        Dim text2 As String = pdf2.ExtractAllText()
        ' Compare the two documents
        Dim areIdentical As Boolean = text1 = text2
        ' Find differences and calculate similarity
        Dim similarity As Double = CalculateSimilarity(text1, text2)
        Console.WriteLine($"Documents are {(If(areIdentical, "identical", "different"))}")
        Console.WriteLine($"Similarity: {similarity:F2}%")
        Return areIdentical
    End Function

    Private Shared Function CalculateSimilarity(text1 As String, text2 As String) As Double
        If text1 = text2 Then Return 100.0
        If String.IsNullOrEmpty(text1) OrElse String.IsNullOrEmpty(text2) Then Return 0.0
        Dim matchingChars As Integer = 0
        Dim minLength As Integer = Math.Min(text1.Length, text2.Length)
        For i As Integer = 0 To minLength - 1
            If text1(i) = text2(i) Then matchingChars += 1
        Next
        Return matchingChars / Math.Max(text1.Length, text2.Length) * 100
    End Function
End Class
$vbLabelText   $csharpLabel

Bu kod, IronPDF'nin PdfDocument.FromFile() yöntemi ile iki PDF dosyasını yükler, tüm metin içeriğini çıkarır ve doğrudan bir metin dizisi karşılaştırması yapar. Karsilastirma metodu, belgelerin ne kadar yakin oldugunu belirlemek icin metrikler sunar.

Girdi

C# ile IronPDF kullanarak iki PDF dosyasını karşılaştırma: Görüntü 4 - Örnek PDF Girişi 1

C# ile IronPDF kullanarak iki PDF dosyasını karşılaştırma: Görüntü 5 - Örnek PDF Girişi 2

Çıktı

C# ile IronPDF kullanarak iki PDF dosyasını karşılaştırma: Görüntü 6 - Konsol Çıkışı

Sayfa Bazinda Karsilastirma Metodu

Daha detayli analiz için, iki PDF'yi sayfa sayfa karsilastirarak farklarin tam nerede olustugunu belirleyin:

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");
}
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");
}
Public Shared Sub ComparePageByPage(firstPdfPath As String, secondPdfPath As String)
    ' Load two files
    Dim pdf1 = PdfDocument.FromFile(firstPdfPath)
    Dim pdf2 = PdfDocument.FromFile(secondPdfPath)
    Dim maxPages As Integer = Math.Max(pdf1.PageCount, pdf2.PageCount)
    Dim differencesFound As Integer = 0
    For i As Integer = 0 To maxPages - 1
        ' Process each page
        Dim page1Text As String = If(i < pdf1.PageCount, pdf1.ExtractTextFromPage(i), "")
        Dim page2Text As String = If(i < pdf2.PageCount, pdf2.ExtractTextFromPage(i), "")
        If page1Text <> page2Text Then
            differencesFound += 1
            Console.WriteLine($"Page {i + 1}: Differences detected")
        Else
            Console.WriteLine($"Page {i + 1}: Identical")
        End If
    Next
    Console.WriteLine(vbCrLf & $"Summary: {differencesFound} page(s) with changes")
End Sub
$vbLabelText   $csharpLabel

ExtractTextFromPage() yöntemi, belirli sayfalardan hedefe yönelik çıkarma yapılmasına olanak tanır. Bu yaklaşım, geliştiricilerin PDF belgelerinin farklı versiyonlarında uyumsuzlukları tespit etmelerine olanak tanır.

Comparer Sinifi Desenini Kullanma

Karsilastirma işlevinizin işlevselliğini arttırmak icin bir comparer sınıfı oluşturun:

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>();
}
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>();
}
Imports System
Imports System.Collections.Generic
Imports System.Net

Public Class PdfComparer
    Implements IDisposable

    Private pdf1 As PdfDocument
    Private pdf2 As PdfDocument
    Private disposed As Boolean

    Public Sub New(file1Path As String, file2Path As String)
        ' Load the two PDFs
        pdf1 = PdfDocument.FromFile(file1Path)
        pdf2 = PdfDocument.FromFile(file2Path)
    End Sub

    Public Function Compare() As ComparisonResult
        Dim result As New ComparisonResult()
        ' Compare PDF documents
        Dim text1 As String = If(pdf1?.ExtractAllText(), String.Empty)
        Dim text2 As String = If(pdf2?.ExtractAllText(), String.Empty)
        result.AreIdentical = String.Equals(text1, text2, StringComparison.Ordinal)
        result.SimilarityPercent = CalculateSimilarity(text1, text2)
        result.Differences = FindDifferences(text1, text2)
        Return result
    End Function

    Private Function FindDifferences(text1 As String, text2 As String) As List(Of String)
        Dim differences As New List(Of String)()
        ' Normalize nulls
        text1 = If(text1, String.Empty)
        text2 = If(text2, String.Empty)
        If String.Equals(text1, text2, StringComparison.Ordinal) Then
            Return differences
        End If
        ' Page-aware comparisons aren't possible here because we only have full-text;
        ' produce a concise, actionable difference entry:
        Dim min As Integer = Math.Min(text1.Length, text2.Length)
        Dim firstDiff As Integer = -1
        For i As Integer = 0 To min - 1
            If text1(i) <> text2(i) Then
                firstDiff = i
                Exit For
            End If
        Next
        If firstDiff = -1 AndAlso text1.Length <> text2.Length Then
            ' No differing character in the overlap, but lengths differ
            firstDiff = min
        End If
        ' Create short excerpts around the first difference for context
        Dim excerptLength As Integer = 200
        Dim excerpt1 As String = String.Empty
        Dim excerpt2 As String = String.Empty
        If firstDiff >= 0 Then
            Dim start1 As Integer = Math.Max(0, firstDiff)
            Dim len1 As Integer = Math.Min(excerptLength, Math.Max(0, text1.Length - start1))
            excerpt1 = If(start1 < text1.Length, text1.Substring(start1, len1), String.Empty)
            Dim start2 As Integer = Math.Max(0, firstDiff)
            Dim len2 As Integer = Math.Min(excerptLength, Math.Max(0, text2.Length - start2))
            excerpt2 = If(start2 < text2.Length, text2.Substring(start2, len2), String.Empty)
        End If
        ' HTML-encode excerpts if they will be embedded into HTML reports
        Dim safeExcerpt1 As String = WebUtility.HtmlEncode(excerpt1)
        Dim safeExcerpt2 As String = WebUtility.HtmlEncode(excerpt2)
        Dim similarity As Double = CalculateSimilarity(text1, text2)
        differences.Add($"Similarity: {similarity:F2}%. Lengths: [{text1.Length}, {text2.Length}]. First difference index: {firstDiff}. Excerpt1: ""{safeExcerpt1}"" Excerpt2: ""{safeExcerpt2}""")
        Return differences
    End Function

    Public Sub Close()
        Dispose()
    End Sub

    Public Sub Dispose() Implements IDisposable.Dispose
        If disposed Then Return
        disposed = True
        pdf1?.Dispose()
        pdf2?.Dispose()
    End Sub
End Class

Public Class ComparisonResult
    ' True when extracted text is exactly the same
    Public Property AreIdentical As Boolean
    ' Similarity expressed as percent (0..100)
    Public Property SimilarityPercent As Double
    ' Human readable difference entries
    Public Property Differences As List(Of String) = New List(Of String)()
End Class
$vbLabelText   $csharpLabel

Bu sınıf yapisi, PDF belgelerini karsilastirirken, belge nesnelerini ve referanslarini uygunca yönetmenin temiz bir yolunu sunar.

Çıktı

C# ile IronPDF kullanarak iki PDF dosyasını karşılaştırma: Görüntü 7 - Karşılaştırıcı Sınıfı Desen Çıkışı

Gorsel Karsilastirma Raporu Oluşturma

Iki belge arasinda farklari vurgulayan HTML tabanli bir rapor oluşturun ve bunu PDF dosyası olarak kaydedin:

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

Public Shared Sub CreateComparisonReport(pdf1Path As String, pdf2Path As String, outputPath As String)
    ' Load PDFs for comparison
    Dim pdf1 = PdfDocument.FromFile(pdf1Path)
    Dim pdf2 = PdfDocument.FromFile(pdf2Path)
    ' Build HTML report with details
    Dim htmlReport As String = "
        <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 i As Integer = 0 To Math.Max(pdf1.PageCount, pdf2.PageCount) - 1
        Dim page1 As String = If(i < pdf1.PageCount, pdf1.ExtractTextFromPage(i), "")
        Dim page2 As String = If(i < pdf2.PageCount, pdf2.ExtractTextFromPage(i), "")
        Dim identical As Boolean = page1 = page2
        Dim status As String = If(identical, "Identical", "Different")
        htmlReport &= $"<tr><td>Page {i + 1}</td><td class='{status.ToLower()}'>{status}</td></tr>"
    Next
    htmlReport &= "</table></body></html>"
    ' Create and save the report
    Dim renderer = New ChromePdfRenderer()
    Dim reportPdf = renderer.RenderHtmlAsPdf(htmlReport)
    reportPdf.SaveAs(outputPath)
    Console.WriteLine($"Report saved to: {outputPath}")
End Sub
$vbLabelText   $csharpLabel

Bu kod, karsilastirma sonucunu iceren profesyonel bir PDF belgesi oluşturmayi gozterir. Rapor belirtilen yola kaydedilir.

Coklu PDF Belgelerinin Karsilastirilmasi

Çok sayida PDF belgesini ayni anda karsilastirmak gerektiğinde bu metodu kullanın:

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());
}
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());
}
Imports System
Imports System.Collections.Generic

Public Shared Sub CompareMultiplePdfs(ParamArray pdfPaths As String())
    If pdfPaths.Length < 2 Then
        Console.WriteLine("Need at least two files to compare")
        Return
    End If

    ' Load multiple PDF documents
    Dim pdfs As New List(Of PdfDocument)()
    For Each path As String In pdfPaths
        pdfs.Add(PdfDocument.FromFile(path))
    Next

    ' Compare all documents
    For i As Integer = 0 To pdfs.Count - 2
        For j As Integer = i + 1 To pdfs.Count - 1
            Dim text1 As String = pdfs(i).ExtractAllText()
            Dim text2 As String = pdfs(j).ExtractAllText()
            Dim identical As Boolean = text1 = text2
            Console.WriteLine($"File {i + 1} vs File {j + 1}: {(If(identical, "Identical", "Different"))}")
        Next
    Next

    ' Close all documents
    pdfs.ForEach(Sub(pdf) pdf.Dispose())
End Sub
$vbLabelText   $csharpLabel

Bu yaklaşım, toplu işleme gereksinimleri için tek seferde birden fazla PDF belgesini karşılaştırmaya olanak tanır.

Çıktı

C# ile IronPDF kullanarak iki PDF dosyasını karşılaştırma: Görüntü 8 - Birden Çok PDF Çıkışı

Gerçek Dünyada Sozleşme Sürüm Kontrolu

Hukuki belgelerdeki revizyonları izlemek icin pratik bir örnek sunar:

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();
    }
}
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();
    }
}
Public Class ContractVersionControl
    Public Shared Sub CompareContractVersions(originalPath As String, revisedPath As String)
        ' System for comparing contract versions
        Console.WriteLine("Contract Version Comparison System")
        Dim original = PdfDocument.FromFile(originalPath)
        Dim revised = PdfDocument.FromFile(revisedPath)
        ' Extract contract contents
        Dim originalText As String = original.ExtractAllText()
        Dim revisedText As String = revised.ExtractAllText()
        If originalText = revisedText Then
            Console.WriteLine("No changes detected")
        Else
            Console.WriteLine("Changes detected in revised version")
            ' Create detailed report
            Dim reportPath As String = $"contract_comparison_{DateTime.Now:yyyyMMdd}.pdf"
            CreateComparisonReport(originalPath, revisedPath, reportPath)
            Console.WriteLine($"Report created: {reportPath}")
        End If
        ' Close documents
        original.Dispose()
        revised.Dispose()
    End Sub
End Class
$vbLabelText   $csharpLabel

Bu, iki PDF sözleşme versiyonunu karsilastirmayi ve gozden gecirme raporlari oluşturmayı gösterir. Sistem otomatik olarak değişiklikleri algılar ve belgeler oluşturu.

Şifre Koruması Olan PDF'leri Yonetmek

IronPDF, yükleme metodunu cagirdiginizde şifreyi geçerek sorunsuz bir şekilde sifrelenmis PDF dosyalarını yonetir:

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;
}
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;
}
Public Shared Function CompareProtectedPdfs(pdf1Path As String, pass1 As String, pdf2Path As String, pass2 As String) As Boolean
    ' Load password-protected two PDFs
    Dim pdf1 = PdfDocument.FromFile(pdf1Path, pass1)
    Dim pdf2 = PdfDocument.FromFile(pdf2Path, pass2)
    ' Extract and compare text
    Dim text1 As String = pdf1.ExtractAllText()
    Dim text2 As String = pdf2.ExtractAllText()
    Dim result As Boolean = text1 = text2
    ' Close and dispose
    pdf1.Dispose()
    pdf2.Dispose()
    Return result
End Function
$vbLabelText   $csharpLabel

Korunan PDF dosyalarını yüklerken basitçe şifre parametresini geçin. IronPDF şifre çözümünü otomatik olarak yapar.

Girdi

C# ile IronPDF kullanarak iki PDF dosyasını karşılaştırma: Görüntü 9 - Korunan PDF 1

C# ile IronPDF kullanarak iki PDF dosyasını karşılaştırma: Görüntü 10 - Korunan PDF 2

Çıktı

C# ile IronPDF kullanarak iki PDF dosyasını karşılaştırma: Görüntü 11 - Şifre Korumalı PDF Çıkışları

Adım Adım Talimatlar

.NET projenizde PDF karşılaştırmasını uygulamak için bu adımları izleyin:

  1. IronPDF for .NET paketini NuGet üzerinden kurun
  2. IronPDF namespace referansını ekleyin
  3. Her dosya için PdfDocument örneği oluşturun
  4. İçeriği almak için ExtractAllText() gibi yöntemler kullanın
  5. Çıkarılan metni karşılaştırın veya özel mantık uygulayın
  6. Sonuçları kaydedin veya gerektiğinde raporlar oluşturun
  7. Kaynakları serbest bırakmak için belge nesnelerini kapatın

C# ile IronPDF kullanarak iki PDF dosyasını karşılaştırma: Görüntü 12 - Çapraz platform uyumluluğu

Lisansınızı Ayarlama

IronPDF'i filigransız kullanmak için lisans anahtarınızı ayarlayın:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Mevcut seçenekler hakkında daha fazla bilgi için lisans sayfasını ziyaret edin. IronPDF'in ücretsiz denemesini indirin ve profesyonel düzeyde karşılaştırma yetenekleri ile PDF dosyalarını ayarlayın.

C# ile IronPDF kullanarak iki PDF dosyasını karşılaştırma: Görüntü 13 - Lisanslama

En İyi Uygulamalar

  1. Takip edilen değişikliklerle çalışıyorsanız karşılaştırmadan önce tüm revizyonları kabul edin
  2. Önemli dosya işlemleri için hata işleme geliştirin
  3. Büyük belgeler için sayfa bazlı karşılaştırmalar oluşturarak performansı artırın
  4. Birden fazla PDF belgesi için karşılaştırmaları asenkron olarak çalıştırın
  5. En son özellikler ve destek için kütüphanenizi düzenli olarak güncelleyin

C# ile IronPDF kullanarak iki PDF dosyasını karşılaştırma: Görüntü 14 - C# kullanarak iki PDF dosyasını karşılaştırma - IronPDF

Sonuç

IronPDF, C# kullanarak iki PDF dosyasını karşılaştırma sürecini sezgisel API ve güçlü çıkarım yetenekleri ile basitleştirir. Temel karşılaştırmadan ayrıntılı raporlar oluşturmaya kadar, IronPDF sağlam belge karşılaştırma iş akışları için gereken tüm araçları sağlar.

Kolay kurulum, kapsamlı işlevsellik ve platformlar arası destek kombinasyonu, IronPDF'i .NET uygulamalarında PDF karşılaştırması uygulayan geliştiriciler için ideal bir seçim haline getirir. Belge yönetim sistemleri veya sürüm kontrol çözümleri geliştiriyor olun, IronPDF'in basit yaklaşımı sizi hızlıca çalıştırır.

Bugün IronPDF'in ücretsiz deneme sürümüne başlayın ve profesyonel PDF karşılaştırma özelliklerini uygulayın. Tam teknik destek ve kapsamlı belgeler ile saatler içinde üretime hazır işlevselliğe sahip olacaksınız. Gelişmiş özellikler hakkında daha fazla bilgi edinmek için tam belgeleri inceleyin.

Sıkça Sorulan Sorular

IronPDF nedir ve PDF dosyalarını karşılaştırmada nasıl yardımcı olur?

IronPDF, .NET kütüphanesi olup, içerik veya yapısal farklar için iki PDF belgesini programlı olarak karşılaştırma gibi özellikleri ile PDF dosyalarıyla çalışmak için araçlar sağlar.

IronPDF, iki PDF dosyası arasındaki farkları vurgulayabilir mi?

Evet, IronPDF içeriklerini karşılaştırarak ve değişiklikler veya tutarsızlıkların ayrıntılı bir raporunu sağlayarak iki PDF dosyası arasındaki farkları vurgulayabilir.

IronPDF ile PDF'leri karşılaştırmak için ileri seviye C# becerilerine ihtiyaçım var mı?

Hayır, ileri seviye C# becerilerine ihtiyaçınız yok. IronPDF, PDF dosyalarını karşılaştırmak için basit ve sezgisel yöntemler sunar, bu da farklı beceri seviyelerindeki geliştiriciler için erişilebilir kılar.

IronPDF'i kullanarak şifrelenmiş PDF dosyaları karşılaştırmak mümkün mü?

Evet, IronPDF, belgelerin içeriğine erişmek için doğru parola sağlandığı sürece şifrelenmiş PDF dosyalarının karşılaştırmasını destekler.

IronPDF, iki PDF arasındaki hangi tür farkları algılayabilir?

IronPDF, metin değişiklikleri, resim modifikasyonları ve düzen ya da biçimlendirmedeki yapısal değişiklikler gibi geniş bir fark yelpazesini algılayabilir.

IronPDF mevcut C# uygulamalarına entegre edilebilir mi?

Evet, IronPDF mevcut C# uygulamalarına kolayca entegre edilebilir, geliştiricilerin kod tabanında önemli değişiklikler yapmadan PDF karşılaştırma işlevselliği eklemesine izin verir.

IronPDF diğer .NET uygulamaları ile uyumlu mu?

IronPDF, tüm .NET uygulamaları ile uyumlu olacak şekilde tasarlanmıştır ve .NET framework içinde çalışan geliştiriciler için sorunsuz bir deneyim sunar.

IronPDF, birden fazla PDF dosyasının toplu karşılaştırmasını destekliyor mu?

Evet, IronPDF toplu işleme destekler, bu da geliştiricilere tek bir işlemde birden fazla PDF dosyasını karşılaştırma olanağı sağlar ve bu büyük belge hacimleriyle çalışırken kullanışlıdır.

IronPDF, PDF karşılaştırmalarının doğruluğunu nasıl sağlıyor?

IronPDF, herhangi bir uyumsuzluğu belirlemek için hem metin hem de görsel unsurları analiz ederek doğru ve güvenilir karşılaştırmalar sağlamak için gelişmiş algoritmalar kullanır.

C#'ta PDF karşılaştırmasına başlamak için ilk adım nedir?

İlk adım, C# geliştirme ortamınızda NuGet Paket Yöneticisi aracılığıyla IronPDF kitaplığını kurmaktır. Bu, PDF'leri karşılaştırmaya başlamak için gerekli tüm araçları sağlar.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında lisans derecesine sahiptir (Carleton Üniversitesi) ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirme üzerine uzmanlaşmıştır. Kullanıcı dostu ve estetik açıdan hoş arayüzler tasarlamaya tutkuyla bağlı olan Curtis, modern çerç...

Daha Fazlasını Oku

Iron Destek Ekibi

Haftanın 5 günü, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara