Przejdź do treści stopki
PRZEWODNIKI MIGRACJI

Jak przejść z ABCpdf for .NET na IronPDF

Przejście z ABCpdf dla .NET na IronPDF for .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 .NET Framework 4.6.2, czy celujesz w .NET 9, ten przewodnik po migracji ABCpdf zapewnia łatwe przejście do silnika renderującego opartego na Chrome w IronPDF.

Dlaczego warto rozważyć migrację do ABCpdf?

ABCpdf od WebSupergoo (aktualna linia: v13.4.4, wydanie 9 kwietnia 2026) od lat jest zdolną biblioteką PDF dla .NET. Jednak kilka czynników sprawia, że IronPDF jest atrakcyjną alternatywą dla nowoczesnych zespołów deweloperskich.

Złożoność licencji

ABCpdf używa modelu licencjonowania warstwowego, który może wymagać wysiłku przy nawigacji. Standardowa licencja na jeden komputer to $329 (tylko 32-bitowa); Professional to $479; Profesjonalna redystrybucja to $4 790; grupowa licencja wynosi $33 530. Licencje są wieczyste, a klucze v13 obejmują również v8–v12. Wielu programistów zgłasza labirynt poziomów jako znaczące obciążenie administracyjne przy budżetowaniu projektów.

Architektura zorientowana na Windows (do v13)

ABCpdf był tylko na Windows przez większość swojej historii. Wsparcie dla Linux dodano w v13 za pomocą pakietów uruchomieniowych ABCpdf.ABCChrome117.Linux i ABCpdf.ABCChrome123.Linux. macOS nie jest obsługiwany, a kilka funkcji specyficznych dla Windows (XPS, WPF) pozostaje niedostępnych na Linux.

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 jawnego wyboru silnika — EngineType.Chrome123 (domyślny w v13), Chrome117, Chrome86, Chrome65, Gecko, WebKit, lub MSHtml — oraz ręcznego zarządzania zasobami z wywołaniami doc.Clear(). Powoduje to dodanie standardowego kodu do każdej operacji na plikach PDF, czego współcześni programiści woleliby uniknąć.

IronPDF vs 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 ABCChrome (Chrome123/117/86/65), Gecko, WebKit, MSHtml Pełny Chromium (CSS3, JavaScript)
Wielopłatformowe Pierwszeństwo dla Windowsa; Linux dodany w v13 (brak macOS) Natywne systemy Windows, Linux, macOS, Docker
Model licencyjny Standard $329 / Pro $479 / Pro Redystrybucja $4 790 / Grupa $33 530, wieczyste Prosta, przejrzysta polityka cenowa
Wsparcie .NET .NET Framework 4.0+, .NET Core 3.0+, .NET 5+ Framework 4.6.2 do .NET Framework 9
Zarządzanie zasobami Wymagane ręczne 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 a IronPDF pozwala uniknąć niespodzianek podczas migracji:

Kategoria Zachowanie ABCpdf Działanie IronPDF Działanie migracyjne
Model obiektowy Klasa Doc jest centralna ChromePdfRenderer + PdfDocument Oddziel renderowanie od dokumentu
Porządkowanie zasobów Ręczne doc.Clear() Wzorzec IDisposable Użyj instrukcji using
Wybór silnika doc.HtmlOptions.Engine = EngineType.Chrome123 (lub MSHtml) Wbudowany Chromium Usuń konfigurację silnika
Indeksowanie stron 1-based (doc.Page = 1) 0-based (pdf.Pages[0]) Dostosuj odniesienia do indeksu
Współrzędne Oparte na punktach 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 w IronPDF for .NET:

Metoda ABCpdf Metoda IronPDF
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 Metoda IronPDF
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 Metoda IronPDF
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.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
$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ście IronPDF eliminuje 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.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
$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

Wersja IronPDF wymaga 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 w IronPDF dostarcza czystsze API, które akceptuje wiele dokumentów, eliminując potrzebę śledzenia i czyszczenia pojedynczych 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.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
$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 budujących aplikacje webowe z .NET 6+, oto zalecany wzorzec:

Wzór ABCpdf:

[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
$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.IronPDF udostę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

Zarejestruj IronPDF w nowoczesnych aplikacjach .NET, używając bieżących wzorców C#:

// 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ą

  • Audytuj całe użycie ABCpdf z 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 NuGet IronPDF
  • Dodaj klucz licencyjny do uruchamiania aplikacji
  • Zaktualizuj wszystkie instrukcje using
  • Przekształć tworzenie Doc na ChromePdfRenderer
  • Zastąp doc.Clear() instrukcjami 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

Zwróć uwagęABCpdf jest zastrzeżonym znakiem towarowym odpowiedniego właściciela. Ta strona nie jest powiązana, popierana ani sponsorowana przez WebSupergoo Software. Wszystkie nazwy produktów, logo i marki są własnością ich odpowiednich właścicieli. Porównania mają charakter wyłącznie informacyjny i odzwierciedlają informacje dostępne publicznie w momencie pisania.

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

Zespół wsparcia Iron

Jesteśmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwoń do mnie