JPEG'yi PDF'ye Dönüştürun .NET | IronPDF C# Eğitmeni
IronPDF, C# geliştiricilerine, metin içeriğini çıkararak ve sayfasayfa farklılıkları analiz ederek PDF belgelerini programlı olarak karşılaştırmanın basit bir yolunu sunar. Bu eğitim, temel karşılaştırmalar, çoklu belge analizi, şifre korumalı dosya işleme ve .NET 10'da biçimlendirilmiş karşılaştırma raporları oluşturma için pratik kod örnekleri sunar.
Neden PDF Belgelerini Programlı Olarak Karşılaştırmanız Gerekir?
PDF belgelerini elle karşılaştırmak yavaş, hata eğilimli ve ölçeklenmez. Hukuk, mali, ve sağlık gibi belge ağırlıklı sektörlerde, dosyalar sürekli değişir -- sözleşmeler revize edilir, faturalar yeniden düzenlenir ve düzenleyici dosyalar sürüm doğrulaması gerektirir. Otomatik karşılaştırma, insan darboğazını ortadan kaldırır ve her seferinde tutarlı, denetlenebilir sonuçlar sağlar.
IronPDF, C#'da iki PDF dosyasını karşılaştırmanız için üretime hazır bir yaklaşım sunar. Kütüphane, Chrome render motoru kullanarak karmaşık düzenlerden doğru metin çıkarımı yapar ve tam API'si, PDF içeriğini yükleme, okuma ve analiz etme konusunda sezgisel yöntemler sunar. Sözleşme değişikliklerini izleme, oluşturulan çıktıları doğrulama veya bir belge denetim sistemi oluşturma konularında, IronPDF ağır işleri üstlenir.
Kütüphane ayrıca çoklu platformlarda zaten .NET kullanan ekipler için sağlam bir seçimdir. Windows, Linux, macOS, Docker, Azure ve AWS'yi destekler ve her hedef için farklı kod yolları gerektirmez. Bu, karşılaştırma araçlarını CI/CD boru hatlarında ve masaüstü uygulamalarında çalıştırmak için pratiktir.

Otomatik PDF Karşılaştırması Ne Zaman Kullanılmalıdır?
Otomatik karşılaştırma, belge ağırlıklı iş akışlarında sürüm kontrolüyle uğraşırken gerekli hale gelir. Günlük yüzlerce dosya işliyorsanız veya hassasiyet kritikse manuel inceleme pratik değildir. Yaygın senaryolar arasında fatura döngülerinde faturaların karşılaştırılması, onaylı şablonlarla düzenleyici dosyaların doğrulanması, sürüm sürümleri boyunca teknik spesifikasyonlardaki değişikliklerin izlenmesi ve hukuki iş akışlarında sözleşme değişikliklerinin denetlenmesi yer alır.
Doğruluk kazanımları önemli ölçüde artar. Mali bir tabloda değiştirilmiş tek bir sayıyı gözden kaçırması olası olan bir insan inceleyici, iki 50 sayfalık belgeyi tararken yorulmadan ve tutarlılıksız bir şekilde fark etmeyebilir. Bir otomatik karşılaştırma, bunu anında yakalar, sayfayı işaretler ve yorgunluk veya tutarlılık eksikliği olmadan bir fark raporu üretir.
Başlıca Kullanım Durumları Nelerdir?
PDF karşılaştırması, birçok endüstri ve iş akışında uygulama bulur:
- Hukuki: Sözleşme değişikliklerini izleme, taslak ve nihai sürümler arasında uyumluluğu doğrulama ve imzalamadan önce yalnızca onaylı değişikliklerin yapıldığını doğrulama.
- Mali: Banka ekstrelerini doğrulama, faturalardaki yetkisiz değişiklikleri yakalama ve oluşturulan raporların beklenen çıktılarla eşleştiğini doğrulama.
- Sağlık: Düzenleyici başvuruların onaylı belgelerle eşleştiğini doğrulama ve hasta kayıtlarının değiştirilmediğinden emin olma.
- Kalite güvencesi: Yazılım tarafından üretilen PDF'leri altın master dosyalarla karşılaştırarak otomatik test paketlerinde render gerilemelerini yakalama.
- Dokümantasyon: Kullanıcı kılavuzlarının yerelleştirilmiş sürümleri arasında tutarlılığı doğrulama ve çevirinin teknik içeriği değiştirmediğinden emin olma.
IronPDF'deki çapraz platform desteği, bu çözümleri Windows, Linux ve bulut ortamlarında değişiklik yapmadan dağıtılabilir hale getirir.
IronPDF bir .NET Projesine Nasıl Yüklenir?
IronPDF'yi, Paket Yöneticisi Konsolu veya .NET CLI kullanarak NuGet üzerinden yükleyin:
Install-Package IronPdf

