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.

Ö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

.NET CLI kullanarak:
dotnet add package IronPdf
dotnet add package IronPdf
Dosyalarınıza gerekli alan adını ekleyin:
using IronPdf;
using System;
using IronPdf;
using System;
Imports IronPdf
Imports System

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


Çıktı

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
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
Bu sınıf yapisi, PDF belgelerini karsilastirirken, belge nesnelerini ve referanslarini uygunca yönetmenin temiz bir yolunu sunar.
Çıktı

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
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
Bu yaklaşım, toplu işleme gereksinimleri için tek seferde birden fazla PDF belgesini karşılaştırmaya olanak tanır.
Çıktı

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
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
Korunan PDF dosyalarını yüklerken basitçe şifre parametresini geçin. IronPDF şifre çözümünü otomatik olarak yapar.
Girdi


Çıktı

Adım Adım Talimatlar
.NET projenizde PDF karşılaştırmasını uygulamak için bu adımları izleyin:
- IronPDF for .NET paketini NuGet üzerinden kurun
- IronPDF namespace referansını ekleyin
- Her dosya için
PdfDocumentörneği oluşturun - İçeriği almak için
ExtractAllText()gibi yöntemler kullanın - Çıkarılan metni karşılaştırın veya özel mantık uygulayın
- Sonuçları kaydedin veya gerektiğinde raporlar oluşturun
- Kaynakları serbest bırakmak için belge nesnelerini kapatın

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"
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.

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

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.




