IronPDF Kullanarak C#'da İki PDF Dosyasini Nasıl Karsilastirirsiniz
IronPDF, C# geliştiricilerine PDF belgelerini programlı olarak karşılaştırmanın basit bir yolunu sunar -- içeriği çıkartır ve kodun sadece birkaç satırı ile sayfa sayfa farkları analiz eder. Bu öğreticide temel karşılaştırmalar, çok belgeli analiz, parola korumalı dosya işleme ve formatlı karşılaştırma raporları oluşturmaya yönelik pratik kod örnekleri bulunmaktadır .NET 10.
Neden PDF Belgelerini Programlı Olarak Karşılaştırmanız Gerekiyor?
PDF belgelerini elle karşılaştırmak yavaş, hata yapma olasılığı yüksek ve ölçeklenebilir değildir. Hukuki, finansal ve sağlık gibi belge yoğun endüstrilerde, dosyalar sürekli değişir -- sözleşmeler revize edilir, faturalar yeniden düzenlenir ve düzenleyici başvuruların sürüm doğrulaması yapılması gerekir. Otomatik karşılaştırma, insan darboğazını ortadan kaldırır ve her seferinde tutarlı, denetlenebilir sonuçlar sağlar.
IronPDF size C#'ta iki PDF dosyasını karşılaştırma için üretime hazır bir yaklaşım sunar. Kütüphane, karmaşık düzenlerden doğru metin çıkarımı için bir Chrome oluşturma motoru kullanır ve tam API'si, PDF içeriğini yüklemek, okumak ve analiz etmek için sezgisel yöntemler sunar. Sözleşme değişikliklerini izlemek, üretilen çıktıları doğrulamak veya bir belge denetim sistemi oluşturmak istiyorsanız, IronPDF ağır iş yükünü üstlenir.
Kütüphane, çoklu platformlar üzerinde zaten .NET kullanan ekipler için de sağlam bir seçenektir. Windows, Linux, macOS, Docker, Azure ve AWS'yi destekler ve her hedef için farklı kod yolları gerektirmez. Bu, hem CI/CD boru hattında hem de masaüstü uygulamalarında çalışan karşılaştırma araçları oluşturmayı pratik hale getirir.

Otomatik PDF Karşılaştırmasını Ne Zaman Kullanmalısınız?
Otomatik karşılaştırma, belge yoğun iş akışlarında sürüm kontrolü ile uğraşırken önemli hale gelir. Elle inceleme, günde yüzlerce dosya ile uğraşıldığında veya kesinliğin önemli olduğu durumlarda pratik değildir. Yaygın senaryolar arasında fatura döngüleri boyunca faturaların karşılaştırılması, onaylı şablonlarla düzenleyici başvuruların doğrulanması, sürüm sürümleri boyunca teknik spesifikasyonlarda değişikliklerin izlenmesi ve hukuki iş akışlarında sözleşme değişikliklerinin denetlenmesi bulunur.
Doğruluk kazanımları önemli düzeydedir. Bir insan değerlendirme görevlisi, iki 50 sayfalık belgeyi inceleyerek bir finansal tabloda değişen bir sayıyı kaçırabilir. Otomatik bir karşılaştırma anında bunu yakalar, sayfayı işaretler ve yorgunluk veya tutarsızlık olmadan bir fark raporu üretir.
Başlıca Kullanım Alanları Nelerdir?
PDF karşılaştırması, birçok endüstri ve iş akışı genelinde uygulama alanı bulur:
- Hukuk: Sözleşme değişikliklerini izleyin, taslak ve nihai sürümler arasında uyumluluğu doğrulayın ve imzalamadan önce yalnızca onaylanmış değişikliklerin yapıldığını doğrulayın.
- Finans: Banka ekstelerini doğrulayın, faturalarda yetkisiz değişiklikleri yakalayın ve oluşturulan raporların beklenen çıktılarla eşleştiğini doğrulayın.
- Sağlık: Düzenleyici başvuruların onaylı belgelerle eşleştiğini ve hasta kayıtlarının değişmediğini doğrulayın.
- Kalite güvencesi: Yazılım tarafından üretilen PDF'leri altın master dosyalarla karşılaştırarak otomatik test setlerinde oluşturulan problemleri yakalayın.
- Belgeleme: Kullanıcı kılavuzlarının yerelleştirilmiş sürümlerinde tutarlılığı doğrulayın ve çevirinin teknik içeriği değiştirmediğini doğrulayın.
IronPDF'deki platformlar arası destek, bu çözümleri Windows, Linux ve bulut ortamlarında değişiklik yapılmadan dağıtılabilir hale getirir.
Nasıl IronPDF'i .NET Projesine Kurarsınız?
IronPDF'i NuGet üzerinden hem Paket Yöneticisi Konsolu hem de .NET CLI kullanarak kurun:
Install-Package IronPdf
dotnet add package IronPdf
Install-Package IronPdf
dotnet add package IronPdf

Linux dağıtımları veya Docker tabanlı ortamlar için platforma özgü belgeleri inceleyin. Kurulduktan sonra, bir lisans anahtarınız varsa ayarlayın:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Geliştirme ve test çalışmaları bir lisans anahtarı olmadan çalışır, ancak üretilen PDF'ler üzerinde filigranlar görünür. Üretim dağıtımları lisans sayfasından geçerli bir lisans gerektirir. Ücretsiz deneme 30 günlük değerlendirme için tam işlevsellik sağlar ve kredi kartı gerektirmez.

IronPDF .NET Framework 4.6.2+, .NET Core 3.1+ ve .NET 5 ile .NET 10'u destekler. macOS için hem Intel hem de Apple Silicon işlemcileri desteklenir. Kütüphane, Chrome render motoru kurulumunu otomatik olarak ele alır, bu nedenle manuel tarayıcı kurulumu gerekmez.
Nasıl Temel Bir PDF Karşılaştırması Yaparsınız?
PDF karşılaştırmasının temeli, metin içeriğini çıkarmak ve karşılaştırmaktır. IronPDF'in metin çıkarma yetenekleri, çok sütunlu belgeler, tablolar, formlar ve gömülü metin katmanlarına sahip taranmış PDF'ler dahil olmak üzere, hemen hemen her PDF düzeninden doğru içerik alımı sağlar. Aşağıdaki örnek, iki dosya yükler, metinlerini çıkarır ve bir benzerlik puanı hesaplar:
using IronPdf;
using System;
// Load two PDF documents
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
// Extract text from both PDFs
string text1 = pdf1.ExtractAllText();
string text2 = pdf2.ExtractAllText();
// Compare the two documents
if (text1 == text2)
{
Console.WriteLine("PDF files are identical");
}
else
{
Console.WriteLine("PDFs have differences");
// Calculate character-level similarity
int maxLength = Math.Max(text1.Length, text2.Length);
if (maxLength > 0)
{
int differences = 0;
int minLength = Math.Min(text1.Length, text2.Length);
for (int i = 0; i < minLength; i++)
{
if (text1[i] != text2[i]) differences++;
}
differences += Math.Abs(text1.Length - text2.Length);
double similarity = 1.0 - (double)differences / maxLength;
Console.WriteLine($"Similarity: {similarity:P}");
Console.WriteLine($"Character differences: {Math.Abs(text1.Length - text2.Length)}");
}
}
using IronPdf;
using System;
// Load two PDF documents
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
// Extract text from both PDFs
string text1 = pdf1.ExtractAllText();
string text2 = pdf2.ExtractAllText();
// Compare the two documents
if (text1 == text2)
{
Console.WriteLine("PDF files are identical");
}
else
{
Console.WriteLine("PDFs have differences");
// Calculate character-level similarity
int maxLength = Math.Max(text1.Length, text2.Length);
if (maxLength > 0)
{
int differences = 0;
int minLength = Math.Min(text1.Length, text2.Length);
for (int i = 0; i < minLength; i++)
{
if (text1[i] != text2[i]) differences++;
}
differences += Math.Abs(text1.Length - text2.Length);
double similarity = 1.0 - (double)differences / maxLength;
Console.WriteLine($"Similarity: {similarity:P}");
Console.WriteLine($"Character differences: {Math.Abs(text1.Length - text2.Length)}");
}
}
Imports IronPdf
Imports System
' Load two PDF documents
Dim pdf1 = PdfDocument.FromFile("document1.pdf")
Dim pdf2 = PdfDocument.FromFile("document2.pdf")
' Extract text from both PDFs
Dim text1 As String = pdf1.ExtractAllText()
Dim text2 As String = pdf2.ExtractAllText()
' Compare the two documents
If text1 = text2 Then
Console.WriteLine("PDF files are identical")
Else
Console.WriteLine("PDFs have differences")
' Calculate character-level similarity
Dim maxLength As Integer = Math.Max(text1.Length, text2.Length)
If maxLength > 0 Then
Dim differences 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 differences += 1
Next
differences += Math.Abs(text1.Length - text2.Length)
Dim similarity As Double = 1.0 - CDbl(differences) / maxLength
Console.WriteLine($"Similarity: {similarity:P}")
Console.WriteLine($"Character differences: {Math.Abs(text1.Length - text2.Length)}")
End If
End If
Bu kod, her iki dosyadan da tam metni çekmek için üst düzey açıklamalar ve IronPDF'nin ExtractAllText() yöntemini kullanarak karakter bazlı bir karşılaştırma yapıp bir benzerlik yüzdesi hesaplar. Puan, belgelerin ne kadar farklı olduğu hakkında hızlı ve niceliksel bir ölçüm sağlar.
Karakter düzeyinde yaklaşım, bilinçli bir şekilde basit ve hızlıdır. İki belgenin farklı olup olmadığını hızlıca anlamanız gerektiğinde veya bir dönüştürme boru hattı beklenen çıktıyı ürettiğinden emin olduğunuzda iyi çalışır. Daha ince analiz gerektiren senaryolar için -- hangi cümlelerin değiştiğini veya anlamsal farklılıkların izlenmesini sağlayacak şekilde -- çıkarılan metin dizgileri üzerine Levenshtein mesafesi veya fark algoritmaları ekleyebilirsiniz.
Giriş Belge PDF'leri Nasıl Görünür?


Karşılaştırma Çıktısı Ne Gösterir?

Konsol çıktısı, belgeler arasındaki benzerlik yüzdesini gösterir. Yukarıda gösterildiği gibi %2.60 benzerlik puanı, iki belgenin neredeyse tamamen farklı içeriğe sahip olduğunu belirtir. Bu metrik, farkın derecesini hızlıca değerlendirmenize ve sonraki adımlara karar vermenize yardımcı olur.
Sadece Metin Karşılaştırmasının Sınırları Nelerdir?
Text-only comparison does not capture formatting, images, or layout differences. İki PDF, aynı metne sahip olabilir ancak biri farklı bir yazı tipi, sayfa boyutu veya resim yerleştirme kullanıyorsa tamamen farklı görünebilir. Tüm görsel karşılaştırma için, IronPDF'in görüntü çıkarma yeteneklerini bir resim karşılaştırma kütüphanesi ile birleştirmeyi düşünün. Görsel doğruluğun metin içeriğinden daha önemli olduğu durumlarda, IronPDF'in rasterizasyon özellikleri sayfaları, piksel bazında karşılaştırma yapmak için resimlere dönüştürür.
PDF'leri Sayfa Sayfa Nasıl Karşılaştırırsınız?
Tam belge karşılaştırması, iki PDF'nin farklı olup olmadığını söylerken, sayfa sayfa karşılaştırma, tam olarak nerede farklı olduklarını söyler. Bu, raporlar, faturalar ve sayfalar boyunca tahmin edilebilir bir düzene sahip formlar gibi yapılandırılmış belgeler için özellikle değerlidir.
using IronPdf;
using System;
using System.Collections.Generic;
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
int maxPages = Math.Max(pdf1.PageCount, pdf2.PageCount);
var pageResults = new List<(int Page, double Similarity)>();
for (int i = 0; i < maxPages; i++)
{
string page1Text = i < pdf1.PageCount ? pdf1.ExtractTextFromPage(i) : "";
string page2Text = i < pdf2.PageCount ? pdf2.ExtractTextFromPage(i) : "";
if (page1Text != page2Text)
{
int maxLen = Math.Max(page1Text.Length, page2Text.Length);
double sim = maxLen == 0 ? 1.0
: 1.0 - (double)Math.Abs(page1Text.Length - page2Text.Length) / maxLen;
Console.WriteLine($"Page {i + 1} differs -- similarity: {sim:P}");
pageResults.Add((i + 1, sim));
}
}
Console.WriteLine($"\nTotal pages with differences: {pageResults.Count}");
using IronPdf;
using System;
using System.Collections.Generic;
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
int maxPages = Math.Max(pdf1.PageCount, pdf2.PageCount);
var pageResults = new List<(int Page, double Similarity)>();
for (int i = 0; i < maxPages; i++)
{
string page1Text = i < pdf1.PageCount ? pdf1.ExtractTextFromPage(i) : "";
string page2Text = i < pdf2.PageCount ? pdf2.ExtractTextFromPage(i) : "";
if (page1Text != page2Text)
{
int maxLen = Math.Max(page1Text.Length, page2Text.Length);
double sim = maxLen == 0 ? 1.0
: 1.0 - (double)Math.Abs(page1Text.Length - page2Text.Length) / maxLen;
Console.WriteLine($"Page {i + 1} differs -- similarity: {sim:P}");
pageResults.Add((i + 1, sim));
}
}
Console.WriteLine($"\nTotal pages with differences: {pageResults.Count}");
Imports IronPdf
Imports System
Imports System.Collections.Generic
Dim pdf1 = PdfDocument.FromFile("document1.pdf")
Dim pdf2 = PdfDocument.FromFile("document2.pdf")
Dim maxPages As Integer = Math.Max(pdf1.PageCount, pdf2.PageCount)
Dim pageResults = New List(Of (Page As Integer, Similarity As Double))()
For i As Integer = 0 To maxPages - 1
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
Dim maxLen As Integer = Math.Max(page1Text.Length, page2Text.Length)
Dim sim As Double = If(maxLen = 0, 1.0, 1.0 - CDbl(Math.Abs(page1Text.Length - page2Text.Length)) / maxLen)
Console.WriteLine($"Page {i + 1} differs -- similarity: {sim:P}")
pageResults.Add((i + 1, sim))
End If
Next
Console.WriteLine($"\nTotal pages with differences: {pageResults.Count}")
Bu yöntem, her sayfada ExtractTextFromPage() kullanarak, içeriği bireysel olarak karşılaştırır. Yaklaşım, farklı sayfa sayısına sahip PDF'leri hatasız bir şekilde ele alır -- bir belgede bulunan ama diğerinde bulunmayan sayfalar boş dizgiler olarak ele alınır, bu da onları doğru bir şekilde farklı olarak kaydeder.
Sayfa sayfa karşılaştırma, büyük belgelerde değişiklik konumlarını kesin olarak belirlemeniz gerektiğinde özellikle kullanışlıdır. 200 sayfalık bir hukuki anlaşmayı incelemek yerine, gerçekten değişen beş sayfanın bir listesini elde edersiniz. Bu, inceleme süresini önemli ölçüde azaltır ve karşılaştırma çıktısını eyleme geçirilebilir hale getirir.
Büyük PDF'ler ile ilgili performans için IronPDF, parti karşılaştırmalarını verimli bir şekilde ele almak için asenkron işlem ve paralel işlemleri destekler. Performans optimizasyon kılavuzu, birbiri ardına birçok büyük dosyanın işlenmesi için bellek yönetimi stratejileri dahil olmak üzere büyük ölçekli işlemler için ek teknikleri kapsar.
Birden Fazla PDF Belgesini Aynı Anda Nasıl Karşılaştırırsınız?
IronPDF ile tek bir referans belgeye karşı toplu PDF karşılaştırması basittir. Aşağıdaki örnek, sağlanan ilk dosyaya karşı herhangi bir sayıdaki dosyayı karşılaştırır ve raporlama için sonuçları toplayarak:
using IronPdf;
using System;
using System.Collections.Generic;
using System.IO;
string[] pdfPaths = { "reference.pdf", "version1.pdf", "version2.pdf", "version3.pdf" };
if (pdfPaths.Length < 2)
{
Console.WriteLine("At least 2 PDFs required for comparison");
return;
}
var referencePdf = PdfDocument.FromFile(pdfPaths[0]);
string referenceText = referencePdf.ExtractAllText();
var results = new List<(string File, double Similarity, bool Identical)>();
for (int i = 1; i < pdfPaths.Length; i++)
{
try
{
var currentPdf = PdfDocument.FromFile(pdfPaths[i]);
string currentText = currentPdf.ExtractAllText();
bool identical = referenceText == currentText;
int maxLen = Math.Max(referenceText.Length, currentText.Length);
double similarity = maxLen == 0 ? 1.0
: 1.0 - (double)Math.Abs(referenceText.Length - currentText.Length) / maxLen;
results.Add((Path.GetFileName(pdfPaths[i]), similarity, identical));
string status = identical ? "identical to reference" : $"differs -- similarity: {similarity:P}";
Console.WriteLine($"{Path.GetFileName(pdfPaths[i])}: {status}");
}
catch (Exception ex)
{
Console.WriteLine($"Error processing {pdfPaths[i]}: {ex.Message}");
}
}
Console.WriteLine($"\nBatch complete: {results.Count} files compared");
Console.WriteLine($"Identical: {results.FindAll(r => r.Identical).Count}");
Console.WriteLine($"Different: {results.FindAll(r => !r.Identical).Count}");
using IronPdf;
using System;
using System.Collections.Generic;
using System.IO;
string[] pdfPaths = { "reference.pdf", "version1.pdf", "version2.pdf", "version3.pdf" };
if (pdfPaths.Length < 2)
{
Console.WriteLine("At least 2 PDFs required for comparison");
return;
}
var referencePdf = PdfDocument.FromFile(pdfPaths[0]);
string referenceText = referencePdf.ExtractAllText();
var results = new List<(string File, double Similarity, bool Identical)>();
for (int i = 1; i < pdfPaths.Length; i++)
{
try
{
var currentPdf = PdfDocument.FromFile(pdfPaths[i]);
string currentText = currentPdf.ExtractAllText();
bool identical = referenceText == currentText;
int maxLen = Math.Max(referenceText.Length, currentText.Length);
double similarity = maxLen == 0 ? 1.0
: 1.0 - (double)Math.Abs(referenceText.Length - currentText.Length) / maxLen;
results.Add((Path.GetFileName(pdfPaths[i]), similarity, identical));
string status = identical ? "identical to reference" : $"differs -- similarity: {similarity:P}";
Console.WriteLine($"{Path.GetFileName(pdfPaths[i])}: {status}");
}
catch (Exception ex)
{
Console.WriteLine($"Error processing {pdfPaths[i]}: {ex.Message}");
}
}
Console.WriteLine($"\nBatch complete: {results.Count} files compared");
Console.WriteLine($"Identical: {results.FindAll(r => r.Identical).Count}");
Console.WriteLine($"Different: {results.FindAll(r => !r.Identical).Count}");
Imports IronPdf
Imports System
Imports System.Collections.Generic
Imports System.IO
Module Module1
Sub Main()
Dim pdfPaths As String() = {"reference.pdf", "version1.pdf", "version2.pdf", "version3.pdf"}
If pdfPaths.Length < 2 Then
Console.WriteLine("At least 2 PDFs required for comparison")
Return
End If
Dim referencePdf = PdfDocument.FromFile(pdfPaths(0))
Dim referenceText As String = referencePdf.ExtractAllText()
Dim results As New List(Of (File As String, Similarity As Double, Identical As Boolean))()
For i As Integer = 1 To pdfPaths.Length - 1
Try
Dim currentPdf = PdfDocument.FromFile(pdfPaths(i))
Dim currentText As String = currentPdf.ExtractAllText()
Dim identical As Boolean = (referenceText = currentText)
Dim maxLen As Integer = Math.Max(referenceText.Length, currentText.Length)
Dim similarity As Double = If(maxLen = 0, 1.0, 1.0 - CDbl(Math.Abs(referenceText.Length - currentText.Length)) / maxLen)
results.Add((Path.GetFileName(pdfPaths(i)), similarity, identical))
Dim status As String = If(identical, "identical to reference", $"differs -- similarity: {similarity:P}")
Console.WriteLine($"{Path.GetFileName(pdfPaths(i))}: {status}")
Catch ex As Exception
Console.WriteLine($"Error processing {pdfPaths(i)}: {ex.Message}")
End Try
Next
Console.WriteLine($"\nBatch complete: {results.Count} files compared")
Console.WriteLine($"Identical: {results.FindAll(Function(r) r.Identical).Count}")
Console.WriteLine($"Different: {results.FindAll(Function(r) Not r.Identical).Count}")
End Sub
End Module
Bu yaklaşım, referans belgeyi bir kez yükler ve ardından her başka dosya ile karşılaştırarak döngü yapar. try/catch bloğu, bozulmuş veya erişilemez bir dosyanın tüm partiyi iptal etmesinin önüne geçer -- hata kaydedilir ve işleme bir sonraki dosya ile devam edilir.