Linux dağıtımları veya Docker tabanlı ortamlar için platforma özgü dökümantasyona bakın. Yüklendikten sonra, lisans anahtarınız varsa yapılandırın:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Lisans anahtarı olmadan da geliştirme ve test çalışabilir, ancak oluşturulan PDF'lerde filigranlar görünecektir. Üretim dağıtımları için lisanslama sayfasından geçerli bir lisans gereklidir. Ücretsiz deneme, kredi kartı gerektirmeden 30 günlük değerlendirme için tam işlevsellik sağlar.

IronPDF, .NET Framework 4.6.2+, .NET Core 3.1+ ve .NET 5'ten .NET 10'a kadar destekler. macOS için hem Intel hem de Apple Silicon işlemciler desteklenir. Kütüphane, Chrome render motorunun kurulumunu otomatik olarak ele alır, bu nedenle manuel tarayıcı kurulumu gerekmez.
Temel Bir PDF Karşılaştırmasını Nasıl Gerçekleştirirsiniz?
PDF karşılaştırmanın temeli, metin içeriğini çıkarma ve karşılaştırmadır. IronPDF'nin metin çıkarma yetenekleri, çok sütunlu belgeler, tablolar, formlar ve gömülü metin katmanları olan 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 dosyayı yükler, metinlerini çıkarır ve bir benzerlik oranını 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 dosyanın da tam metnini almak için üst düzey ifadeleri ve IronPDF'in ExtractAllText() metodunu kullanır, ardından benzerlik yüzdesini hesaplamak için karakter düzeyinde bir karşılaştırma yapar. Skor, belgelerin ne kadar farklı olduğunu hızlı ve nicel bir ölçü vermektedir.
Karakter düzeyindeki yaklaşım kasıtlı olarak basit ve hızlıdır. İki belgenin farklılaşıp farklılaşmadığı konusunda hızlı bir sinyal gerektiğinde iyi çalışır; örneğin yanlışlıkla üzerine yazmaları tespit ederken ya da bir dönüştürme hattının beklenen çıktıyı ürettiğini doğrularken. Daha ayrıntılı analiz gerektiğinde -- hangi cümlelerin değiştiğini belirlemek veya anlamsal farkları izlemek gibi -- @Levenshtein mesafesi veya diff algotmaları gibi algoritmaları çıkarılan metin dizgilerinin üzerine katmanlayabilirsiniz.
Giriş 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österilen %2,60 benzerlik puanı, iki belgenin neredeyse tamamen farklı içeriğe sahip olduğunu gösterir. Bu metrik, farklılık derecesini hızla değerlendirmek ve sonraki adımlar hakkında karar vermek için size yardımcı olur.
Sadece Metin Karşılaştırmasının Sınırları Nelerdir?
Sadece metin karşılaştırması, biçimlendirme, görüntüler veya düzen farklılıklarını yakalamaz. İki PDF aynı metne sahip olabilir, ancak biri farklı bir yazı tipi, sayfa boyutu veya resim yerleşimi içeriyorsa tamamen farklı görünebilir. Tam görsel karşılaştırma için, IronPDF'nin resim çıkarma yeteneklerini bir resim karşılaştırma kütüphanesi ile birleştirmeyi düşünün. IronPDF'nin rasterizasyon özellikleri, sayfaları grafik doğruluğun metin içeriğinden daha önemli olduğu durumlarda, piksel bazında karşılaştırma için görüntülere dönüştürür.
PDF'leri Sayfa Başı Karşılaştırma Nasıl Yapılır?
Tüm belge karşılaştırması, iki PDF'nin farkı olup olmadığını söyler, ancak sayfa sayfa karşılaştırma, tam olarak nerede farklı olduklarını gösterir. Bu, içerik sayfalar arasında belirli bir düzeni izleyen raporlar, faturalar ve 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, ExtractTextFromPage() kullanılarak her sayfa üzerinden geçer ve içeriği bireysel olarak karşılaştırır. Yaklaşım, hata yapmadan farklı sayfa sayısına sahip PDF'leri ele alır -- bir belgede var olan sayfalar ama diğerinde olmayanlar boş dizgi olarak ele alınır ve bunları doğru şekilde farklı olarak kaydeder.
Sayfa sayfa karşılaştırma, büyük belgelerde değişiklik yerlerini belirlemek gerektiğinde özellikle kullanışlıdır. 200 sayfalık bir yasal anlaşmanın tamamını gözden geçirmek yerine, aslında değişen beş sayfanın bir listesini alırsınız. Bu, inceleme süresini büyük ölçüde azaltır ve karşılaştırma çıktısının eyleme geçirilebilir hale gelmesini sağlar.
Büyük PDF'ler için performans açısından, IronPDF, yığın karşılaştırmaları verimli bir şekilde yönetmek için asenkron işlem ve paralel işlemleri destekler. Performans optimizasyon kılavuzu, büyük ölçekli operasyonlar için, ardışık olarak birçok büyük dosyayı işlemek için bellek yönetimi stratejileri gibi ek teknikleri kapsar.
Birden Fazla PDF Dosyasını Aynı Anda Nasıl Karşılaştırırsınız?
IronPDF ile tek referans belgeyle toplu PDF karşılaştırması basittir. Aşağıdaki örnek, sağlanan ilk dosyaya karşı herhangi bir sayıda dosyayı karşılaştırır ve sonuçları raporlama için toplar:
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, ardından her dosya üzerinden yineleyerek karşılaştırma yapar. try/catch bloğu, bozuk veya erişilemeyen bir dosyanın tüm yığını durdurmadığını garanti eder -- hata günlüğe kaydedilir ve işleme sonraki dosya ile devam edilir.

