Adobe PDF Library SDK'dan IronPDF'e Nasıl Geçilir
Datalogics aracılığıyla elde edilebilen Adobe PDF Library SDK, yüksek seviyeli yeteneklere sahip otantik Adobe PDF motorunu sağlar. Ancak, yüksek lisans maliyetleri, karmaşık doğal SDK entegrasyonu ve düşük seviyeli API tasarımı, birçok geliştirme ekibi için bunu uygulamasız hale getirir. Bu kılavuz, Adobe PDF Library SDK'dan IronPDF'ye, .NET Framework 4.6.2'den .NET 9'a ve gelecekteki sürümleri destekleyen modern, uygun maliyetli bir .NET PDF kitaplığına adım adım geçiş yolunu sunar.
Adobe PDF Library SDK'dan Neden Ayrılmayı Düşünmelisiniz?
Adobe PDF Library SDK, gerçek Adobe PDF motorunu sunarken, birkaç faktör, geliştirme ekiplerini PDF oluşturma ve manipülasyon ihtiyaçları için alternatifleri keşfetmeye yönlendiriyor.
Yüksek Lisanslama Maliyetleri
Adobe PDF Library SDK, genellikle yıllık $10.000 ila $50.000+ arasında değişen kurumsal fiyat düzeylerinde çalışır. Bu maliyet yapısı, SDK'yı küçük ve orta ölçekli işletmeler, girişimciler, bireysel geliştiriciler ve tam Adobe motor yeteneklerinin gerekli olmadığı projeler için uygulamasız hale getirir.
Karmaşık Doğal SDK Entegrasyonu
Adobe PDF Library SDK, platforma özgü ikili dosyalar gerektiren doğal C++ kodu üzerine inşa edilmiştir. Geliştiriciler, belleği dikkatlice yönetmeli, açık başlatma ve sonlandırma desenlerini ele almalı ve karmaşık kurulum prosedürlerinden geçmelidir. Bu, önemli ölçüde geliştirme yükü ekler ve CI/CD hatlarını karmaşık hale getirir.
Düşük Seviye API Tasarımı
Adobe PDF Library SDK ile PDF oluşturma, sayfalar, içerik akışları, metin çalıştırmaları ve yazı tiplerini programatik olarak inşa etmeyi içerir. HTML içeriği gibi basit görevler, koordinat hesaplamalarını, yazı tipi yerleşimini ve manuel içerik öğesi yönetimini içeren çok aşamalı işlemler haline gelir.
Kütüphane Yaşam Döngüsü Yönetim Yükü
Her işlem, Library.Initialize() ve Library.Terminate() bloklarında sarılma gerektirir ve dikkatli COM nesnesi imhası ile yapılır. Temizlik adımlarını unutmak, kaynak sızıntılarına ve uygulama kararsızlığına yol açar.
Tipik Projeler İçin Aşırı Güç
Öncelikle HTML'den PDF'ye dönüştürme, temel belge manipülasyonu veya rapor oluşturma gerektiren uygulamalar için, tam Adobe PDF motoru, eşdeğer sonuçlar sunan daha basit çözümler yerine önemli bir aşırı mühendislik temsil eder.
Adobe PDF Library SDK ve IronPDF: Temel Farklar
Bu kütüphaneler arasındaki temel mimari farkları anlamak, etkili bir geçiş stratejisi planlamaya yardımcı olur.
| Bağlam | Adobe PDF Library SDK | IronPDF |
|---|---|---|
| Fiyatlandırma | Yilda $10K-$50K+/kurumsal | Geliştirici basina uygun fiyatli lisanslama |
| Kurulum | Dogal DLL'ler, platforma ozgu | Basit NuGet paket |
| Belge Oluşturma | Dusuk seviye sayfa/içerik yapılandırma | HTML/CSS oluşturma |
| Başlatma | Terminate() gerekli |
Otomatik |
| Koordinat Sistemi | PostScript noktaları, sol alt başlangic | CSS tabanli yerlesim |
| Yazi Tipi Yonetimi | Manuel gomme gerektirir | Otomatik |
| Bellek Yönetimi | COM nesnelerinin manuel imhası | Standart IDisposable deseni |
| Async Destegi | Mevcut değil | Tam async/await desteği |
Önceden Taşıma Hazırlığı
Önkoşullar
Taşımaya başlamadan önce ortamınızın bu gereksinimleri karşıladığından emin olun:
- .NET Framework 4.6.2+ veya .NET Core 3.1 / .NET 5-9
- Visual Studio 2019+ veya JetBrains Rider
- NuGet Paket Yöneticisi erişimi -IronPDFlisans anahtarı (ücretsiz deneme ironpdf.com adresinde mevcuttur)
Adobe PDF Kütüphanesi SDK Kullanım Denetimi
Çözüm dizininde bu komutları çalıştırarak tüm Adobe PDF Kütüphanesi SDK referanslarını tespit edin:
grep -r "using Datalogics" --include="*.cs" .
grep -r "Adobe.PDF.Library" --include="*.csproj" .
grep -r "Library.Initialize\|Library.Terminate" --include="*.cs" .
grep -r "using Datalogics" --include="*.cs" .
grep -r "Adobe.PDF.Library" --include="*.csproj" .
grep -r "Library.Initialize\|Library.Terminate" --include="*.cs" .
Beklenen Büyük Değişiklikler
| Kategori | Adobe PDF Library SDK | IronPDF | Göç İşlemi |
|---|---|---|---|
| Başlatma | Library.Initialize() / Terminate() |
Otomatik | Yaşam döngüsü kodunu kaldırın |
| Belge Oluşturma | Sayfa yapısı ile new Document() |
ChromePdfRenderer |
HTML render kullanın |
| Koordinat Sistemi | PostScript noktaları, sol alt başlangic | CSS tabanli yerlesim | HTML/CSS kullanın |
| Yazı Tipi İşleme | Manuel Font oluşturma ve gömme |
Otomatik | Font kodunu kaldırın |
| Bellek Yönetimi | COM nesnelerinin manuel imhası | Standart IDisposable | using ifadelerini kullanın |
| Sayfa Yapımı | CreatePage(), AddContent() |
HTML'den otomatik | Önemli ölçüde basitleştirin |
Adım Adım Geçiş Süreci
Adım 1: NuGet Paketlerini Güncelleyin
Adobe PDF Kütüphanesi SDK paketini kaldırın ve IronPDF'i yükleyin:
# Remove Adobe PDF Library
dotnet remove package Adobe.PDF.Library.LM.NET
# Install IronPDF
dotnet add package IronPdf
# Remove Adobe PDF Library
dotnet remove package Adobe.PDF.Library.LM.NET
# Install IronPDF
dotnet add package IronPdf
Adım 2: Lisans Anahtarını Yapılandırın
Adobe'nin lisanslamasını IronPDF'nin kod tabanlı lisans anahtarıyla değiştirin:
// Replace Adobe's Library.LicenseKey withIronPDFlicense
// Add at application startup, before anyIronPDFoperations
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Verify license status
bool isLicensed = IronPdf.License.IsLicensed;
// Replace Adobe's Library.LicenseKey withIronPDFlicense
// Add at application startup, before anyIronPDFoperations
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Verify license status
bool isLicensed = IronPdf.License.IsLicensed;
' Replace Adobe's Library.LicenseKey with IronPDF license
' Add at application startup, before any IronPDF operations
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
' Verify license status
Dim isLicensed As Boolean = IronPdf.License.IsLicensed
Adım 3: Ad Alanı Referanslarını Güncelleyin
Çözümünüz içinde genel bir bul ve değiştir işlemi yapın:
| Bul | Şununla Değiştir |
|---|---|
using Datalogics.PDFL; |
using IronPdf; |
using Datalogics.PDFL.Document; |
using IronPdf; |
using Datalogics.PDFL.Page; |
using IronPdf; |
using Datalogics.PDFL.Content; |
using IronPdf; |
Adım 4: Kütüphane Yaşam Döngüsü Kodunu Kaldırın
En önemli basitleştirmelerden biri başlatma ve sonlandırma kalıplarının kaldırılmasını içerir:
//Adobe PDF Library SDK- REMOVE THIS PATTERN
Library.Initialize();
try
{
// PDF operations
}
finally
{
Library.Terminate(); // Must always terminate
}
//IronPDF- Just use directly
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
//Adobe PDF Library SDK- REMOVE THIS PATTERN
Library.Initialize();
try
{
// PDF operations
}
finally
{
Library.Terminate(); // Must always terminate
}
//IronPDF- Just use directly
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
'Adobe PDF Library SDK- REMOVE THIS PATTERN
Library.Initialize()
Try
' PDF operations
Finally
Library.Terminate() ' Must always terminate
End Try
'IronPDF- Just use directly
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
Tam API Geçiş Referansı
Kütüphane Yaşam Döngüsü Yöntemleri
| Adobe Metodu | IronPDF Eşdeğeri |
|---|---|
Library.Initialize() |
Gerekli değil |
Library.Terminate() |
Gerekli değil |
Library.LicenseKey = "KEY" |
IronPdf.License.LicenseKey = "KEY" |
using (Library lib = new Library()) |
Gerekli değil |
Belge Oluşturma Yöntemleri
| Adobe Metodu | IronPDF Yöntemi |
|---|---|
new Document() |
new ChromePdfRenderer() |
new Document(path) |
PdfDocument.FromFile(path) |
doc.CreatePage(index, rect) |
HTML'den otomatik |
doc.Save(SaveFlags.Full, path) |
pdf.SaveAs(path) |
doc.NumPages |
pdf.PageCount |
doc.GetPage(index) |
pdf.Pages[index] |
doc.InsertPages(...) |
PdfDocument.Merge() |
İçerik Oluşturma (Büyük Paradigma Değişimi)
Adobe PDF Kütüphanesi SDK düşük seviyeli içerik yapımını gerektirir. IronPDF, HTML/CSS kullanır:
| Adobe Metodu | IronPDF Yöntemi |
|---|---|
new Text() |
HTML <p>, <h1>, vb. kullanın |
text.AddRun(textRun) |
HTML kullanın |
new TextRun(text, font, size, point) |
CSS stillendirme |
new Font(name, flags) |
CSS font-family |
new Image(path) |
HTML <img> etiketi |
content.AddElement(...) |
HTML içeriği |
page.UpdateContent() |
Gerekli değil |
Filigran ve Güvenlik Yöntemleri
| Adobe Metodu | IronPDF Yöntemi |
|---|---|
new Watermark(doc, textParams, wmParams) |
pdf.ApplyWatermark(html) |
WatermarkParams.Opacity |
CSS opacity |
new EncryptionHandler(user, owner, perms) |
pdf.SecuritySettings |
PermissionFlags.PrintDoc |
AllowUserPrinting |
Metin Çıkarma
| Adobe Metodu | IronPDF Yöntemi |
|---|---|
new WordFinder(doc, config) |
pdf.ExtractAllText() |
wordFinder.GetWordList() |
pdf.Pages[i].Text |
| Karmaşık kelime/karakter yineleme | Tek bir yöntem çağrısı |
Kod Geçiş Örnekleri
HTML'den PDF'ye Dönüşüm
İçeriği PDF'ye dönüştürürken en dramatik basitleştirme gerçekleşir. Adobe PDF Kütüphanesi SDK, elle sayfa yapımı, font gömme ve koordinat pozisyonlama gerektirir.
Adobe PDF Kütüphanesi SDK Uygulaması:
// Adobe PDF Library SDK
using Datalogics.PDFL;
using System;
class AdobeHtmlToPdf
{
static void Main()
{
using (Library lib = new Library())
{
// Adobe PDF Library requires complex setup with HTML conversion parameters
HTMLConversionParameters htmlParams = new HTMLConversionParameters();
htmlParams.PaperSize = PaperSize.Letter;
htmlParams.Orientation = Orientation.Portrait;
string htmlContent = "<html><body><h1>Hello World</h1></body></html>";
// Convert HTML to PDF
Document doc = Document.CreateFromHTML(htmlContent, htmlParams);
doc.Save(SaveFlags.Full, "output.pdf");
doc.Dispose();
}
}
}
// Adobe PDF Library SDK
using Datalogics.PDFL;
using System;
class AdobeHtmlToPdf
{
static void Main()
{
using (Library lib = new Library())
{
// Adobe PDF Library requires complex setup with HTML conversion parameters
HTMLConversionParameters htmlParams = new HTMLConversionParameters();
htmlParams.PaperSize = PaperSize.Letter;
htmlParams.Orientation = Orientation.Portrait;
string htmlContent = "<html><body><h1>Hello World</h1></body></html>";
// Convert HTML to PDF
Document doc = Document.CreateFromHTML(htmlContent, htmlParams);
doc.Save(SaveFlags.Full, "output.pdf");
doc.Dispose();
}
}
}
Imports Datalogics.PDFL
Imports System
Class AdobeHtmlToPdf
Shared Sub Main()
Using lib As New Library()
' Adobe PDF Library requires complex setup with HTML conversion parameters
Dim htmlParams As New HTMLConversionParameters()
htmlParams.PaperSize = PaperSize.Letter
htmlParams.Orientation = Orientation.Portrait
Dim htmlContent As String = "<html><body><h1>Hello World</h1></body></html>"
' Convert HTML to PDF
Dim doc As Document = Document.CreateFromHTML(htmlContent, htmlParams)
doc.Save(SaveFlags.Full, "output.pdf")
doc.Dispose()
End Using
End Sub
End Class
IronPDF Uygulaması:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class IronPdfHtmlToPdf
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string htmlContent = "<html><body><h1>Hello World</h1></body></html>";
// Convert HTML to PDF with simple API
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class IronPdfHtmlToPdf
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string htmlContent = "<html><body><h1>Hello World</h1></body></html>";
// Convert HTML to PDF with simple API
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports System
Class IronPdfHtmlToPdf
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim htmlContent As String = "<html><body><h1>Hello World</h1></body></html>"
' Convert HTML to PDF with simple API
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("output.pdf")
End Sub
End Class
IronPDF, kütüphane yaşam döngüsü sarmalayıcısını, dönüştürme parametre nesnelerini ve açık bertarafı ortadan kaldırır. ChromePdfRenderer, piksellerle uyumlu CSS ve JavaScript desteği için Chromium tabanlı bir motor kullanır. İleri düzey senaryolar için, HTML'den PDF'ye dokümantasyonunu inceleyin.
Birden Fazla PDF'yi Birleştirme
PDF birleştirme, API karmaşıklık farkını net bir şekilde gösterir.
Adobe PDF Kütüphanesi SDK Uygulaması:
// Adobe PDF Library SDK
using Datalogics.PDFL;
using System;
class AdobeMergePdfs
{
static void Main()
{
using (Library lib = new Library())
{
// Open first PDF document
Document doc1 = new Document("document1.pdf");
Document doc2 = new Document("document2.pdf");
// Insert pages from second document into first
PageInsertParams insertParams = new PageInsertParams();
insertParams.InsertFlags = PageInsertFlags.None;
for (int i = 0; i < doc2.NumPages; i++)
{
Page page = doc2.GetPage(i);
doc1.InsertPage(doc1.NumPages - 1, page, insertParams);
}
doc1.Save(SaveFlags.Full, "merged.pdf");
doc1.Dispose();
doc2.Dispose();
}
}
}
// Adobe PDF Library SDK
using Datalogics.PDFL;
using System;
class AdobeMergePdfs
{
static void Main()
{
using (Library lib = new Library())
{
// Open first PDF document
Document doc1 = new Document("document1.pdf");
Document doc2 = new Document("document2.pdf");
// Insert pages from second document into first
PageInsertParams insertParams = new PageInsertParams();
insertParams.InsertFlags = PageInsertFlags.None;
for (int i = 0; i < doc2.NumPages; i++)
{
Page page = doc2.GetPage(i);
doc1.InsertPage(doc1.NumPages - 1, page, insertParams);
}
doc1.Save(SaveFlags.Full, "merged.pdf");
doc1.Dispose();
doc2.Dispose();
}
}
}
Imports Datalogics.PDFL
Imports System
Class AdobeMergePdfs
Shared Sub Main()
Using lib As New Library()
' Open first PDF document
Dim doc1 As New Document("document1.pdf")
Dim doc2 As New Document("document2.pdf")
' Insert pages from second document into first
Dim insertParams As New PageInsertParams()
insertParams.InsertFlags = PageInsertFlags.None
For i As Integer = 0 To doc2.NumPages - 1
Dim page As Page = doc2.GetPage(i)
doc1.InsertPage(doc1.NumPages - 1, page, insertParams)
Next
doc1.Save(SaveFlags.Full, "merged.pdf")
doc1.Dispose()
doc2.Dispose()
End Using
End Sub
End Class
IronPDF Uygulaması:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class IronPdfMergePdfs
{
static void Main()
{
// Load PDF documents
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
// Merge PDFs with simple method
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class IronPdfMergePdfs
{
static void Main()
{
// Load PDF documents
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
// Merge PDFs with simple method
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
}
}
Imports IronPdf
Imports System
Class IronPdfMergePdfs
Shared Sub Main()
' Load PDF documents
Dim pdf1 = PdfDocument.FromFile("document1.pdf")
Dim pdf2 = PdfDocument.FromFile("document2.pdf")
' Merge PDFs with simple method
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("merged.pdf")
End Sub
End Class
Adobe'nin yaklaşımı, yerleştirme parametreleri ile sayfa bazında yineleme gerektirir. IronPDF, birden fazla belge alan tek bir Merge yöntemi sunar.
Filigran Ekleme
Filigranlama, IronPDF'nin stil esnekliği için HTML/CSS'den nasıl faydalandığını göstermek için iyi bir örnektir.
Adobe PDF Kütüphanesi SDK Uygulaması:
// Adobe PDF Library SDK
using Datalogics.PDFL;
using System;
class AdobeAddWatermark
{
static void Main()
{
using (Library lib = new Library())
{
Document doc = new Document("input.pdf");
// Create watermark with complex API
WatermarkParams watermarkParams = new WatermarkParams();
watermarkParams.Opacity = 0.5;
watermarkParams.Rotation = 45.0;
watermarkParams.VerticalAlignment = WatermarkVerticalAlignment.Center;
watermarkParams.HorizontalAlignment = WatermarkHorizontalAlignment.Center;
WatermarkTextParams textParams = new WatermarkTextParams();
textParams.Text = "CONFIDENTIAL";
Watermark watermark = new Watermark(doc, textParams, watermarkParams);
doc.Save(SaveFlags.Full, "watermarked.pdf");
doc.Dispose();
}
}
}
// Adobe PDF Library SDK
using Datalogics.PDFL;
using System;
class AdobeAddWatermark
{
static void Main()
{
using (Library lib = new Library())
{
Document doc = new Document("input.pdf");
// Create watermark with complex API
WatermarkParams watermarkParams = new WatermarkParams();
watermarkParams.Opacity = 0.5;
watermarkParams.Rotation = 45.0;
watermarkParams.VerticalAlignment = WatermarkVerticalAlignment.Center;
watermarkParams.HorizontalAlignment = WatermarkHorizontalAlignment.Center;
WatermarkTextParams textParams = new WatermarkTextParams();
textParams.Text = "CONFIDENTIAL";
Watermark watermark = new Watermark(doc, textParams, watermarkParams);
doc.Save(SaveFlags.Full, "watermarked.pdf");
doc.Dispose();
}
}
}
Imports Datalogics.PDFL
Imports System
Class AdobeAddWatermark
Shared Sub Main()
Using lib As New Library()
Dim doc As New Document("input.pdf")
' Create watermark with complex API
Dim watermarkParams As New WatermarkParams()
watermarkParams.Opacity = 0.5
watermarkParams.Rotation = 45.0
watermarkParams.VerticalAlignment = WatermarkVerticalAlignment.Center
watermarkParams.HorizontalAlignment = WatermarkHorizontalAlignment.Center
Dim textParams As New WatermarkTextParams()
textParams.Text = "CONFIDENTIAL"
Dim watermark As New Watermark(doc, textParams, watermarkParams)
doc.Save(SaveFlags.Full, "watermarked.pdf")
doc.Dispose()
End Using
End Sub
End Class
IronPDF Uygulaması:
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;
class IronPdfAddWatermark
{
static void Main()
{
var pdf = PdfDocument.FromFile("input.pdf");
// Apply text watermark with simple API
pdf.ApplyWatermark("<h1 style='color:red; opacity:0.5;'>CONFIDENTIAL</h1>",
rotation: 45,
verticalAlignment: VerticalAlignment.Middle,
horizontalAlignment: HorizontalAlignment.Center);
pdf.SaveAs("watermarked.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;
class IronPdfAddWatermark
{
static void Main()
{
var pdf = PdfDocument.FromFile("input.pdf");
// Apply text watermark with simple API
pdf.ApplyWatermark("<h1 style='color:red; opacity:0.5;'>CONFIDENTIAL</h1>",
rotation: 45,
verticalAlignment: VerticalAlignment.Middle,
horizontalAlignment: HorizontalAlignment.Center);
pdf.SaveAs("watermarked.pdf");
}
}
Imports IronPdf
Imports IronPdf.Editing
Imports System
Class IronPdfAddWatermark
Shared Sub Main()
Dim pdf = PdfDocument.FromFile("input.pdf")
' Apply text watermark with simple API
pdf.ApplyWatermark("<h1 style='color:red; opacity:0.5;'>CONFIDENTIAL</h1>",
rotation:=45,
verticalAlignment:=VerticalAlignment.Middle,
horizontalAlignment:=HorizontalAlignment.Center)
pdf.SaveAs("watermarked.pdf")
End Sub
End Class
IronPDF'nin HTML tabanlı filigranlaması, ayrı parametre nesnelerine gerek kalmadan CSS stilizasyonu yoluyla tam tasarım kontrolü sağlar.
Şifre Koruma ve Şifreleme
Adobe PDF Kütüphanesi SDK Uygulaması:
using Datalogics.PDFL;
public void ProtectPdf(string inputPath, string outputPath, string password)
{
Library.Initialize();
try
{
using (Document doc = new Document(inputPath))
{
PermissionFlags permissions =
PermissionFlags.PrintDoc |
PermissionFlags.PrintFidelity;
EncryptionHandler encHandler = new EncryptionHandler(
password, // User password
password, // Owner password
permissions,
EncryptionMethod.AES256);
doc.SetEncryptionHandler(encHandler);
doc.Save(SaveFlags.Full | SaveFlags.Encrypted, outputPath);
}
}
finally
{
Library.Terminate();
}
}
using Datalogics.PDFL;
public void ProtectPdf(string inputPath, string outputPath, string password)
{
Library.Initialize();
try
{
using (Document doc = new Document(inputPath))
{
PermissionFlags permissions =
PermissionFlags.PrintDoc |
PermissionFlags.PrintFidelity;
EncryptionHandler encHandler = new EncryptionHandler(
password, // User password
password, // Owner password
permissions,
EncryptionMethod.AES256);
doc.SetEncryptionHandler(encHandler);
doc.Save(SaveFlags.Full | SaveFlags.Encrypted, outputPath);
}
}
finally
{
Library.Terminate();
}
}
Imports Datalogics.PDFL
Public Sub ProtectPdf(inputPath As String, outputPath As String, password As String)
Library.Initialize()
Try
Using doc As New Document(inputPath)
Dim permissions As PermissionFlags = PermissionFlags.PrintDoc Or PermissionFlags.PrintFidelity
Dim encHandler As New EncryptionHandler(
password, ' User password
password, ' Owner password
permissions,
EncryptionMethod.AES256)
doc.SetEncryptionHandler(encHandler)
doc.Save(SaveFlags.Full Or SaveFlags.Encrypted, outputPath)
End Using
Finally
Library.Terminate()
End Try
End Sub
IronPDF Uygulaması:
using IronPdf;
public void ProtectPdf(string inputPath, string outputPath, string password)
{
using var pdf = PdfDocument.FromFile(inputPath);
pdf.SecuritySettings.UserPassword = password;
pdf.SecuritySettings.OwnerPassword = password;
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;
pdf.SaveAs(outputPath);
}
using IronPdf;
public void ProtectPdf(string inputPath, string outputPath, string password)
{
using var pdf = PdfDocument.FromFile(inputPath);
pdf.SecuritySettings.UserPassword = password;
pdf.SecuritySettings.OwnerPassword = password;
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;
pdf.SaveAs(outputPath);
}
Imports IronPdf
Public Sub ProtectPdf(inputPath As String, outputPath As String, password As String)
Using pdf = PdfDocument.FromFile(inputPath)
pdf.SecuritySettings.UserPassword = password
pdf.SecuritySettings.OwnerPassword = password
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit
pdf.SaveAs(outputPath)
End Using
End Sub
IronPDF, bitwise izin bayrakları ve şifreleme işleyici nesneler yerine güçlü şekilde listelenmiş özellikler kullanır.
Metin Çıkarma
Adobe PDF Kütüphanesi SDK Uygulaması:
using Datalogics.PDFL;
public string ExtractText(string pdfPath)
{
string extractedText = "";
Library.Initialize();
try
{
using (Document doc = new Document(pdfPath))
{
WordFinderConfig config = new WordFinderConfig();
config.IgnoreCharGaps = true;
for (int i = 0; i < doc.NumPages; i++)
{
using (WordFinder wordFinder = new WordFinder(doc, i, config))
{
IList<Word> words = wordFinder.GetWordList();
foreach (Word word in words)
{
extractedText += word.Text + " ";
}
extractedText += "\n";
}
}
}
}
finally
{
Library.Terminate();
}
return extractedText;
}
using Datalogics.PDFL;
public string ExtractText(string pdfPath)
{
string extractedText = "";
Library.Initialize();
try
{
using (Document doc = new Document(pdfPath))
{
WordFinderConfig config = new WordFinderConfig();
config.IgnoreCharGaps = true;
for (int i = 0; i < doc.NumPages; i++)
{
using (WordFinder wordFinder = new WordFinder(doc, i, config))
{
IList<Word> words = wordFinder.GetWordList();
foreach (Word word in words)
{
extractedText += word.Text + " ";
}
extractedText += "\n";
}
}
}
}
finally
{
Library.Terminate();
}
return extractedText;
}
Imports Datalogics.PDFL
Public Function ExtractText(ByVal pdfPath As String) As String
Dim extractedText As String = ""
Library.Initialize()
Try
Using doc As New Document(pdfPath)
Dim config As New WordFinderConfig()
config.IgnoreCharGaps = True
For i As Integer = 0 To doc.NumPages - 1
Using wordFinder As New WordFinder(doc, i, config)
Dim words As IList(Of Word) = wordFinder.GetWordList()
For Each word As Word In words
extractedText &= word.Text & " "
Next
extractedText &= vbLf
End Using
Next
End Using
Finally
Library.Terminate()
End Try
Return extractedText
End Function
IronPDF Uygulaması:
using IronPdf;
public string ExtractText(string pdfPath)
{
using var pdf = PdfDocument.FromFile(pdfPath);
return pdf.ExtractAllText();
}
using IronPdf;
public string ExtractText(string pdfPath)
{
using var pdf = PdfDocument.FromFile(pdfPath);
return pdf.ExtractAllText();
}
Imports IronPdf
Public Function ExtractText(pdfPath As String) As String
Using pdf = PdfDocument.FromFile(pdfPath)
Return pdf.ExtractAllText()
End Using
End Function
Adobe'nin kelime kelime yinelemesiIronPDFile tek bir yöntem çağrısına dönüşür.
Üstbilgiler ve Altbilgiler
Adobe PDF Kütüphanesi SDK Uygulaması:
using Datalogics.PDFL;
public void AddHeaderFooter(string inputPath, string outputPath)
{
Library.Initialize();
try
{
using (Document doc = new Document(inputPath))
{
Font font = new Font("Helvetica", FontCreateFlags.None);
for (int i = 0; i < doc.NumPages; i++)
{
using (Page page = doc.GetPage(i))
{
Content content = page.Content;
// Add header
Text header = new Text();
header.AddRun(new TextRun("Document Header",
font, 10, new Point(72, page.MediaBox.Top - 36)));
content.AddElement(header);
// Add footer with page number
Text footer = new Text();
footer.AddRun(new TextRun($"Page {i + 1} of {doc.NumPages}",
font, 10, new Point(72, 36)));
content.AddElement(footer);
page.UpdateContent();
}
}
doc.Save(SaveFlags.Full, outputPath);
}
}
finally
{
Library.Terminate();
}
}
using Datalogics.PDFL;
public void AddHeaderFooter(string inputPath, string outputPath)
{
Library.Initialize();
try
{
using (Document doc = new Document(inputPath))
{
Font font = new Font("Helvetica", FontCreateFlags.None);
for (int i = 0; i < doc.NumPages; i++)
{
using (Page page = doc.GetPage(i))
{
Content content = page.Content;
// Add header
Text header = new Text();
header.AddRun(new TextRun("Document Header",
font, 10, new Point(72, page.MediaBox.Top - 36)));
content.AddElement(header);
// Add footer with page number
Text footer = new Text();
footer.AddRun(new TextRun($"Page {i + 1} of {doc.NumPages}",
font, 10, new Point(72, 36)));
content.AddElement(footer);
page.UpdateContent();
}
}
doc.Save(SaveFlags.Full, outputPath);
}
}
finally
{
Library.Terminate();
}
}
Imports Datalogics.PDFL
Public Sub AddHeaderFooter(inputPath As String, outputPath As String)
Library.Initialize()
Try
Using doc As New Document(inputPath)
Dim font As New Font("Helvetica", FontCreateFlags.None)
For i As Integer = 0 To doc.NumPages - 1
Using page As Page = doc.GetPage(i)
Dim content As Content = page.Content
' Add header
Dim header As New Text()
header.AddRun(New TextRun("Document Header", font, 10, New Point(72, page.MediaBox.Top - 36)))
content.AddElement(header)
' Add footer with page number
Dim footer As New Text()
footer.AddRun(New TextRun($"Page {i + 1} of {doc.NumPages}", font, 10, New Point(72, 36)))
content.AddElement(footer)
page.UpdateContent()
End Using
Next
doc.Save(SaveFlags.Full, outputPath)
End Using
Finally
Library.Terminate()
End Try
End Sub
IronPDF Uygulaması:
using IronPdf;
public void CreatePdfWithHeaderFooter(string html, string outputPath)
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
CenterText = "Document Header",
FontSize = 10,
FontFamily = "Helvetica"
};
renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
CenterText = "Page {page} of {total-pages}",
FontSize = 10,
FontFamily = "Helvetica"
};
using var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(outputPath);
}
using IronPdf;
public void CreatePdfWithHeaderFooter(string html, string outputPath)
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
CenterText = "Document Header",
FontSize = 10,
FontFamily = "Helvetica"
};
renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
CenterText = "Page {page} of {total-pages}",
FontSize = 10,
FontFamily = "Helvetica"
};
using var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(outputPath);
}
Imports IronPdf
Public Sub CreatePdfWithHeaderFooter(html As String, outputPath As String)
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.TextHeader = New TextHeaderFooter With {
.CenterText = "Document Header",
.FontSize = 10,
.FontFamily = "Helvetica"
}
renderer.RenderingOptions.TextFooter = New TextHeaderFooter With {
.CenterText = "Page {page} of {total-pages}",
.FontSize = 10,
.FontFamily = "Helvetica"
}
Using pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs(outputPath)
End Using
End Sub
IronPDF, sayfa yinelemesini otomatik olarak işler ve {page} ve {total-pages} gibi yer tutucu belirteçleri destekler. Daha ileri düzey düzenler için, üstbilgi ve altbilgiler dokümantasyonunu inceleyin.
URL'den PDF'ye Dönüşüm
Adobe PDF Kütüphanesi SDK, yerleşik URL render yeteneğine sahip değildir. IronPDF, yerleşik destek sağlar:
using IronPdf;
public void ConvertUrlToPdf(string url, string outputPath)
{
var renderer = new ChromePdfRenderer();
using var pdf = renderer.RenderUrlAsPdf(url);
pdf.SaveAs(outputPath);
}
using IronPdf;
public void ConvertUrlToPdf(string url, string outputPath)
{
var renderer = new ChromePdfRenderer();
using var pdf = renderer.RenderUrlAsPdf(url);
pdf.SaveAs(outputPath);
}
Imports IronPdf
Public Sub ConvertUrlToPdf(url As String, outputPath As String)
Dim renderer As New ChromePdfRenderer()
Using pdf = renderer.RenderUrlAsPdf(url)
pdf.SaveAs(outputPath)
End Using
End Sub
URL dönüştürme seçeneklerinin tamamı için, URL'den PDF'ye dokümantasyonunu inceleyin.
ASP.NET Core Entegrasyonu
Adobe PDF Kütüphanesi SDK'nın statik başlatma kalıbı, bağımlılık enjeksiyonu ile sürtüşme yaratır. IronPDF, modern .NET mimarileriyle doğal olarak entegre olur.
Adobe Kalıbı (DI İçin Problemli):
public class AdobePdfService
{
public byte[] Generate(string content)
{
Library.Initialize();
try
{
// Karmaşık belge construction...
return bytes;
}
finally
{
Library.Terminate();
}
}
}
public class AdobePdfService
{
public byte[] Generate(string content)
{
Library.Initialize();
try
{
// Karmaşık belge construction...
return bytes;
}
finally
{
Library.Terminate();
}
}
}
Public Class AdobePdfService
Public Function Generate(content As String) As Byte()
Library.Initialize()
Try
' Karmaşık belge construction...
Return bytes
Finally
Library.Terminate()
End Try
End Function
End Class
IronPDF Kalıbı (DI-Dostu):
public interface IPdfService
{
Task<byte[]> GeneratePdfAsync(string html);
}
public class IronPdfService : IPdfService
{
private readonly ChromePdfRenderer _renderer;
public IronPdfService()
{
_renderer = new ChromePdfRenderer();
_renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
}
public async Task<byte[]> GeneratePdfAsync(string html)
{
using var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
return pdf.BinaryData;
}
}
// Register in Program.cs (.NET 6+):
builder.Services.AddSingleton<IPdfService, IronPdfService>();
public interface IPdfService
{
Task<byte[]> GeneratePdfAsync(string html);
}
public class IronPdfService : IPdfService
{
private readonly ChromePdfRenderer _renderer;
public IronPdfService()
{
_renderer = new ChromePdfRenderer();
_renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
}
public async Task<byte[]> GeneratePdfAsync(string html)
{
using var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
return pdf.BinaryData;
}
}
// Register in Program.cs (.NET 6+):
builder.Services.AddSingleton<IPdfService, IronPdfService>();
Imports System.Threading.Tasks
Public Interface IPdfService
Function GeneratePdfAsync(html As String) As Task(Of Byte())
End Interface
Public Class IronPdfService
Implements IPdfService
Private ReadOnly _renderer As ChromePdfRenderer
Public Sub New()
_renderer = New ChromePdfRenderer()
_renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
End Sub
Public Async Function GeneratePdfAsync(html As String) As Task(Of Byte()) Implements IPdfService.GeneratePdfAsync
Using pdf = Await _renderer.RenderHtmlAsPdfAsync(html)
Return pdf.BinaryData
End Using
End Function
End Class
' Register in Program.vb (.NET 6+):
builder.Services.AddSingleton(Of IPdfService, IronPdfService)()
Async Destegi
Adobe PDF Kütüphanesi SDK asenkron işlemleri desteklemez. IronPDF, ölçeklenebilir web uygulamaları için gerekli olan tam asenkron/await yetenekleri sağlar:
public async Task<IActionResult> GenerateReport()
{
var renderer = new ChromePdfRenderer();
using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
return File(pdf.BinaryData, "application/pdf");
}
public async Task<IActionResult> GenerateReport()
{
var renderer = new ChromePdfRenderer();
using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
return File(pdf.BinaryData, "application/pdf");
}
Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Mvc
Public Class ReportController
Inherits Controller
Public Async Function GenerateReport() As Task(Of IActionResult)
Dim renderer As New ChromePdfRenderer()
Using pdf = Await renderer.RenderHtmlAsPdfAsync(html)
Return File(pdf.BinaryData, "application/pdf")
End Using
End Function
End Class
Performans Optimizasyonu
Hafıza Kullanımı Karşılaştırması
| Senaryo | Adobe PDF Library SDK | IronPDF |
|---|---|---|
| Basit PDF | ~100 MB | ~50 MB |
| Karmaşık belge | ~200 MB | ~80 MB |
| Grup (100 PDF) | Yüksek (yerel bellek) | ~100 MB |
Optimizasyon İpuçları
Render Nesnelerini Yeniden Kullanın:
// Good: Reuse renderer for batch operations
var renderer = new ChromePdfRenderer();
foreach (var html in htmlList)
{
using var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs($"output_{i}.pdf");
}
// Good: Reuse renderer for batch operations
var renderer = new ChromePdfRenderer();
foreach (var html in htmlList)
{
using var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs($"output_{i}.pdf");
}
' Good: Reuse renderer for batch operations
Dim renderer = New ChromePdfRenderer()
For Each html In htmlList
Using pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs($"output_{i}.pdf")
End Using
Next
Web Uygulamalarında Asenkron Kullanım:
public async Task<IActionResult> GenerateReport()
{
var renderer = new ChromePdfRenderer();
using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
return File(pdf.BinaryData, "application/pdf");
}
public async Task<IActionResult> GenerateReport()
{
var renderer = new ChromePdfRenderer();
using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
return File(pdf.BinaryData, "application/pdf");
}
Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Mvc
Public Class ReportController
Inherits Controller
Public Async Function GenerateReport() As Task(Of IActionResult)
Dim renderer As New ChromePdfRenderer()
Using pdf = Await renderer.RenderHtmlAsPdfAsync(html)
Return File(pdf.BinaryData, "application/pdf")
End Using
End Function
End Class
Genel Göç Sorunlarını Giderme
Sorun: Koordinat Tabanlı Konumlandırma Çalışmıyor
Adobe PostScript nokta koordinatları kullanır.IronPDFCSS konumlandırma kullanır:
// Adobe: Point-based
new TextRun("Hello", font, 12, new Point(100, 700));
// IronPDF: CSS-based
string html = "<p style='position:absolute; left:100px; top:92px;'>Hello</p>";
// Adobe: Point-based
new TextRun("Hello", font, 12, new Point(100, 700));
// IronPDF: CSS-based
string html = "<p style='position:absolute; left:100px; top:92px;'>Hello</p>";
' Adobe: Point-based
New TextRun("Hello", font, 12, New Point(100, 700))
' IronPDF: CSS-based
Dim html As String = "<p style='position:absolute; left:100px; top:92px;'>Hello</p>"
Sorun: Sayfa Boyutu Farklılıkları
Adobe PostScript noktaları kullanır.IronPDFenumlar veya özel boyutlar kullanır:
// Adobe: Points
Rect(0, 0, 612, 792) // Letter
// IronPDF: Enum or custom
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
// Or custom:
renderer.RenderingOptions.SetCustomPaperSizeInInches(8.5, 11);
// Adobe: Points
Rect(0, 0, 612, 792) // Letter
// IronPDF: Enum or custom
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
// Or custom:
renderer.RenderingOptions.SetCustomPaperSizeInInches(8.5, 11);
' Adobe: Points
Rect(0, 0, 612, 792) ' Letter
' IronPDF: Enum or custom
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter
' Or custom:
renderer.RenderingOptions.SetCustomPaperSizeInInches(8.5, 11)
Sorun: Font Bulunamadı
Adobe, elle font gömme gerektirir.IronPDFfontları otomatik olarak işler:
// IronPDF: Use web fonts if needed
string html = @"
<style>
@import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');
body { font-family: 'Roboto', sans-serif; }
</style>";
// IronPDF: Use web fonts if needed
string html = @"
<style>
@import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');
body { font-family: 'Roboto', sans-serif; }
</style>";
' IronPDF: Use web fonts if needed
Dim html As String = "
<style>
@import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');
body { font-family: 'Roboto', sans-serif; }
</style>"
Sorun: SaveFlags Kullanılamıyor
Adobe save flag kombinasyonları kullanır.IronPDFdoğrudan kaydetme kullanır:
// Adobe
doc.Save(SaveFlags.Full | SaveFlags.Incremental, path);
//IronPDF- full save is default
pdf.SaveAs(path);
// Adobe
doc.Save(SaveFlags.Full | SaveFlags.Incremental, path);
//IronPDF- full save is default
pdf.SaveAs(path);
Göç Sonrası Kontrol Listesi
Kod göçünü tamamladıktan sonra, aşağıdakileri doğrulayın:
- Tüm mevcut birim ve entegrasyon testlerini çalıştırın
- PDF çıktıları önceki sürümlerle görsel olarak karşılaştırın
- Tüm PDF iş akışlarını bir aşama ortamında test edin
- Lisanslamanın doğru çalıştığını doğrulayın (
IronPdf.License.IsLicensed) - Önceki uygulamaya karşı performans karşılaştırması yapın
- Adobe lisanslama yapılandırmasını kaldırın
- CI/CD boru hattı bağımlılıklarını güncelleyin
- Projeden tüm Adobe PDF Kütüphanesi DLL'lerini kaldırın
- Geliştirme ekibiniz için yeni kalıpları belgeleyin
PDF Altyapınızı Geleceğe Hazırlama
.NET 10 yaklaşırken ve C# 14 yeni dil özellikleri sunarken, aktif geliştirmeye sahip bir .NET PDF kütüphanesi seçmek, gelişen çalışma zamanı yetenekleriyle uyumluluğu sağlar. IronPDF'nin en son .NET sürümlerini destekleme taahhüdü, projeler 2025 ve 2026'ya uzandıkça geçiş yatırımınızın geri dönüş sağlamasını sağlar.
Ek Kaynaklar
Adobe PDF Kütüphanesi SDK'dan IronPDF'ye geçmek, lisans maliyetlerini büyük ölçüde azaltırken PDF oluşturma kod tabanınızı önemli ölçüde basitleştirir. Düşük seviyeli sayfa yapımından HTML/CSS renderına geçiş, yüzlerce satırlık koordinat hesaplama, font yönetimi ve yaşam döngüsü işleme kodunu ortadan kaldırır. Modern .NET uygulamaları geliştiren ekipler için IronPDF, çağdaş geliştirme iş akışları için tasarlanmış geliştirici-dostu bir API ile eşdeğer yetenekler sunar.

