Przejdź do treści stopki
PRZEWODNIKI MIGRACJI

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" .
SHELL

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
SHELL

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"
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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)()
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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
}
$vbLabelText   $csharpLabel

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ę Doc na ChromePdfRenderer
  • Zastąp instrukcje doc.Clear() na using
  • 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
Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie