.NET için ABCpdf'den IronPDF'e Nasıl Geçilir
.NET için ABCpdf'den IronPDF'e geçiş, geliştirme ekipleri için daha basit lisanslama, modern belgeler ve yerel çapraz platform desteği hedeflemek için stratejik bir yükseltmedir. Bu kapsamlı rehber, gerçek dünya senaryolarından API eşlemeleri ve kod dönüştürme örnekleriyle adım adım geçiş yolu sunar.
.NET Framework 4.6.2 ile çalışıyor veya .NET 9'u hedefliyorsanız, bu ABCpdf geçiş kılavuzu IronPDF'nin Chrome tabanlı render motoruna kolay bir geçiş sağlar.
Neden ABCpdf Geçişini Düşünün?
ABCpdf, WebSupergoo'dan (geçerli sürüm: v13.4.4, 9 Nisan 2026 tarihinde yayınlandı) yıllardır yetenekli bir .NET PDF kütüphanesi olmuştur. Ancak, modern geliştirme ekipleri için IronPDF'yi cazip bir alternatif yapan birçok faktör bulunmaktadır.
Lisans Karmaşıklığı
ABCpdf, gezinmek için çaba gerektirebilecek kademeli bir lisansı model kullanır. Standart Tek Bilgisayar lisansı 329$ (yalnızca 32-bit); Profesyonel 479$; Profesyonel Yeniden Dağıtım 4.790$; Grup Lisansı 33.530$'ya kadar çıkıyor. Lisanslar süresizdir ve v13 anahtarları v8–v12'yi de kapsar. Birçok geliştirici, projeler için bütçeleme yaparken bu kademeli labirentin önemli bir idari yük olduğunu bildiriyor.
Windows-Öncelikli Mimari (v13'e kadar)
ABCpdf, tarihinin çoğunda sadece Windows içindi. Linux desteği v13'te ABCpdf.ABCChrome117.Linux ve ABCpdf.ABCChrome123.Linux çalışma zamanı paketleri aracılığıyla eklendi. macOS desteklenmiyor ve birkaç Windows'a özgü özellik (XPS, WPF) Linux'te kullanılamaz durumda.
Belge Tarzı
ABCpdf'nin dokümantasyonu, ayrıntılı olsa da, modern API dokümantasyon standartlarına kıyasla eskimiş bir stil izler. Yeni kullanıcılar genellikle ihtiyaç duydukları tam örnekleri bulmakta zorlanır, özellikle daha yeni .NET sürümleriyle çalışırken.
Motor Yapılandırma Aşırı Yükü
ABCpdf, explicit motor seçimi gerektirir — EngineType.Chrome123 (v13'te varsayılan), Chrome117, Chrome86, Chrome65, Gecko, WebKit veya MSHtml — ve doc.Clear() çağrıları ile manuel kaynak yönetimi. Bu, her PDF işlemine, modern geliştiricilerin kaçınmayı tercih edeceği şablon kodunu ekler.
IronPDF vs ABCpdf: Özellik Karşılaştırması
Aşağıdaki karşılaştırma tablosu, bu iki .NET PDF kütüphanesi arasındaki temel farklılıkları vurgulamaktadır:
| Özellik | ABCpdf for .NET | IronPDF |
|---|---|---|
| Render Motoru | ABCChrome (Chrome123/117/86/65), Gecko, WebKit, MSHtml | Tam Chromium (CSS3, JavaScript) |
| Çapraz Platform | Windows-öncelikli; Linux v13'te eklendi (macOS yok) | Yerel Windows, Linux, macOS, Docker |
| Lisanslama Modeli | Standart 329$ / Pro 479$ / Pro Yeniden Dağıtım 4.790$ / Grup 33.530$, süresiz | Basit, şeffaf fiyatlandırma |
| .NET Desteği | .NET Framework 4.0+, .NET Core 3.0+, .NET 5+ | Framework 4.6.2'den .NET 9'a kadar |
| Kaynak Yönetimi | Manuel doc.Clear() gerekli |
using ifadeleri ile IDisposable |
| Lisans Kurulumu | Genellikle kayıt defteri kullanılır | Basit kod tabanlı lisans anahtarı |
| Dokümantasyon | Eskimiş tarz | Kapsamlı örneklerle modern dokümanlar |
Geçişe Başlamadan Önce
Ön Koşullar
Geliştirme 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 Package Manager erişimi
- IronPDF lisans anahtarı (ücretsiz deneme mevcut)
Tüm ABCpdf Referanslarını Bulun
.NET için ABCpdf kullanan tüm dosyaları bulmak için çözüm dizininizde bu komutları çalıştırın:
grep -r "using WebSupergoo" --include="*.cs" .
grep -r "ABCpdf" --include="*.csproj" .
grep -r "using WebSupergoo" --include="*.cs" .
grep -r "ABCpdf" --include="*.csproj" .
Bu denetim, herhangi bir değişiklik gerektiren her dosyayı tanımlar ve eksiksiz geçiş kapsamı sağlar.
Beklenebilecek Kırıcı Değişiklikler
.NET için ABCpdf ile IronPDF arasındaki mimari farklılıkları anlamak, geçiş sırasında sürprizleri önler:
| Kategori | ABCpdf Davranışı | IronPDF Davranışı | Geçiş Eylemi |
|---|---|---|---|
| Nesne Modeli | Doc sınıfı merkezi |
ChromePdfRenderer + PdfDocument |
Dökümantasyondan rendering'i ayırın |
| Kaynak Temizliği | Manuel doc.Clear() |
IDisposable deseni | using ifadelerini kullanın |
| Motor Seçimi | doc.HtmlOptions.Engine = EngineType.Chrome123 (veya MSHtml) |
Yerleşik Chromium | motor yapılandırmayı kaldırın |
| Sayfa İçin Dizimleme | 1-tabanlı (doc.Page = 1) |
0-tabanlı (pdf.Pages[0]) |
dizimleme referanslarını ayarlayın |
| Koordinatlar | doc.Rect ile nokta bazlı |
CSS-tabanlı kenar boşlukları | CSS veya RenderingOptions kullanın |
Hızlı Başlangıç: 5 Dakikalık Geçiş
1. Adım: NuGet Paketlerini Güncelleyin
# Remove ABCpdf
dotnet remove package ABCpdf
# Install IronPDF
dotnet add package IronPdf
# Remove ABCpdf
dotnet remove package ABCpdf
# Install IronPDF
dotnet add package IronPdf
Adım 2: Lisans Anahtarınızı Ayarlayın
Bunu uygulama başlangıcında ekleyin, herhangi bir IronPDF işlemi öncesinde:
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup (Program.vb or Startup.vb)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Adım 3: Küresel Bul ve Değiştir
Tüm kod tabanınızdaki ad alanı referanslarını güncelleyin:
| Bul | Bununla Değiştir |
|---|---|
using WebSupergoo.ABCpdf13; |
using IronPdf; |
using WebSupergoo.ABCpdf13.Objects; |
using IronPdf; |
using WebSupergoo.ABCpdf12; |
using IronPdf; |
using WebSupergoo.ABCpdf11; |
using IronPdf; |
Tam API Referansı
Belge Oluşturma Yöntemleri
Aşağıdaki tablo,ABCpdf for .NETyöntemlerini IronPDF eşdeğerlerine haritalar:
| ABCpdf Yöntemi | IronPDF Yöntemi |
|---|---|
new Doc() |
new ChromePdfRenderer() |
doc.AddImageUrl(url) |
renderer.RenderUrlAsPdf(url) |
doc.AddImageHtml(html) |
renderer.RenderHtmlAsPdf(html) |
doc.AddImageFile(path) |
renderer.RenderHtmlFileAsPdf(path) |
doc.Read(path) |
PdfDocument.FromFile(path) |
doc.Save(path) |
pdf.SaveAs(path) |
doc.GetData() |
pdf.BinaryData |
doc.Clear() |
using ifadesini kullanın |
Sayfa Manipülasyon Yöntemleri
| ABCpdf Yöntemi | IronPDF Yöntemi |
|---|---|
doc.PageCount |
pdf.PageCount |
doc.Page = n |
pdf.Pages[n-1] |
doc.Delete(pageId) |
pdf.RemovePages(index) |
doc.Append(otherDoc) |
PdfDocument.Merge(pdf1, pdf2) |
doc.Rect.Inset(x, y) |
RenderingOptions.MarginTop/Bottom/Left/Right |
Güvenlik ve Şifreleme Yöntemleri
| ABCpdf Yöntemi | IronPDF Yöntemi |
|---|---|
doc.Encryption.Password |
pdf.SecuritySettings.OwnerPassword |
doc.Encryption.CanPrint |
pdf.SecuritySettings.AllowUserPrinting |
doc.Encryption.CanCopy |
pdf.SecuritySettings.AllowUserCopyPasteContent |
doc.SetInfo("Title", value) |
pdf.MetaData.Title |
Kod Göç Örnekleri
Örnek 1: URL'den PDF'e HTML
Bu örnek, bir web sayfasını PDF'e dönüştürmeyi gösterir, en yaygın PDF üretim görevlerinden biri.
ABCpdf .NET için Uygulaması:
// NuGet: Install-Package ABCpdf
using System;
using WebSupergoo.ABCpdf13;
using WebSupergoo.ABCpdf13.Objects;
class Program
{
static void Main()
{
Doc doc = new Doc();
doc.HtmlOptions.Engine = EngineType.Chrome123;
doc.AddImageUrl("https://www.example.com");
doc.Save("output.pdf");
doc.Clear();
}
}
// NuGet: Install-Package ABCpdf
using System;
using WebSupergoo.ABCpdf13;
using WebSupergoo.ABCpdf13.Objects;
class Program
{
static void Main()
{
Doc doc = new Doc();
doc.HtmlOptions.Engine = EngineType.Chrome123;
doc.AddImageUrl("https://www.example.com");
doc.Save("output.pdf");
doc.Clear();
}
}
Imports System
Imports WebSupergoo.ABCpdf13
Imports WebSupergoo.ABCpdf13.Objects
Class Program
Shared Sub Main()
Dim doc As New Doc()
doc.HtmlOptions.Engine = EngineType.Chrome123
doc.AddImageUrl("https://www.example.com")
doc.Save("output.pdf")
doc.Clear()
End Sub
End Class
IronPDF Uygulaması:
// NuGet: Install-Package IronPdf
using System;
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using System;
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("output.pdf");
}
}
Imports System
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
pdf.SaveAs("output.pdf")
End Sub
End Class
IronPDF'nin yaklașımı, açık motor yapılandırması ve manuel temizliği gerektirmez, kod karmaşıklığını azaltırken tam Chrome renderleme yeteneklerini korur.
Örnek 2: HTML Dizgisi'nden PDF'e
HTML dizgilerini PDF'e dönüştürmek, dinamik raporlar ve belgeler oluşturmak için esastır.
ABCpdf .NET için Uygulaması:
// NuGet: Install-Package ABCpdf
using System;
using WebSupergoo.ABCpdf13;
using WebSupergoo.ABCpdf13.Objects;
class Program
{
static void Main()
{
string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
Doc doc = new Doc();
doc.HtmlOptions.Engine = EngineType.Chrome123;
doc.AddImageHtml(html);
doc.Save("output.pdf");
doc.Clear();
}
}
// NuGet: Install-Package ABCpdf
using System;
using WebSupergoo.ABCpdf13;
using WebSupergoo.ABCpdf13.Objects;
class Program
{
static void Main()
{
string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
Doc doc = new Doc();
doc.HtmlOptions.Engine = EngineType.Chrome123;
doc.AddImageHtml(html);
doc.Save("output.pdf");
doc.Clear();
}
}
Imports System
Imports WebSupergoo.ABCpdf13
Imports WebSupergoo.ABCpdf13.Objects
Module Program
Sub Main()
Dim html As String = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"
Dim doc As New Doc()
doc.HtmlOptions.Engine = EngineType.Chrome123
doc.AddImageHtml(html)
doc.Save("output.pdf")
doc.Clear()
End Sub
End Module
IronPDF Uygulaması:
// NuGet: Install-Package IronPdf
using System;
using IronPdf;
class Program
{
static void Main()
{
string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using System;
using IronPdf;
class Program
{
static void Main()
{
string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}
Imports System
Imports IronPdf
Module Program
Sub Main()
Dim html As String = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
End Sub
End Module
IronPDF sürümü, daha az satır kod gerektirir ve Chrome renderleme varsayılanı olarak kullanılır, bu da tüm platformlarda tutarlı çıktı sağlar.
Örnek 3: Birden Çok PDF'i Birleştir
Birden çok PDF belgesini birleştirmek, belge işleme iş akışlarında sıkça karşılaşılan bir gerekliliktir.
ABCpdf .NET için Uygulaması:
// NuGet: Install-Package ABCpdf
using System;
using WebSupergoo.ABCpdf13;
using WebSupergoo.ABCpdf13.Objects;
class Program
{
static void Main()
{
Doc doc1 = new Doc();
doc1.Read("document1.pdf");
Doc doc2 = new Doc();
doc2.Read("document2.pdf");
doc1.Append(doc2);
doc1.Save("merged.pdf");
doc1.Clear();
doc2.Clear();
}
}
// NuGet: Install-Package ABCpdf
using System;
using WebSupergoo.ABCpdf13;
using WebSupergoo.ABCpdf13.Objects;
class Program
{
static void Main()
{
Doc doc1 = new Doc();
doc1.Read("document1.pdf");
Doc doc2 = new Doc();
doc2.Read("document2.pdf");
doc1.Append(doc2);
doc1.Save("merged.pdf");
doc1.Clear();
doc2.Clear();
}
}
Imports System
Imports WebSupergoo.ABCpdf13
Imports WebSupergoo.ABCpdf13.Objects
Class Program
Shared Sub Main()
Dim doc1 As New Doc()
doc1.Read("document1.pdf")
Dim doc2 As New Doc()
doc2.Read("document2.pdf")
doc1.Append(doc2)
doc1.Save("merged.pdf")
doc1.Clear()
doc2.Clear()
End Sub
End Class
IronPDF Uygulaması:
// NuGet: Install-Package IronPdf
using System;
using System.Collections.Generic;
using IronPdf;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
}
}
// NuGet: Install-Package IronPdf
using System;
using System.Collections.Generic;
using IronPdf;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
}
}
Imports System
Imports System.Collections.Generic
Imports IronPdf
Class Program
Shared Sub Main()
Dim pdf1 = PdfDocument.FromFile("document1.pdf")
Dim pdf2 = PdfDocument.FromFile("document2.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("merged.pdf")
End Sub
End Class
IronPDF'in statik Merge metodu, çok doküman kabul eden daha temiz bir API sağlar ve bireysel Doc örneklerini izleme ve temizleme gereğini ortadan kaldırır.
Örnek 4: Kenar Boşlukları ile Tam Göç Örneği
Bu örnek, özel kenar boşlukları ile PDF oluşturmak için tam bir önce/sonra göçünü gösterir.
Öncesi (ABCpdf .NET için):
using WebSupergoo.ABCpdf13;
using WebSupergoo.ABCpdf13.Objects;
public byte[] GeneratePdf(string html)
{
Doc doc = new Doc();
doc.HtmlOptions.Engine = EngineType.Chrome123;
doc.Rect.Inset(20, 20);
doc.AddImageHtml(html);
byte[] data = doc.GetData();
doc.Clear(); // Manual cleanup required
return data;
}
using WebSupergoo.ABCpdf13;
using WebSupergoo.ABCpdf13.Objects;
public byte[] GeneratePdf(string html)
{
Doc doc = new Doc();
doc.HtmlOptions.Engine = EngineType.Chrome123;
doc.Rect.Inset(20, 20);
doc.AddImageHtml(html);
byte[] data = doc.GetData();
doc.Clear(); // Manual cleanup required
return data;
}
Imports WebSupergoo.ABCpdf13
Imports WebSupergoo.ABCpdf13.Objects
Public Function GeneratePdf(html As String) As Byte()
Dim doc As New Doc()
doc.HtmlOptions.Engine = EngineType.Chrome123
doc.Rect.Inset(20, 20)
doc.AddImageHtml(html)
Dim data As Byte() = doc.GetData()
doc.Clear() ' Manual cleanup required
Return data
End Function
Sonrası (IronPDF):
using IronPdf;
public byte[] GeneratePdf(string html)
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
using var pdf = renderer.RenderHtmlAsPdf(html);
return pdf.BinaryData; // Automatic cleanup with 'using'
}
using IronPdf;
public byte[] GeneratePdf(string html)
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
using var pdf = renderer.RenderHtmlAsPdf(html);
return pdf.BinaryData; // Automatic cleanup with 'using'
}
Imports IronPdf
Public Function GeneratePdf(html As String) As Byte()
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.MarginTop = 20
renderer.RenderingOptions.MarginBottom = 20
renderer.RenderingOptions.MarginLeft = 20
renderer.RenderingOptions.MarginRight = 20
Using pdf = renderer.RenderHtmlAsPdf(html)
Return pdf.BinaryData ' Automatic cleanup with 'Using'
End Using
End Function
İleri Göç Senaryoları
ASP.NET Core Web Uygulaması
.NET 6+ ile web uygulamaları geliştiren ekipler için önerilen model şudur:
ABCpdf Deseni:
[HttpPost]
public IActionResult GeneratePdf([FromBody] ReportRequest request)
{
Doc doc = new Doc();
doc.HtmlOptions.Engine = EngineType.Chrome123;
doc.AddImageHtml(request.Html);
byte[] pdfBytes = doc.GetData();
doc.Clear();
return File(pdfBytes, "application/pdf", "report.pdf");
}
[HttpPost]
public IActionResult GeneratePdf([FromBody] ReportRequest request)
{
Doc doc = new Doc();
doc.HtmlOptions.Engine = EngineType.Chrome123;
doc.AddImageHtml(request.Html);
byte[] pdfBytes = doc.GetData();
doc.Clear();
return File(pdfBytes, "application/pdf", "report.pdf");
}
<HttpPost>
Public Function GeneratePdf(<FromBody> request As ReportRequest) As IActionResult
Dim doc As New Doc()
doc.HtmlOptions.Engine = EngineType.Chrome123
doc.AddImageHtml(request.Html)
Dim pdfBytes As Byte() = doc.GetData()
doc.Clear()
Return File(pdfBytes, "application/pdf", "report.pdf")
End Function
IronPDF Deseni:
[HttpPost]
public IActionResult GeneratePdf([FromBody] ReportRequest request)
{
var renderer = new ChromePdfRenderer();
using var pdf = renderer.RenderHtmlAsPdf(request.Html);
return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
[HttpPost]
public IActionResult GeneratePdf([FromBody] ReportRequest request)
{
var renderer = new ChromePdfRenderer();
using var pdf = renderer.RenderHtmlAsPdf(request.Html);
return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
<HttpPost>
Public Function GeneratePdf(<FromBody> request As ReportRequest) As IActionResult
Dim renderer As New ChromePdfRenderer()
Using pdf = renderer.RenderHtmlAsPdf(request.Html)
Return File(pdf.BinaryData, "application/pdf", "report.pdf")
End Using
End Function
Asenkron PDF Oluşturma
ABCpdf'nin yerel asenkron desteği yoktur. IronPDF, daha iyi web uygulama performansı için asenkron yöntemler sunar:
using IronPdf;
public async Task<byte[]> GeneratePdfAsync(string html)
{
var renderer = new ChromePdfRenderer();
using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
return pdf.BinaryData;
}
using IronPdf;
public async Task<byte[]> GeneratePdfAsync(string html)
{
var renderer = new ChromePdfRenderer();
using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
return pdf.BinaryData;
}
Imports IronPdf
Public Async Function GeneratePdfAsync(html As String) As Task(Of Byte())
Dim renderer As New ChromePdfRenderer()
Using pdf = Await renderer.RenderHtmlAsPdfAsync(html)
Return pdf.BinaryData
End Using
End Function
Bağımlılık Enjeksiyonu Kurulumu
Mevcut C# modellerini kullanarak modern .NET uygulamalarında IronPDF'yi kaydedin:
// Program.cs (.NET 6+)
builder.Services.AddSingleton<ChromePdfRenderer>();
// Or create a service wrapper
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: builder.Services.AddSingleton<IPdfService, IronPdfService>();
// Program.cs (.NET 6+)
builder.Services.AddSingleton<ChromePdfRenderer>();
// Or create a service wrapper
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: builder.Services.AddSingleton<IPdfService, IronPdfService>();
Imports Microsoft.Extensions.DependencyInjection
Imports System.Threading.Tasks
' Program.vb (.NET 6+)
builder.Services.AddSingleton(Of ChromePdfRenderer)()
' Or create a service wrapper
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: builder.Services.AddSingleton(Of IPdfService, IronPdfService)()
Performans Optimizasyon İpuçları
Toplu İşlemler için Renderlayıcıyı Yeniden Kullanın
// Good: Single renderer instance
var renderer = new ChromePdfRenderer();
foreach (var html in htmlList)
{
using var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs($"output_{i}.pdf");
}
// Bad: New renderer each time (slower startup)
foreach (var html in htmlList)
{
var renderer = new ChromePdfRenderer(); // Overhead!
using var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs($"output_{i}.pdf");
}
// Good: Single renderer instance
var renderer = new ChromePdfRenderer();
foreach (var html in htmlList)
{
using var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs($"output_{i}.pdf");
}
// Bad: New renderer each time (slower startup)
foreach (var html in htmlList)
{
var renderer = new ChromePdfRenderer(); // Overhead!
using var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs($"output_{i}.pdf");
}
Imports System
' Good: Single renderer instance
Dim renderer As New ChromePdfRenderer()
For Each html In htmlList
Using pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs($"output_{i}.pdf")
End Using
Next
' Bad: New renderer each time (slower startup)
For Each html In htmlList
Dim renderer As New ChromePdfRenderer() ' Overhead!
Using pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs($"output_{i}.pdf")
End Using
Next
Bellek Kullanımı Karşılaştırması
| Senaryo | ABCpdf for .NET | IronPDF |
|---|---|---|
| Tek 10 sayfalık PDF | ~80 MB | ~50 MB |
| Toplu 100 PDF | Yüksek (manuel temizleme) | ~100 MB |
| Büyük HTML (5MB+) | Değişken | ~150 MB |
Yaygın Göç Sorunlarını Giderme
PDF Boş Görünüyor
Belirti: Göçten sonra çıktı PDF'in boş sayfaları var.
Çözüm: JavaScript içeriği renderleme öncesi tamamen yüklenmemiş olabilir:
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.WaitFor.RenderDelay(2000); // Wait 2 seconds
// Or wait for specific element:
renderer.RenderingOptions.WaitFor.HtmlElementById("content-loaded");
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.WaitFor.RenderDelay(2000); // Wait 2 seconds
// Or wait for specific element:
renderer.RenderingOptions.WaitFor.HtmlElementById("content-loaded");
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.WaitFor.RenderDelay(2000) ' Wait 2 seconds
' Or wait for specific element:
renderer.RenderingOptions.WaitFor.HtmlElementById("content-loaded")
Üstbilgi/Altbilgiler Görünmüyor
Belirti: TextHeader/TextFooter çıktı dosyasında görünmüyor.
Çözüm: Kenar boşluklarının üstbilgi/altbilgi içeriği için boşluk bıraktığından emin olun:
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.MarginTop = 40; // mm - leave room for header
renderer.RenderingOptions.MarginBottom = 40; // mm - leave room for footer
renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
CenterText = "Header Text",
FontSize = 12
};
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.MarginTop = 40; // mm - leave room for header
renderer.RenderingOptions.MarginBottom = 40; // mm - leave room for footer
renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
CenterText = "Header Text",
FontSize = 12
};
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.MarginTop = 40 ' mm - leave room for header
renderer.RenderingOptions.MarginBottom = 40 ' mm - leave room for footer
renderer.RenderingOptions.TextHeader = New TextHeaderFooter With {
.CenterText = "Header Text",
.FontSize = 12
}
Geçiş Kontrol Listesi
Öncesi-Geçiş
- Tüm ABCpdf kullanımını
grep -r "WebSupergoo" --include="*.cs" .ile denetleyin - Mevcut PDF çıktısı gereksinimlerini belgeleyin
- Karşılaştırma için örnek PDF çıktıları ile test vakaları oluşturun
- IronPDF lisans anahtarı edinin
- Kod tabanını yedekleyin
Göç Sırasında
- ABCpdf NuGet paketini kaldırın -IronPDF NuGet paketini yükleyin
- Lisans anahtarını uygulama başlangıcına ekleyin
- Tüm
usingifadelerini güncelleyin DocoluşturmasınıChromePdfRenderer'a dönüştüründoc.Clear()ifadesiniusingifadeleri ile değiştirin- API haritalamasına göre yöntem çağrılarını güncelleyin
- Koordinat tabanlı düzenleri CSS kenar boşluklarına dönüştürün
Geçiş Sonrası
- Tüm mevcut PDF testlerini çalıştırın
- PDF çıktılarının görsel karşılaştırması (ABCpdf vs IronPDF)
- Test ortamında tüm PDF iş akışlarını test edin
- Performans benchmark karşılaştırması
- ABCpdf lisans yapılandırmasını kaldırın
- CI/CD boru hattı bağımlılıklarını güncelleyin