Çok büyük yığınlar için, paralel olarak birden fazla PDF'den metin yükleme ve çıkarma işlemi yapmak için asenkron görev düzenlerini kullanmayı düşünün. Referans belgeli belgeyi seçerken, sürüm kontrol senaryoları için en son onaylanmış sürümü kullanın veya kalite güvencesi iş akışları için beklenen çıktı şablonunu kullanın. Belge yazarlarının kendilerine gömülü tarih, zamanlar ve versiyon numaraları gibi PDF meta verilerini okuyarak referans seçimini otomatikleştirebilirsiniz.
Parola Korunmaktadır PDF Nasıl Karşılaştırılır?
IronPDF, şifreli PDF'leri, şifreyi doğrudan FromFile çağrısında kabul ederek işler. Dosyaları harici olarak şifrelerinden çözmeye gerek yoktur -- kütüphane kimlik doğrulamasını dahili olarak ele alır. Kütüphane, 40-bit RC4, 128-bit RC4 ve 128-bit AES şifreleme standartlarını 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, herhangi bir önceden şifre çözme adımı olmadan şifreli PDF'leri karşılaştırabilirsiniz. IronPDF'in güvenlik özellikleri korunan içeriğin uygun şekilde ele alınmasını sağlar, ayrıca dijital imzalar belge özgünlüğü doğrulamasına ek bir katman ekler.
Parola korumalı PDF'leri işlediğinizde, kimlik bilgilerini çevre değişkenlerinde veya bir gizli yönetim sisteminde saklayın, kaynak koduna sert kodlamayın. Hassas bilgileri dışlayan günlük uygulama tutumları benimseyerek ve deneme limitleri olan yeniden deneme mantığı ekleyerek kaba kuvvet senaryolarını önleyin. Gelişmiş şifreleme ihtiyaçları için, PDF/UA uyumluluk kılavuzu, erişilebilirlik uyumlu güvenlik yapılandırmalarını kapsar.
Bir PDF Karşılaştırma Raporunu Nasıl Üretilirsiniz?
Formatlı bir rapor, paydaşlara belgeler arasında neyin değiştiğini açıkça gösterir. Aşağıdaki örnek, IronPDF'nın HTML'den PDF'ye dönüşümünü kullanarak, sayfa başı fark metrikleriyle stilize edilmiş bir rapor üretir:
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 çözüm, profesyonel raporlar oluşturmak için HTML renderı kullanır; özel stil ile. IronPDF'nin CSS desteği, tam özelleştirme sağlar -- yazı tiplerini, renkleri ve düzenleri, kurumsal markalamaya uyacak şekilde ayarlayın. Sayfa sayıları ve zaman damgaları ile başlıklar ve altbilgiler ekleyin formal belge iş akışları için.

