Jak przejść z ABCpdf for .NET na IronPDF
Przejście z ABCpdf dla .NET naIronPDFfor .NET to strategiczna aktualizacja dla zespołów programistów, które chcą uprościć licencjonowanie, uzyskać nowoczesną dokumentację i natywną obsługę wielu platform. Ten szczegółowy przewodnik zawiera szczegółowy plan migracji, wraz z mapowaniami API i przykładami konwersji kodu z rzeczywistych scenariuszy.
Niezależnie od tego, czy pracujesz z platformą .NET Framework 4.6.2, czy planujesz przejść na .NET 9 i nowsze wersje do 2026 r., ten przewodnik migracji ABCpdf zapewnia łatwe przejście na silnik renderującyIronPDFoparty na przeglądarce Chrome.
Dlaczego warto rozważyć migrację do ABCpdf?
ABCpdf firmy WebSupergoo od lat jest wydajną biblioteką .NET do obsługi plików PDF. Jednak kilka czynników sprawia, żeIronPDFjest atrakcyjną alternatywą dla nowoczesnych zespołów programistycznych planujących projekty na lata 2025 i 2026.
Złożoność licencji
ABCpdf stosuje wielopoziomowy model licencjonowania, który może być trudny w obsłudze. Ceny zaczynają się od 349 USD, ale rosną w zależności od funkcji, wdrożeń serwerowych i przypadków użycia. Wielu programistów uważa ten labirynt licencyjny za znaczne obciążenie administracyjne podczas planowania budżetu projektów.
Architektura Windows-First
Chociaż ABCpdf dodało obsługę wielu platform, jego historyczna konstrukcja skoncentrowana na systemie Windows czasami ujawnia się w procesach pracy. Programiści zajmujący się kontenerami Linux, środowiskami Docker lub konfiguracjami programistycznymi dla systemu macOS mogą napotkać trudności, których nie przewidzieli podczas planowania projektu.
Styl dokumentacji
Dokumentacja ABCpdf, choć wyczerpująca, jest napisana w starszym stylu, który może wydawać się przestarzały w porównaniu z nowoczesnymi standardami dokumentacji API. Nowi użytkownicy często mają trudności ze znalezieniem dokładnie takich przykładów, jakich potrzebują, zwłaszcza podczas pracy z nowszymi wersjami .NET.
Obróbka konfiguracji silnika
ABCpdf wymaga wyraźnego wyboru silnika (Gecko, Trident lub Chrome) oraz ręcznego zarządzania zasobami za pomocą wywołań Clear(). Powoduje to dodanie standardowego kodu do każdej operacji na plikach PDF, czego współcześni programiści woleliby uniknąć.
IronPDFvs ABCpdf: Porównanie funkcji
Poniższa tabela porównawcza przedstawia kluczowe różnice między dwiema bibliotekami .NET do obsługi plików PDF:
| Funkcja | ABCpdf dla .NET | IronPDF |
|---|---|---|
| Silnik renderujący | Gecko/Trident/Chrome (konfigurowalne) | Pełny Chromium (CSS3, JavaScript) |
| Wieloplatformowe | Dodano później, Windows-first | Natywne systemy Windows, Linux, macOS, Docker |
| Model licencyjny | Złożony, wielopoziomowy cennik od 349 USD | Prosta, przejrzysta polityka cenowa |
| Wsparcie .NET | Skupienie się na platformie .NET Framework | Framework 4.6.2 do .NET Framework 9+ |
| Zarządzanie zasobami | Wymagana instrukcja doc.Clear() |
IDisposable z instrukcjami using |
| Konfiguracja licencji | Często korzysta z rejestru | Prosty klucz licencyjny oparty na kodzie |
| Dokumentacja | Styl przestarzały | Nowoczesna dokumentacja z obszernymi przykładami |
Przed rozpoczęciem migracji
Wymagania wstępne
Upewnij się, że Twoje środowisko programistyczne spełnia następujące wymagania:
- .NET Framework 4.6.2+ lub .NET Core 3.1+ / .NET 5-9
- Visual Studio 2019+ lub JetBrains Rider
- Dostęp do menedżera pakietów NuGet
- Klucz licencyjny IronPDF (dostępna bezpłatna wersja próbna)
Znajdź wszystkie odniesienia do ABCpdf
Uruchom te polecenia w katalogu rozwiązania, aby zlokalizować wszystkie pliki korzystające z biblioteki ABCpdf dla platformy .NET:
grep -r "using WebSupergoo" --include="*.cs" .
grep -r "ABCpdf" --include="*.csproj" .
grep -r "using WebSupergoo" --include="*.cs" .
grep -r "ABCpdf" --include="*.csproj" .
Niniejszy audyt identyfikuje wszystkie pliki wymagające modyfikacji, zapewniając pełny zakres migracji.
Zmiany wymagające dostosowania
Zrozumienie różnic architektonicznych między ABCpdf dla .NET aIronPDFpozwala uniknąć niespodzianek podczas migracji:
| Kategoria | Zachowanie ABCpdf | DziałanieIronPDF | Działanie migracyjne |
|---|---|---|---|
| Model obiektowy | Doc klasa jest kluczowa |
ChromePdfRenderer + PdfDocument |
Oddziel renderowanie od dokumentu |
| Porządkowanie zasobów | Podręcznik doc.Clear() |
Wzorzec IDisposable | Użyj instrukcji using |
| Wybór silnika | doc.HtmlOptions.Engine = EngineType.Chrome |
Wbudowane w przeglądarkę Chrome | Usuń konfigurację silnika |
| Indeksowanie stron | 1-based (doc.Page = 1) |
0-based (pdf.Pages[0]) |
Dostosuj odniesienia do indeksu |
| Współrzędne | System punktowy z doc.Rect |
Marginesy oparte na CSS | Użyj CSS lub RenderingOptions |
Szybki start: 5-minutowa migracja
Krok 1: Zaktualizuj pakiety NuGet
# Remove ABCpdf
dotnet remove package ABCpdf
# Install IronPDF
dotnet add package IronPdf
# Remove ABCpdf
dotnet remove package ABCpdf
# Install IronPDF
dotnet add package IronPdf
Krok 2: Ustaw swój klucz licencyjny
Dodaj to przy uruchomieniu aplikacji, przed wykonaniem jakichkolwiek operacji IronPDF:
// 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"
Krok 3: Globalne wyszukiwanie i zamiana
Zaktualizuj wszystkie odniesienia do przestrzeni nazw w całym kodzie:
| Znajdź | Zastąp przez |
|---|---|
using WebSupergoo.ABCpdf13; |
using IronPdf; |
using WebSupergoo.ABCpdf13.Objects; |
using IronPdf; |
using WebSupergoo.ABCpdf12; |
using IronPdf; |
using WebSupergoo.ABCpdf11; |
using IronPdf; |
Kompletna dokumentacija API
Metody tworzenia dokumentów
Poniższa tabela przedstawia mapowanie metod ABCpdf dla .NET na ich odpowiedniki wIronPDFfor .NET:
| Metoda ABCpdf | MetodaIronPDF |
|---|---|
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() |
Użyj instrukcji using |
Metody manipulacji stronami
| Metoda ABCpdf | MetodaIronPDF |
|---|---|
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 |
Metody bezpieczeństwa i szyfrowania
| Metoda ABCpdf | MetodaIronPDF |
|---|---|
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 |
Przykłady migracji kodu
Przykład 1: Konwersja HTML do PDF z adresu URL
Ten przykład pokazuje konwersję strony internetowej do formatu PDF, co jest jednym z najczęstszych zadań związanych z generowaniem plików PDF.
Wdrożenie ABCpdf dla .NET:
// 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.Chrome;
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.Chrome;
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.Chrome
doc.AddImageUrl("https://www.example.com")
doc.Save("output.pdf")
doc.Clear()
End Sub
End Class
Wdrożenie IronPDF:
// 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
PodejścieIronPDFeliminuje potrzebę jawnej konfiguracji silnika i ręcznego czyszczenia, zmniejszając złożoność kodu przy zachowaniu pełnych możliwości renderowania w przeglądarce Chrome.
Przykład 2: Ciąg znaków HTML do pliku PDF
Konwersja ciągów HTML do formatu PDF jest niezbędna do generowania dynamicznych raportów i dokumentów.
Wdrożenie ABCpdf dla .NET:
// 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.Chrome;
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.Chrome;
doc.AddImageHtml(html);
doc.Save("output.pdf");
doc.Clear();
}
}
Imports System
Imports WebSupergoo.ABCpdf13
Imports WebSupergoo.ABCpdf13.Objects
Class Program
Shared 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.Chrome
doc.AddImageHtml(html)
doc.Save("output.pdf")
doc.Clear()
End Sub
End Class
Wdrożenie IronPDF:
// 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
WersjaIronPDFwymaga mniej linii kodu i domyślnie korzysta z renderowania Chrome, co zapewnia spójny wynik na wszystkich platformach.
Przykład 3: Łączenie wielu plików PDF
Łączenie wielu dokumentów PDF jest częstym wymaganiem w procesach przetwarzania dokumentów.
Wdrożenie ABCpdf dla .NET:
// 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
Wdrożenie IronPDF:
// 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
Statyczna metoda Merge firmyIronPDFzapewnia bardziej przejrzysty interfejs API, który akceptuje wiele dokumentów, eliminując potrzebę śledzenia i czyszczenia poszczególnych instancji Doc.
Przykład 4: Kompletny wzorzec migracji z marginesami
Ten przykład pokazuje kompletną migrację przed i po, dotyczącą generowania plików PDF z niestandardowymi marginesami.
Przed (ABCpdf dla .NET):
using WebSupergoo.ABCpdf13;
using WebSupergoo.ABCpdf13.Objects;
public byte[] GeneratePdf(string html)
{
Doc doc = new Doc();
doc.HtmlOptions.Engine = EngineType.Chrome;
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.Chrome;
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.Chrome
doc.Rect.Inset(20, 20)
doc.AddImageHtml(html)
Dim data As Byte() = doc.GetData()
doc.Clear() ' Manual cleanup required
Return data
End Function
Po (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
Zaawansowane scenariusze migracji
Aplikacja internetowa ASP.NET Core .NET Core
Dla zespołów tworzących aplikacje internetowe w .NET 6+ lub planujących wdrożenie .NET 10 w latach 2025–2026 zalecamy następujący schemat:
Wzór ABCpdf:
[HttpPost]
public IActionResult GeneratePdf([FromBody] ReportRequest request)
{
Doc doc = new Doc();
doc.HtmlOptions.Engine = EngineType.Chrome;
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.Chrome;
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.Chrome
doc.AddImageHtml(request.Html)
Dim pdfBytes As Byte() = doc.GetData()
doc.Clear()
Return File(pdfBytes, "application/pdf", "report.pdf")
End Function
Wzór IronPDF:
[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
Asynchroniczne generowanie plików PDF
ABCpdf nie obsługuje natywnie trybu asynchronicznego.IronPDFudostępnia metody asynchroniczne zapewniające lepszą wydajność aplikacji internetowych:
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
Konfiguracja wstrzykiwania zależności
ZarejestrujIronPDFw nowoczesnych aplikacjach .NET przy użyciu wzorców C# 12+ zgodnych z przyszłymi wersjami C# 14:
// 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)()
Wskazówki dotyczące optymalizacji wydajności
Ponowne wykorzystanie renderera do operacji wsadowych
// 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
Porównanie zużycia pamięci
| Scenariusz | ABCpdf dla .NET | IronPDF |
|---|---|---|
| Pojedynczy plik PDF o objętości 10 stron | ~80 MB | ~50 MB |
| Partia 100 plików PDF | Wysoki (ręczne czyszczenie) | ~100 MB |
| Duży plik HTML (5 MB+) | Zmienna | ~150 MB |
Rozwiązywanie typowych problemów związanych z migracją
Plik PDF wyświetla się jako pusty
Objaw: Wygenerowany plik PDF zawiera puste strony po migracji.
Rozwiązanie: Treść JavaScript może nie zostać w pełni załadowana przed renderowaniem:
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")
Brak nagłówków/stopek
Objaw: TextHeader/TextFooter nie są widoczne w wynikach.
Rozwiązanie: Upewnij się, że marginesy pozostawiają miejsce na treść nagłówka/stopki:
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
}
Lista kontrolna migracji
Przed migracją
- Sprawdź wszystkie użycia ABCpdf za pomocą
grep -r "WebSupergoo" --include="*.cs" . - Dokumentacja aktualnych wymagań dotyczących wyjścia PDF
- Utwórz przypadki testowe z przykładowymi plikami PDF do porównania
- Uzyskaj klucz licencyjny IronPDF
- Kopia zapasowa kodu źródłowego
Podczas migracji
- Usuń pakiet ABCpdf NuGet
- Zainstaluj pakiet IronPdf NuGet
- Dodaj klucz licencyjny do uruchamiania aplikacji
- Zaktualizuj wszystkie instrukcje
using - Zamień instancję
DocnaChromePdfRenderer - Zastąp instrukcje
doc.Clear()nausing - Aktualizacja wywołań metod zgodnie z mapowaniem API
- Konwersja układów opartych na współrzędnych na marginesy CSS
Po migracji
- Uruchom wszystkie istniejące testy PDF
- Wizualne porównanie wyników w formacie PDF (ABCpdf vs IronPDF)
- Przetestuj wszystkie procesy związane z plikami PDF w środowisku testowym
- Porównanie wyników testów wydajnościowych
- Usuń konfigurację licencji ABCpdf
- Aktualizacja zależności potoku CI/CD