Çok büyük partiler için, birden fazla PDF'deki metni paralel olarak yüklemek ve çıkarmak için asenkron görev modellerini kullanmayı düşünün. Referans bir belge seçerken, sürüm kontrolü senaryoları için en son onaylanmış sürümü veya kalite güvence iş akışları için beklenen çıktı şablonunu kullanın. PDF'lerde gömülü olan oluşturma tarihleri ve sürüm numaraları gibi PDF meta verilerini okuyarak referans seçimini de otomatikleştirebilirsiniz.
Parola Korumalı PDF'leri Nasıl Karşılaştırırsınız?
IronPDF, şifreli PDF'leri şifreyi doğrudan FromFile çağrısına kabul ederek işler. Dosyalari yuklemeden once harici olarak sifre cozmek gerekmez -- kutuphane kimlik doğrulamayi dahili olarak saglar. Kutuphane, 40 bit RC4, 128 bit RC4 ve 128 bit AES sifreleme standartlarini destekler:
using IronPdf;
using System;
try
{
// Load password-protected PDFs
var pdf1 = PdfDocument.FromFile("secure-document1.pdf", "password1");
var pdf2 = PdfDocument.FromFile("secure-document2.pdf", "password2");
Console.WriteLine($"PDF 1 loaded: {pdf1.PageCount} pages");
Console.WriteLine($"PDF 2 loaded: {pdf2.PageCount} pages");
string text1 = pdf1.ExtractAllText();
string text2 = pdf2.ExtractAllText();
bool identical = text1.Equals(text2);
int maxLen = Math.Max(text1.Length, text2.Length);
double similarity = maxLen == 0 ? 1.0
: 1.0 - (double)Math.Abs(text1.Length - text2.Length) / maxLen;
Console.WriteLine($"Documents are {(identical ? "identical" : "different")}");
Console.WriteLine($"Similarity: {similarity:P}");
// Optionally save a secured comparison report
if (!identical)
{
var renderer = new ChromePdfRenderer();
var reportPdf = renderer.RenderHtmlAsPdf(
$"<h1>Comparison Result</h1><p>Similarity: {similarity:P}</p>");
reportPdf.SecuritySettings.OwnerPassword = "report-owner-password";
reportPdf.SecuritySettings.UserPassword = "report-user-password";
reportPdf.SecuritySettings.AllowUserPrinting = true;
reportPdf.SecuritySettings.AllowUserCopyPasteContent = false;
reportPdf.SaveAs("comparison-report.pdf");
Console.WriteLine("Secured report saved.");
}
}
catch (Exception ex)
{
Console.WriteLine($"Error handling secured PDFs: {ex.Message}");
}
using IronPdf;
using System;
try
{
// Load password-protected PDFs
var pdf1 = PdfDocument.FromFile("secure-document1.pdf", "password1");
var pdf2 = PdfDocument.FromFile("secure-document2.pdf", "password2");
Console.WriteLine($"PDF 1 loaded: {pdf1.PageCount} pages");
Console.WriteLine($"PDF 2 loaded: {pdf2.PageCount} pages");
string text1 = pdf1.ExtractAllText();
string text2 = pdf2.ExtractAllText();
bool identical = text1.Equals(text2);
int maxLen = Math.Max(text1.Length, text2.Length);
double similarity = maxLen == 0 ? 1.0
: 1.0 - (double)Math.Abs(text1.Length - text2.Length) / maxLen;
Console.WriteLine($"Documents are {(identical ? "identical" : "different")}");
Console.WriteLine($"Similarity: {similarity:P}");
// Optionally save a secured comparison report
if (!identical)
{
var renderer = new ChromePdfRenderer();
var reportPdf = renderer.RenderHtmlAsPdf(
$"<h1>Comparison Result</h1><p>Similarity: {similarity:P}</p>");
reportPdf.SecuritySettings.OwnerPassword = "report-owner-password";
reportPdf.SecuritySettings.UserPassword = "report-user-password";
reportPdf.SecuritySettings.AllowUserPrinting = true;
reportPdf.SecuritySettings.AllowUserCopyPasteContent = false;
reportPdf.SaveAs("comparison-report.pdf");
Console.WriteLine("Secured report saved.");
}
}
catch (Exception ex)
{
Console.WriteLine($"Error handling secured PDFs: {ex.Message}");
}
Imports IronPdf
Imports System
Try
' Load password-protected PDFs
Dim pdf1 = PdfDocument.FromFile("secure-document1.pdf", "password1")
Dim pdf2 = PdfDocument.FromFile("secure-document2.pdf", "password2")
Console.WriteLine($"PDF 1 loaded: {pdf1.PageCount} pages")
Console.WriteLine($"PDF 2 loaded: {pdf2.PageCount} pages")
Dim text1 As String = pdf1.ExtractAllText()
Dim text2 As String = pdf2.ExtractAllText()
Dim identical As Boolean = text1.Equals(text2)
Dim maxLen As Integer = Math.Max(text1.Length, text2.Length)
Dim similarity As Double = If(maxLen = 0, 1.0, 1.0 - CDbl(Math.Abs(text1.Length - text2.Length)) / maxLen)
Console.WriteLine($"Documents are {(If(identical, "identical", "different"))}")
Console.WriteLine($"Similarity: {similarity:P}")
' Optionally save a secured comparison report
If Not identical Then
Dim renderer = New ChromePdfRenderer()
Dim reportPdf = renderer.RenderHtmlAsPdf($"<h1>Comparison Result</h1><p>Similarity: {similarity:P}</p>")
reportPdf.SecuritySettings.OwnerPassword = "report-owner-password"
reportPdf.SecuritySettings.UserPassword = "report-user-password"
reportPdf.SecuritySettings.AllowUserPrinting = True
reportPdf.SecuritySettings.AllowUserCopyPasteContent = False
reportPdf.SaveAs("comparison-report.pdf")
Console.WriteLine("Secured report saved.")
End If
Catch ex As Exception
Console.WriteLine($"Error handling secured PDFs: {ex.Message}")
End Try
FromFile'a şifreleri geçirerek, önceden şifresizleştirme adımı olmaksızın şifreli PDF'leri karşılaştırabilirsiniz. IronPDF'nin güvenlik özellikleri, korunan içeriğin düzgün şekilde işlenmesini sağlar ve dijital imzalar belge otantisite doğrulamasına ek bir katman ekler.
Sifre ile korunan PDF'lerle calisirken, kimlik bilgilerini kaynak kodunda sert bir sekilde kodlamak yerine, ortam degiskenlerinde veya bir gizli yoneticisinde saklayin. Hassas bilgileri dislayan kayıt uygulamalari gerceklestirin ve kaba kuvvet senaryolarini onlemek icin girisim sinirlariyla tekrar deneme mantigi ekleyin. Gelişmiş sifreleme ihtiyaçlari icin PDF/UA uyumluluk rehberi, erisilebilirlik uyumlu guvenlik konfigürasyonlarini kapsar.
PDF Karsilastirma Raporu Nasıl Uretilir?
Biçimlendirilen bir rapor, taraflilara iki belgede nelerin degistigini net bir sekilde gösterir. Asagidaki örnek, IronPDF'nin HTML'den PDF'e donusumunu kullanarak sayfa basi fark metrikleriyle stilize edilmis bir rapor uretir:
using IronPdf;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var differences = new List<(int Page, double Similarity, int Len1, int Len2, int CharDiff)>();
int totalPages = Math.Max(pdf1.PageCount, pdf2.PageCount);
for (int i = 0; i < totalPages; i++)
{
string p1 = i < pdf1.PageCount ? pdf1.ExtractTextFromPage(i) ?? "" : "";
string p2 = i < pdf2.PageCount ? pdf2.ExtractTextFromPage(i) ?? "" : "";
if (p1 == p2) continue;
int maxLen = Math.Max(p1.Length, p2.Length);
double sim = maxLen == 0 ? 1.0 : 1.0 - (double)Math.Abs(p1.Length - p2.Length) / maxLen;
int charDiff = Math.Abs(p1.Length - p2.Length);
differences.Add((i + 1, sim, p1.Length, p2.Length, charDiff));
}
// Build HTML report
var sb = new StringBuilder();
sb.Append(@"<html><head><style>
body { font-family: Arial, sans-serif; margin: 20px; }
h1 { color: #333; border-bottom: 2px solid #4CAF50; }
.summary { background: #f0f0f0; padding: 15px; border-radius: 5px; margin-bottom: 20px; }
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background: #4CAF50; color: white; }
.ok { background: #c8e6c9; padding: 15px; border-radius: 5px; }
</style></head><body>");
sb.Append("<h1>PDF Comparison Report</h1>");
sb.Append("<div class='summary'>");
sb.Append($"<p><strong>File 1:</strong> {Path.GetFileName("document1.pdf")}</p>");
sb.Append($"<p><strong>File 2:</strong> {Path.GetFileName("document2.pdf")}</p>");
sb.Append($"<p><strong>Pages with differences:</strong> {differences.Count} of {totalPages}</p>");
sb.Append($"<p><strong>Generated:</strong> {DateTime.Now:yyyy-MM-dd HH:mm:ss}</p>");
sb.Append("</div>");
if (differences.Count > 0)
{
sb.Append("<table><thead><tr><th>Page</th><th>Similarity</th><th>File 1 Length</th><th>File 2 Length</th><th>Char Diff</th></tr></thead><tbody>");
foreach (var d in differences)
{
sb.Append($"<tr><td>{d.Page}</td><td>{d.Similarity:P}</td><td>{d.Len1}</td><td>{d.Len2}</td><td>{d.CharDiff}</td></tr>");
}
sb.Append("</tbody></table>");
}
else
{
sb.Append("<p class='ok'>No differences detected -- files are identical.</p>");
}
sb.Append("</body></html>");
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
var reportPdf = renderer.RenderHtmlAsPdf(sb.ToString());
reportPdf.MetaData.Author = "PDF Comparison Tool";
reportPdf.MetaData.Title = "PDF Comparison Report";
reportPdf.MetaData.CreationDate = DateTime.Now;
reportPdf.SaveAs("comparison-report.pdf");
Console.WriteLine("Report saved to comparison-report.pdf");
using IronPdf;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var differences = new List<(int Page, double Similarity, int Len1, int Len2, int CharDiff)>();
int totalPages = Math.Max(pdf1.PageCount, pdf2.PageCount);
for (int i = 0; i < totalPages; i++)
{
string p1 = i < pdf1.PageCount ? pdf1.ExtractTextFromPage(i) ?? "" : "";
string p2 = i < pdf2.PageCount ? pdf2.ExtractTextFromPage(i) ?? "" : "";
if (p1 == p2) continue;
int maxLen = Math.Max(p1.Length, p2.Length);
double sim = maxLen == 0 ? 1.0 : 1.0 - (double)Math.Abs(p1.Length - p2.Length) / maxLen;
int charDiff = Math.Abs(p1.Length - p2.Length);
differences.Add((i + 1, sim, p1.Length, p2.Length, charDiff));
}
// Build HTML report
var sb = new StringBuilder();
sb.Append(@"<html><head><style>
body { font-family: Arial, sans-serif; margin: 20px; }
h1 { color: #333; border-bottom: 2px solid #4CAF50; }
.summary { background: #f0f0f0; padding: 15px; border-radius: 5px; margin-bottom: 20px; }
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background: #4CAF50; color: white; }
.ok { background: #c8e6c9; padding: 15px; border-radius: 5px; }
</style></head><body>");
sb.Append("<h1>PDF Comparison Report</h1>");
sb.Append("<div class='summary'>");
sb.Append($"<p><strong>File 1:</strong> {Path.GetFileName("document1.pdf")}</p>");
sb.Append($"<p><strong>File 2:</strong> {Path.GetFileName("document2.pdf")}</p>");
sb.Append($"<p><strong>Pages with differences:</strong> {differences.Count} of {totalPages}</p>");
sb.Append($"<p><strong>Generated:</strong> {DateTime.Now:yyyy-MM-dd HH:mm:ss}</p>");
sb.Append("</div>");
if (differences.Count > 0)
{
sb.Append("<table><thead><tr><th>Page</th><th>Similarity</th><th>File 1 Length</th><th>File 2 Length</th><th>Char Diff</th></tr></thead><tbody>");
foreach (var d in differences)
{
sb.Append($"<tr><td>{d.Page}</td><td>{d.Similarity:P}</td><td>{d.Len1}</td><td>{d.Len2}</td><td>{d.CharDiff}</td></tr>");
}
sb.Append("</tbody></table>");
}
else
{
sb.Append("<p class='ok'>No differences detected -- files are identical.</p>");
}
sb.Append("</body></html>");
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
var reportPdf = renderer.RenderHtmlAsPdf(sb.ToString());
reportPdf.MetaData.Author = "PDF Comparison Tool";
reportPdf.MetaData.Title = "PDF Comparison Report";
reportPdf.MetaData.CreationDate = DateTime.Now;
reportPdf.SaveAs("comparison-report.pdf");
Console.WriteLine("Report saved to comparison-report.pdf");
Imports IronPdf
Imports System
Imports System.Collections.Generic
Imports System.IO
Imports System.Text
Dim pdf1 = PdfDocument.FromFile("document1.pdf")
Dim pdf2 = PdfDocument.FromFile("document2.pdf")
Dim differences = New List(Of (Page As Integer, Similarity As Double, Len1 As Integer, Len2 As Integer, CharDiff As Integer))()
Dim totalPages As Integer = Math.Max(pdf1.PageCount, pdf2.PageCount)
For i As Integer = 0 To totalPages - 1
Dim p1 As String = If(i < pdf1.PageCount, pdf1.ExtractTextFromPage(i), "")
Dim p2 As String = If(i < pdf2.PageCount, pdf2.ExtractTextFromPage(i), "")
If p1 = p2 Then Continue For
Dim maxLen As Integer = Math.Max(p1.Length, p2.Length)
Dim sim As Double = If(maxLen = 0, 1.0, 1.0 - CDbl(Math.Abs(p1.Length - p2.Length)) / maxLen)
Dim charDiff As Integer = Math.Abs(p1.Length - p2.Length)
differences.Add((i + 1, sim, p1.Length, p2.Length, charDiff))
Next
' Build HTML report
Dim sb = New StringBuilder()
sb.Append("<html><head><style>
body { font-family: Arial, sans-serif; margin: 20px; }
h1 { color: #333; border-bottom: 2px solid #4CAF50; }
.summary { background: #f0f0f0; padding: 15px; border-radius: 5px; margin-bottom: 20px; }
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background: #4CAF50; color: white; }
.ok { background: #c8e6c9; padding: 15px; border-radius: 5px; }
</style></head><body>")
sb.Append("<h1>PDF Comparison Report</h1>")
sb.Append("<div class='summary'>")
sb.Append($"<p><strong>File 1:</strong> {Path.GetFileName("document1.pdf")}</p>")
sb.Append($"<p><strong>File 2:</strong> {Path.GetFileName("document2.pdf")}</p>")
sb.Append($"<p><strong>Pages with differences:</strong> {differences.Count} of {totalPages}</p>")
sb.Append($"<p><strong>Generated:</strong> {DateTime.Now:yyyy-MM-dd HH:mm:ss}</p>")
sb.Append("</div>")
If differences.Count > 0 Then
sb.Append("<table><thead><tr><th>Page</th><th>Similarity</th><th>File 1 Length</th><th>File 2 Length</th><th>Char Diff</th></tr></thead><tbody>")
For Each d In differences
sb.Append($"<tr><td>{d.Page}</td><td>{d.Similarity:P}</td><td>{d.Len1}</td><td>{d.Len2}</td><td>{d.CharDiff}</td></tr>")
Next
sb.Append("</tbody></table>")
Else
sb.Append("<p class='ok'>No differences detected -- files are identical.</p>")
End If
sb.Append("</body></html>")
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.MarginTop = 25
renderer.RenderingOptions.MarginBottom = 25
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
Dim reportPdf = renderer.RenderHtmlAsPdf(sb.ToString())
reportPdf.MetaData.Author = "PDF Comparison Tool"
reportPdf.MetaData.Title = "PDF Comparison Report"
reportPdf.MetaData.CreationDate = DateTime.Now
reportPdf.SaveAs("comparison-report.pdf")
Console.WriteLine("Report saved to comparison-report.pdf")
Bu cozum, HTML renderlama kullanarak ozellestirilmis stil ile profesyonel raporlar oluşturur. IronPDF'nin CSS destegi, tam ozellestirme sunar -- kurumsal markalama ile eslesecek sekilde fontlari, renkleri ve düzenleri ayarlayin. Basliklar ve altbilgiler sayfa numaralari ve zaman damgalariyla resmi doküman is akislari icin ekleyin.

Oluşturulan rapor, farkların net bir özetini ayrıntılı sayfa başına metriklerle sağlar. Raporu, benzerlik puanları için görsel grafikler, değişen alanları gösteren sayfa küçük resimleri ve uzun raporlarda kolay gezinme için yer imleri içerecek şekilde genişletebilirsiniz. Arşiv sınıfı raporlar için, IronPDF PDF/A formatını destekler ve belgelerin uzun süreli okunabilirliğini ve belgelerin saklama düzenlemeleri ile uyumunu sağlar.
PDF Karsilastirma icin En Iyi Uygulamalar Nelerdir?
Üretime bir PDF karşılaştırma özelliği sunmadan önce, birkaç desen, kırılgan bir prototip ile güvenilir bir araç arasındaki farkı yaratır:
Null ve boş metni nazikçe işleyin. ExtractAllText() yalnızca görüntü içeren PDF'ler veya metin katmanı olmayan taranmış belgeler için boş bir dize döndürebilir. Karsilastirma mantigini calistirmadan once daima bos sonuclari kontrol edin ve bos ile bos arasındaki farkların "ayni" mi yoksa "belirsiz" mi sayilacagina karar verin.
Karşılaştırmadan önce metni normalleştirin. Farklı PDF üreticileri, aynı görsel içerik için biraz farklı boşluk deseni, satır sonları veya Unicode normalleştirmesi üretebilir. Karşılaştırmadan önce text.Trim().Replace("\r\n", "\n") çalıştırmak, tamamen kozmetik farklılıklardan kaynaklanan yanlış pozitifleri önler.
Is akislari icin tam eslesmeler yerine benzerlik esiklerlerini kullanin. %98 benzerlik skoru, bir dokümanın biraz farklı bir zaman damgasına veya otomatik oluşturulmuş bir Kimliğe sahip olsa bile, fonksiyonel olarak aynı oldugunu gösterir. Alanınız için uygun bir eşik tanımlayın ve tam karakter eşitliği gerektirmeyin.
Karsilastirma sonuclarini dosya meta verileriyle kaydedin. Dosya adlari, boyutlari, değiştirilme tarihleri ve benzerlik uzmanliklarini yapılandırilmis bir kayitta saklayin. Bu, uyumluluk ekiplerinin karşılaştırmayı yeniden çalıştırmadan inceleyebileceği bir denetim izi oluşturur.
Şifreleme ve font konularını dikkate alın. Bazı PDF dosyaları, metin katmanları için özel kodlama tabloları kullanır. IronPDF'nin Chrome tabanlı motoru, çoğu durumu doğru şekilde işler, ancak anlaşılmaz bir metin çıktısı goruyorsaniz, kaynak PDF'nin standart dışı bir font kodlamasi kullanip kullanmadigini kontrol edin. hata ayiklama rehberi, yaygın çıkarma sorunlarını ve çözümlerini kapsar.
Üretim belgesi karşilastirma boru hatlari oluşturan ekipler icin, Microsoft'un .NET'teki eşzamansız desenler üzerine belgeleri, paralel dosya işleme yapisinin yapılandırilmasina dair faydali rehberlik saglar. PDF spesifikasyonu (ISO 32000), ayrica bir belge metin katmaninda ne tür içeriklerin görünüp görünemeyeceğini anlamaniz gerektiginde degerlendirmeye değer.
Bugun PDF Karsilastirmasına Nasıl Başlanır?
C#'de PDF karşılaştırma, birçok sektörde belge otomasyonunu açan pratik bir beceridir -- ve IronPDF, bunu herhangi bir .NET geliştiricisine erişilebilir kılar. Temel metin çıkarma örneğiyle başlayın, gerektiğinde sayfa sayfa analize genişletin ve pay sahiplerine profesyonel çıktı sunmak icin HTML rapor ureticisini kullanın.
| Senaryo | Yaklaşım | Anahtar Yöntem |
|---|---|---|
| Temel metin karşılaştırması | Her iki belgede tam metni cikar ve dizelgeyi karşılaştır | ExtractAllText() |
| Sayfa sayfa analiz | Değişiklik konumlarini belirlemek icin her sayfayı tek tek karşılaştırın | ExtractTextFromPage() |
| Toplu karşılaştırma | Birden fazla dosyayı tek bir referans belgelerine karşı karşılaştırın | PdfDocument.FromFile() |
| Parolayla korunan dosyalar | Sifreyi doğrudan dosya yükleyicisine geçin -- ön şifre çözme gerekmez | PdfDocument.FromFile(path, password) |
| Rapor üretimi | HTML karşılaştırma özetini stilize edilmiş PDF on rapora cevirin | ChromePdfRenderer.RenderHtmlAsPdf() |

30 günlük deneme icin kredi karti gerekmeden aninda IronPDF ile calismaya başlayin -- hemen icin ücretsiz deneme indirin. başlangıç kılavuzu ilk kurulumu beş dakikadan daha kısa sürede yönetir. Üretime hazır olduğunuzda, lisanslama sayfasini ekip büyüklüğünüze ve dağıtım gereksinimlerinize uygun seçenekleri gözden geçirin.
Daha derin bir öğrenim için, PDF oluşturma, düzenleme ve işleme işlemlerini kapsayan tam eğitim serisini keşfedin. API referansı ayrıntılı yöntem belgeleri sağlar ve örnekler bölümü form işleme ve filigranlama dahil olmak üzere gerçek dünya gerçekleştirimlerini göstermektedir.

Sıkça Sorulan Sorular
C# kullanarak iki PDF dosyasini nasıl karsilastirabilirim?
IronPDF'in güçlü PDF karsilastirma özelligini kullanarak, iki PDF belge arasinda metin, görüntü ve düzen farkliliklarini tanilamanizi saglayan PDF dosyalarini C# kullanarak karsilastirabilirsiniz.
IronPDF'i PDF karsilastirmasi için kullanmanin faydalari nelerdir?
IronPDF, PDF dosyalarini karsilastirmak için basit ve verimli bir yol sunarak farkliliklarin doğru bir şekilde tespit edilmesini saglar. C# projeleriyle sorunsuz entegre olur ve çeşitli karsilastirma modlarini destekler.
IronPDF, büyük PDF dosyalarini karsilastirma için yönetebilir mi?
Evet, IronPDF, performanstan odun vermeden genis belgeleri karsilastirmak için büyük PDF dosyalarini verimli bir şekilde yönetmek uzere tasarlanmistir.
IronPDF, PDF'lerin gorunur karsilastirilmasini destekliyor mu?
IronPDF, belgeler arasindaki değişikliklerin kapsamli bir gorunumunu saglayarak düzen ve görüntülerdeki farklari vurgulamak suretiyle PDF'lerin gorunur karsilastirilmasina izin verir.
IronPDF'i kullanarak PDF karsilastirmasini otomatize etmek mumkun mu?
Evet, IronPDF'i C# uygulamalarinizda kullanarak, sık veya toplu karsilastirmalar gerektiren senaryolar için ideal olan PDF karsilastirma süreçlerini otomatiklestirebilirsiniz.
IronPDF, PDF dosyalarinda hangi farklilik turlerini tespit edebilir?
IronPDF, metin, grafik ve düzen farkliliklarini tespit edebilir, bu sayede PDF dosyalarinin tüm iceriğinin ayrintili bir karsilastirmasini saglar.
IronPDF, PDF karsilastirmasinda doğrulugu nasıl saglar?
IronPDF, PDF icerigini dikkatlice karsilastirmak için gelişmiş algoritmalar kullanarak gorunmez farkliliklarin gozden kacma riskini en aza indirir.
IronPDF, PDF karsilastirma için diğer .NET uygulamalariyla entegre olabilir mi?
Evet, IronPDF, PDF karsilastirma işlevselliginin mevcut yazılım çözümlerinize katilmasine imkan tanıyarak .NET uygulamalariyla sorunsuz entegre olacak şekilde tasarlanmistir.
IronPDF'i kullanmak için PDF karsilastirmasina dair onceden bir deneyime ihtiyaçim var mi?
Önceden bir deneyime gerek yoktur. IronPDF, kullanıcılara PDF manipulasyonu konusunda yeni olsalar bile, PDF'leri karşilastirma sürecinde size rehberlik edecek kullanıcı dostu araçlar ve kapsamlı dokümantasyon sağlar.
IronPDF'in PDF karsilastirma özelligi için demo veya deneme sürümu var mi?
Evet, IronPDF, satın almadan önce PDF karsilastirma özelliklerini kesfetmenize ve test etmenize olanak tanıyan ücretsiz bir deneme sürümu sunar.