Oluşturulan rapor, detaylı sayfa başı metriklerle farklılıkların net bir özetini sağlar. Raporu benzerlik skorları için görsel grafikler, değişen alanları gösteren sayfa minyatürleri ve uzun raporlarda kolay gezinme için yer imleri eklemek üzere genişletebilirsiniz. Arşiv sınıfındaki raporlar için, IronPDF, PDF/A formatı destekler, belgelerin uzun süreli okunabilirliğini ve belge saklama düzenlemelere uygunluğunu sağlamaktadır.
.NET'te PDF Karşılaştırması için En İyi Uygulamalar Nelerdir?
Üretime PDF karşılaştırma özelliğini gönderirken, birkaç desen, kırılgan bir prototip ile güvenilir bir araç arasındaki farkı oluşturur:
Boş ve geçersiz metni nazikçe ele alın. ExtractAllText() yalnızca resim içeren PDF'ler veya bir metin katmanı olmayan taranmış belgeler için boş bir dize döndürebilir. Karşılaştırma mantığı çalışmadan önce her zaman boş sonuçları kontrol edin ve boş vs. boş 'aynı' veya 'belirsiz' olarak değerlendirilip değerlendirilmeyeceğini kararlaştırın.
Karşılaştırmadan önce metni normalleştirin. Farklı PDF üreticileri, aynı görsel içerik için biraz farklı boşluk desenleri, satır sonları veya Unicode normalizasyonu üretebilir. Karşılaştırmadan önce text.Trim().Replace("\r\n", "\n") çalıştırmak, yalnızca kozmetik farklılıklardan kaynaklanan yanlış pozitif sonuçları önler.
İş akışları için tam eşleşmeler yerine benzerlik eşiklerini kullanın. %98 benzerlik puanı, iki belgenin neredeyse işlevsel olarak aynı olduğunu büyük olasılıkla gösterir, biri biraz farklı bir zaman damgasına veya otomatik olarak oluşturulmuş bir kimliğe sahip olsa bile. Tam karakter eşitliği gerektirmek yerine, alanınıza uygun bir eşik değeri tanımlayın.
Dosya meta verileri ile karşılaştırma sonuçlarını günlüğe kaydedin. Dosya adlarını, boyutlarını, değiştirme tarihlerini ve benzerlik puanlarını yapılandırılmış bir günlüğe kaydedin. Bu, uyum ekiplerinin karşılaştırmayı yeniden çalıştırmadan inceleyebileceği bir denetim izi oluşturur.
Kodlama ve yazı tipi sorunlarını göz önünde bulundurun. Bazı PDF dosyaları, metin katmanları için özel kodlama tabloları kullanır. IronPDF'nin Chrome tabanlı motoru çoğu durumu doğru şekilde ele alır, ancak bozuk metin çıktısı görürseniz, kaynak PDF'nin standart olmayan bir yazı tipi kodlaması kullanıp kullanmadığını kontrol edin. Sorun giderme kılavuzu, yaygın çıkarım sorunlarını ve bunların çözümlerini kapsar.
Üretim belgeleri karşılaştırma hatları oluşturulan ekipler için, .NET'te asenkron desenler hakkında Microsoft dokümantasyonu, paralel dosya işleme yapılandırması konusunda yararlı rehberlik sağlar. PDF spesifikasyonu (ISO 32000), belirli bir belgenin metin katmanında hangi tür içeriklerin yer alması gerektiğini anlamanız gerektiğinde göz atmaya değerlidir.
PDF Karşılaştırması ile Bugün Nasıl Başlayabilirsiniz?
C#'da PDF karşılaştırma becerisi, onlarca sektör boyunca belge otomasyonu açar - ve IronPDF bunu herhangi bir .NET geliştiricisi için erişilebilir hale getirir. Temel metin çıkarma örneğiyle başlayın, gerektiğinde sayfa başına analizle genişletin ve profesyonel çıktıyı paydaşlara sunmak için HTML rapor üreticisini kullanın.
| Senaryo | Yaklaşım | Anahtar Metot |
|---|---|---|
| Temel metin karşılaştırma | Her iki belgeden tam metni çıkarın ve dizgileri karşılaştırın | ExtractAllText() |
| Sayfa başına analiz | Değişiklik yerlerini belirlemek için her sayfayı ayrı ayrı karşılaştırın | ExtractTextFromPage() |
| Toplu karşılaştırma | Birden fazla dosyayı tek bir referans belgeye karşı karşılaştırın | PdfDocument.FromFile() |
| Şifre korumalı dosyalar | Parolayı doğrudan dosya yükleyiciye geçirin -- önceden şifre çözme gerekmez | PdfDocument.FromFile(path, password) |
| Rapor Oluşturma | HTML karşılaştırması özetini stilize edilmiş bir PDF raporuna dönüştürün | ChromePdfRenderer.RenderHtmlAsPdf() |

Ücretsiz deneme sürümünü hemen IronPDF ile çalışmaya başlamak için indirin -- 30 günlük değerlendirme için kredi kartı gerekmemektedir. Hızlı başlangıç kılavuzu, beş dakika içinde ilk ayarları tamamlamanızı sağlar. Üretime hazır olduğunuzda, lisanslama sayfasını gözden geçirerek ekip büyüklüğünüze ve dağıtım gereksinimlerinize uygun seçenekleri inceleyin.
Daha derinlemesine öğrenme için, PDF oluşturma, düzenleme ve işlemeyi kapsayan tüm eğitim serilerini keşfedin. API referansı, detaylı metot dökümantasyonu sağlar ve örnekler bölümü, form işleme ve filigranlama gibi gerçek dünya uygulamalarını gösterir.

Sıkça Sorulan Sorular
C# kullanarak iki PDF dosyasını nasıl karşılaştırabilirim?
İki PDF dosyasını C# kullanarak, IronPDF'ün güçlü PDF karşılaştırma özelliğini kullanarak karşılaştırabilirsiniz; bu özellik, iki PDF dokümanı arasındaki metin, görseller ve düzen farklılıklarını belirlemenize olanak tanır.
PDF karşılaştırmada IronPDF kullanmanın faydaları nelerdir?
IronPDF dosya karşılaştırmasını doğrulukla tespit edilmesini sağlarken çeşitli karşılaştırma modlarını destekler ve C# projeleriyle sorunsuz bir şekilde entegre olur.
IronPDF büyük PDF dosyalarını karşılaştırmada kullanabilir mi?
Evet, IronPDF büyük PDF dosyalarını verimli bir şekilde işleyebilir, böylece kapsamlı belgeleri karşılaştırmak için uygun hale getirir ve performansta bir ödün vermez.
IronPDF, PDF'lerin görsel karşılaştırmasını destekler mi?
IronPDF layout ve resimlerdeki farklılıkları belirterek PDF'lerin görsel karşılaştırmasını sağlar ve belgeler arasındaki değişikliklerin kapsamlı bir görünümünü sunar.
IronPDF kullanarak PDF karşılaştırmasını otomatikleştirmek mümkün mü?
Evet, C# uygulamalarınızda sık veya toplu karşılaştırmalar gerektiren senaryolar için ideal olan PDF karşılaştırma süreçlerini IronPDF ile otomatikleştirebilirsiniz.
IronPDF, PDF dosyalarındaki hangi türdeki farklılıkları tespit edebilir?
IronPDF, metinsel, grafiksel ve düzen farklılıklarını tespit edebilmekte ve PDF dosyalarının içeriklerinin tamamının kapsamlı bir şekilde karşılaştırılmasını sağlamaktadır.
IronPDF, PDF karşılaştırmalarında doğruluğu nasıl sağlar?
IronPDF, gelişmiş algoritmalar kullanarak PDF içeriğini titizlikle karşılaştırarak yanlışlıkla gözden kaçan küçük farklılıkları en aza indirerek doğruluğu sağlar.
IronPDF'ü PDF karşılaştırması için diğer .NET uygulamaları ile entegre edebilir miyim?
Evet, IronPDF .NET uygulamaları ile sorunsuz bir şekilde entegre olmak üzere tasarlanmıştır, geliştiricilerin mevcut yazılım çözümlerine PDF karşılaştırma işlevselliğini dahil etmelerine olanak tanır.
PDF karşılaştırma konusunda önceden deneyimim olmalı mı?
Önceden deneyim gerekli değil. IronPDF, PDF'leri karşılaştırma sürecinde size yol gösterecek kullanıcı dostu araçlar ve kapsamlı belgeler sunar, PDF manipülasyonunda yeni olsanız bile.
IronPDF'ün PDF karşılaştırma özelliği için demo veya deneme sürümü mevcut mu?
Evet, IronPDF, satın almadan önce PDF karşılaştırma özelliklerini keşfetmenize ve test etmenize olanak tanıyan bir ücretsiz deneme sunar.

