Przejdź do treści stopki
PRZEWODNIKI MIGRACJI

Jak przejść z Easy PDF SDK na IronPDF w języku C#

BCL Technologies, oryginalny wydawca easyPDF SDK, został przejęty przez Apryse (dawniej PDFTron) w marcu 2020 roku, a produkt jest teraz pozycjonowany jako przestarzały SDK obok Apryse PDF SDK. Sam SDK polega na kilku przestarzałych technologiach, które stwarzają problemy z wdrażaniem i utrzymaniem w nowoczesnych środowiskach developerskich.

Typowe problemy związane z wdrażaniem Easy PDF SDK

Programiści często napotykają następujące problemy podczas pracy z Easy PDF SDK:

  • bcl.easypdf.interop.easypdfprinter.dll error loading
  • COM object that has been separated from its underlying RCW cannot be used
  • Timeout expired waiting for print job to complete
  • The printer operation failed because the service is not running
  • Error: Access denied (wymagana interaktywna sesja)
  • Cannot find printer: BCL easyPDF Printer

Te błędy typowo wynikają z architektury Easy PDF SDK, która polega na wirtualnych sterownikach drukarki, wymianie COM i interaktywnych sesjach Windows, które są trudne do odtworzenia w nowoczesnych środowiskach serwerowych.

Easy PDF SDKa IronPDF: kluczowe różnice

Funkcja Easy PDF SDK IronPDF
Platforma Tylko dla systemu Windows Windows, Linux, macOS, Docker
Zależność od pakietu Office Wymagane None
Dystrybucja Instalator MSI + ręczne odniesienia do plików DLL (brak pakietu NuGet) Pakiet NuGet (IronPdf)
Instalacja MSI + wirtualny sterownik drukarki + rejestracja COM Pakiet NuGet
Wsparcie serwerowe Zwykle wymaga interaktywnej sesji Windows Działa w trybie headless
Renderowanie HTML Podstawowe (w środowisku biurowym) Pełny Chromium (CSS3, JS)
Wsparcie .NET Ograniczony .NET Core .NET Framework 4.6.2+ oraz .NET 5/6/7/8/9
Wzorzec asynchroniczny Oparte na wywołaniach zwrotnych Natywne async/await
Obsługa kontenerów Nie wspierane przez sprzedawcę Pełna wersja Docker/Kubernetes

Ograniczenia platformy

Easy PDF SDK jest skierowany na Windows i polega na instalacjach Microsoft Office dla konwersji dokumentów Office, co ogranicza jego użycie na Linux, macOS i środowiskach kontenerowych jak Docker. Ta zależność często powoduje, że konfiguracja serwerowa jest bardziej złożona i wiąże wdrożenie z Windows — ograniczenie dla zespołów praktykujących DevOps wieloplatformowe lub polegających na kontenerach Linux.

Przygotowania przed migracją

Wymagania wstępne

Upewnij się, że Twoje środowisko spełnia następujące wymagania:

  • .NET Framework 4.6.2+ lub .NET Core 3.1 / .NET 5-9
  • Visual Studio 2019+ lub VS Code z rozszerzeniem C#
  • Dostęp do menedżera pakietów NuGet
  • Klucz licencyjny IronPDF(bezpłatna wersja próbna dostępna na stronie ironpdf.com)

Audyt wykorzystania Easy PDF SDK

Uruchom te polecenia w katalogu rozwiązania, aby zidentyfikować wszystkie odwołania do Easy PDF SDK:

# Find all BCL using statements
grep -r "using BCL" --include="*.cs" .

# Find Printer/PDFDocument usage
grep -r "Printer\|PDFDocument\|PDFConverter\|HTMLConverter" --include="*.cs" .

# Find COM interop references
grep -r "easyPDF\|BCL.easyPDF" --include="*.csproj" .

# Find configuration settings
grep -r "PageOrientation\|TimeOut\|PrintOffice" --include="*.cs" .
# Find all BCL using statements
grep -r "using BCL" --include="*.cs" .

# Find Printer/PDFDocument usage
grep -r "Printer\|PDFDocument\|PDFConverter\|HTMLConverter" --include="*.cs" .

# Find COM interop references
grep -r "easyPDF\|BCL.easyPDF" --include="*.csproj" .

# Find configuration settings
grep -r "PageOrientation\|TimeOut\|PrintOffice" --include="*.cs" .
SHELL

Zmiany wymagające dostosowania

Wzorzec Easy PDF SDK Wymagana zmiana
new Printer() Użyj ChromePdfRenderer
PrintOfficeDocToPDF() Konwersja plików Office obsługiwana w inny sposób
RenderHTMLToPDF() RenderHtmlAsPdf()
Odniesienia do interoperacyjności COM Usuń całkowicie
Konfiguracja sterownika drukarki Nie jest potrzebne
BeginPrintToFile() wywołania zwrotne Natywne async/await
Wymagania dotyczące sesji interaktywnej Działa w trybie headless
Indeksowanie stron oparte na 1 Indeksowanie oparte na 0
Limit czasu w sekundach Limit czasu w milisekundach

Proces migracji krok po kroku

Krok 1: Usuń Easy PDF SDK

Easy PDF SDK jest dystrybuowany jako instalator MSI, a nie pakiet NuGet, a projekty zazwyczaj odwołują się bezpośrednio do jego zestawów (takich jak BCL.easyPDF.PDFConverter.dll dla .NET Framework lub BCL.easyPDF.PDFConverter.NetCore.dll dla .NET Core). Usuń wszystkie odniesienia:

  1. Odinstaluj BCL EasyPDF SDK z sekcji Programy i funkcje
  2. Usuń wpisy DLL <Reference> ze swojego .csproj
  3. Usuń odniesienia do COM Interop
  4. Wyczyść wpisy GAC, jeśli są obecne

Krok 2: Zainstaluj IronPDF

# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
SHELL

Lub za pomocą konsoli menedżera pakietów:

Install-Package IronPdf

Krok 3: Zaktualizuj odniesienia do przestrzeni nazw

Zastąp przestrzenie nazwEasy PDF SDKnazwą IronPDF:

// Remove these
using BCL.easyPDF;
using BCL.easyPDF.PDFConverter;
using BCL.easyPDF.PDFProcessor;
using BCL.easyPDF.Printer;

// Add these
using IronPdf;
using IronPdf.Rendering;
// Remove these
using BCL.easyPDF;
using BCL.easyPDF.PDFConverter;
using BCL.easyPDF.PDFProcessor;
using BCL.easyPDF.Printer;

// Add these
using IronPdf;
using IronPdf.Rendering;
Imports IronPdf
Imports IronPdf.Rendering
$vbLabelText   $csharpLabel

Kompletna dokumentacja API

Mapowanie klas podstawowych

KlasaEasy PDF SDK Odpowiednik IronPDF
Printer ChromePdfRenderer
PDFDocument PdfDocument
HTMLConverter ChromePdfRenderer
PrinterConfiguration ChromePdfRenderOptions
PageOrientation PdfPaperOrientation
PageSize PdfPaperSize
SecurityHandler PdfDocument.SecuritySettings

Metody tworzenia plików PDF

MetodaEasy PDF SDK Metoda IronPDF
printer.RenderHTMLToPDF(html, path) renderer.RenderHtmlAsPdf(html).SaveAs(path)
printer.RenderUrlToPDF(url, path) renderer.RenderUrlAsPdf(url).SaveAs(path)
htmlConverter.ConvertHTML(html, doc) renderer.RenderHtmlAsPdf(html)
htmlConverter.ConvertURL(url, doc) renderer.RenderUrlAsPdf(url)

Metody manipulacji plikami PDF

MetodaEasy PDF SDK Metoda IronPDF
doc.Append(doc2) PdfDocument.Merge(pdf1, pdf2)
doc.ExtractPages(start, end) pdf.CopyPages(start, end)
doc.DeletePage(index) pdf.RemovePages(index)
doc.GetPageCount() pdf.PageCount
doc.Save(path) pdf.SaveAs(path)
doc.Close() pdf.Dispose() lub using
doc.ExtractText() pdf.ExtractAllText()

Opcje konfiguracji

OpcjaEasy PDF SDK Opcja IronPDF
config.TimeOut RenderingOptions.Timeout
config.PageOrientation = Landscape RenderingOptions.PaperOrientation = Landscape
config.PageSize = A4 RenderingOptions.PaperSize = PdfPaperSize.A4
config.MarginTop/Bottom/Left/Right RenderingOptions.MarginTop, itd.

Przykłady migracji kodu

Ciąg znaków HTML do pliku PDF

Łatwa implementacja Easy PDF SDK:

// Reference BCL.easyPDF.PDFConverter.dll (or the .NetCore variant)
// installed by the easyPDF SDK MSI — there is no NuGet package.
using BCL.easyPDF;
using System;

class Program
{
    static void Main()
    {
        var pdf = new PDFDocument();
        var htmlConverter = new HTMLConverter();
        htmlConverter.ConvertHTML("<h1>Hello World</h1>", pdf);
        pdf.Save("output.pdf");
        pdf.Close();
    }
}
// Reference BCL.easyPDF.PDFConverter.dll (or the .NetCore variant)
// installed by the easyPDF SDK MSI — there is no NuGet package.
using BCL.easyPDF;
using System;

class Program
{
    static void Main()
    {
        var pdf = new PDFDocument();
        var htmlConverter = new HTMLConverter();
        htmlConverter.ConvertHTML("<h1>Hello World</h1>", pdf);
        pdf.Save("output.pdf");
        pdf.Close();
    }
}
Imports BCL.easyPDF
Imports System

Class Program
    Shared Sub Main()
        Dim pdf As New PDFDocument()
        Dim htmlConverter As New HTMLConverter()
        htmlConverter.ConvertHTML("<h1>Hello World</h1>", pdf)
        pdf.Save("output.pdf")
        pdf.Close()
    End Sub
End Class
$vbLabelText   $csharpLabel

Wdrożenie IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
        Dim renderer As New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>")
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF integruje renderowanie HTML w pojedynczym wywołaniu renderera i pozwala Dispose zająć się czyszczeniem, eliminując odrębny krok HTMLConverter i ręczny wzorzec Close().

Konwersja adresów URL do formatu PDF

Łatwa implementacja Easy PDF SDK:

// Reference BCL.easyPDF.PDFConverter.dll (or the .NetCore variant)
// installed by the easyPDF SDK MSI — there is no NuGet package.
using BCL.easyPDF;
using System;

class Program
{
    static void Main()
    {
        var pdf = new PDFDocument();
        var htmlConverter = new HTMLConverter();
        htmlConverter.ConvertURL("https://example.com", pdf);
        pdf.Save("webpage.pdf");
        pdf.Close();
    }
}
// Reference BCL.easyPDF.PDFConverter.dll (or the .NetCore variant)
// installed by the easyPDF SDK MSI — there is no NuGet package.
using BCL.easyPDF;
using System;

class Program
{
    static void Main()
    {
        var pdf = new PDFDocument();
        var htmlConverter = new HTMLConverter();
        htmlConverter.ConvertURL("https://example.com", pdf);
        pdf.Save("webpage.pdf");
        pdf.Close();
    }
}
Imports BCL.easyPDF
Imports System

Class Program
    Shared Sub Main()
        Dim pdf As New PDFDocument()
        Dim htmlConverter As New HTMLConverter()
        htmlConverter.ConvertURL("https://example.com", pdf)
        pdf.Save("webpage.pdf")
        pdf.Close()
    End Sub
End Class
$vbLabelText   $csharpLabel

Wdrożenie IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.SaveAs("webpage.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.SaveAs("webpage.pdf");
    }
}
Imports IronPdf
Imports System

Module Program
    Sub Main()
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
        Dim renderer As New ChromePdfRenderer()
        Dim pdf = renderer.RenderUrlAsPdf("https://example.com")
        pdf.SaveAs("webpage.pdf")
    End Sub
End Module
$vbLabelText   $csharpLabel

Łączenie wielu plików PDF

Łatwa implementacja Easy PDF SDK:

// Reference BCL.easyPDF.PDFConverter.dll (or the .NetCore variant)
// installed by the easyPDF SDK MSI — there is no NuGet package.
using BCL.easyPDF;
using System;

class Program
{
    static void Main()
    {
        var pdf1 = new PDFDocument("document1.pdf");
        var pdf2 = new PDFDocument("document2.pdf");
        pdf1.Append(pdf2);
        pdf1.Save("merged.pdf");
        pdf1.Close();
        pdf2.Close();
    }
}
// Reference BCL.easyPDF.PDFConverter.dll (or the .NetCore variant)
// installed by the easyPDF SDK MSI — there is no NuGet package.
using BCL.easyPDF;
using System;

class Program
{
    static void Main()
    {
        var pdf1 = new PDFDocument("document1.pdf");
        var pdf2 = new PDFDocument("document2.pdf");
        pdf1.Append(pdf2);
        pdf1.Save("merged.pdf");
        pdf1.Close();
        pdf2.Close();
    }
}
Imports BCL.easyPDF
Imports System

Module Program
    Sub Main()
        Dim pdf1 As New PDFDocument("document1.pdf")
        Dim pdf2 As New PDFDocument("document2.pdf")
        pdf1.Append(pdf2)
        pdf1.Save("merged.pdf")
        pdf1.Close()
        pdf2.Close()
    End Sub
End Module
$vbLabelText   $csharpLabel

Wdrożenie IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
        var pdfs = new List<PdfDocument>
        {
            PdfDocument.FromFile("document1.pdf"),
            PdfDocument.FromFile("document2.pdf")
        };
        var merged = PdfDocument.Merge(pdfs);
        merged.SaveAs("merged.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
        var pdfs = new List<PdfDocument>
        {
            PdfDocument.FromFile("document1.pdf"),
            PdfDocument.FromFile("document2.pdf")
        };
        var merged = PdfDocument.Merge(pdfs);
        merged.SaveAs("merged.pdf");
    }
}
Imports IronPdf
Imports System
Imports System.Collections.Generic

Module Program
    Sub Main()
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
        Dim pdfs As New List(Of PdfDocument) From {
            PdfDocument.FromFile("document1.pdf"),
            PdfDocument.FromFile("document2.pdf")
        }
        Dim merged = PdfDocument.Merge(pdfs)
        merged.SaveAs("merged.pdf")
    End Sub
End Module
$vbLabelText   $csharpLabel

Statyczna metoda MergeIronPDF akceptuje bezpośrednio kolekcję dokumentów, zastępując wzorzec parowy Append.

Ochrona hasłem

Wdrożenie IronPDF:

using IronPdf;

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>");

// Set security
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;

pdf.SaveAs("protected.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>");

// Set security
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;

pdf.SaveAs("protected.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>")

' Set security
pdf.SecuritySettings.UserPassword = "user123"
pdf.SecuritySettings.OwnerPassword = "owner456"
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit

pdf.SaveAs("protected.pdf")
$vbLabelText   $csharpLabel

Nagłówki i stopki

Easy PDF SDK nie udostępnia dedykowanych API dla nagłówków i stopki w swojej ścieżce konwersji HTML; nagłówki i stopki są zazwyczaj osadzone bezpośrednio w źródle HTML.IronPDF dostarcza dedykowane obiekty nagłówków i stopek:

using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='text-align:center; font-size:12px; font-family:Arial;'>
            Company Name - Confidential
        </div>",
    DrawDividerLine = true,
    MaxHeight = 30
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='text-align:center; font-size:10px;'>
            Page {page} of {total-pages}
        </div>",
    DrawDividerLine = true,
    MaxHeight = 25
};

var pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>");
pdf.SaveAs("with_headers.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='text-align:center; font-size:12px; font-family:Arial;'>
            Company Name - Confidential
        </div>",
    DrawDividerLine = true,
    MaxHeight = 30
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='text-align:center; font-size:10px;'>
            Page {page} of {total-pages}
        </div>",
    DrawDividerLine = true,
    MaxHeight = 25
};

var pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>");
pdf.SaveAs("with_headers.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
    .HtmlFragment = "
        <div style='text-align:center; font-size:12px; font-family:Arial;'>
            Company Name - Confidential
        </div>",
    .DrawDividerLine = True,
    .MaxHeight = 30
}

renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
    .HtmlFragment = "
        <div style='text-align:center; font-size:10px;'>
            Page {page} of {total-pages}
        </div>",
    .DrawDividerLine = True,
    .MaxHeight = 25
}

Dim pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>")
pdf.SaveAs("with_headers.pdf")
$vbLabelText   $csharpLabel

Aby uzyskać więcej opcji, zapoznaj się z dokumentacją dotyczącą nagłówków i stopek.

Asynchroniczne generowanie plików PDF

Easy PDF SDK wykorzystuje wzorce asynchroniczne oparte na wywołaniach zwrotnych.IronPDF obsługuje natywne async/await:

Łatwa implementacja Easy PDF SDK:

using BCL.easyPDF;

Printer printer = new Printer();

// BCL uses callback-based async
printer.BeginPrintToFile(
    "https://example.com",
    "output.pdf",
    OnPrintComplete,
    OnPrintError
);

Console.ReadLine();
printer.Dispose();
using BCL.easyPDF;

Printer printer = new Printer();

// BCL uses callback-based async
printer.BeginPrintToFile(
    "https://example.com",
    "output.pdf",
    OnPrintComplete,
    OnPrintError
);

Console.ReadLine();
printer.Dispose();
Imports BCL.easyPDF

Dim printer As New Printer()

' BCL uses callback-based async
printer.BeginPrintToFile( _
    "https://example.com", _
    "output.pdf", _
    AddressOf OnPrintComplete, _
    AddressOf OnPrintError _
)

Console.ReadLine()
printer.Dispose()
$vbLabelText   $csharpLabel

Wdrożenie IronPDF:

using IronPdf;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var renderer = new ChromePdfRenderer();

        // Native async/await
        var pdf = await renderer.RenderUrlAsPdfAsync("https://example.com");
        await pdf.SaveAsAsync("output.pdf");

        Console.WriteLine("PDF created: output.pdf");
    }
}
using IronPdf;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var renderer = new ChromePdfRenderer();

        // Native async/await
        var pdf = await renderer.RenderUrlAsPdfAsync("https://example.com");
        await pdf.SaveAsAsync("output.pdf");

        Console.WriteLine("PDF created: output.pdf");
    }
}
Imports IronPdf
Imports System.Threading.Tasks

Class Program
    Shared Async Function Main() As Task
        Dim renderer = New ChromePdfRenderer()

        ' Native async/await
        Dim pdf = Await renderer.RenderUrlAsPdfAsync("https://example.com")
        Await pdf.SaveAsAsync("output.pdf")

        Console.WriteLine("PDF created: output.pdf")
    End Function
End Class
$vbLabelText   $csharpLabel

Ważne uwagi dotyczące migracji

Zmiana indeksu strony

Easy PDF SDK wykorzystuje indeksowanie oparte na 1.IronPDF stosuje indeksowanie od 0:

// Easy PDF SDK: 1-based
doc.ExtractPages(1, 5);

// IronPDF: 0-based
pdf.CopyPages(0, 4);
// Easy PDF SDK: 1-based
doc.ExtractPages(1, 5);

// IronPDF: 0-based
pdf.CopyPages(0, 4);
' Easy PDF SDK: 1-based
doc.ExtractPages(1, 5)

' IronPDF: 0-based
pdf.CopyPages(0, 4)
$vbLabelText   $csharpLabel

Limit czasu w milisekundach

Easy PDF SDK używa sekund jako wartości limitu czasu.IronPDF używa milisekund:

// Easy PDF SDK: seconds
config.TimeOut = 120;

// IronPDF: milliseconds
renderer.RenderingOptions.Timeout = 120000;
// Easy PDF SDK: seconds
config.TimeOut = 120;

// IronPDF: milliseconds
renderer.RenderingOptions.Timeout = 120000;
' Easy PDF SDK: seconds
config.TimeOut = 120

' IronPDF: milliseconds
renderer.RenderingOptions.Timeout = 120000
$vbLabelText   $csharpLabel

Integracja z ASP.NET Core.NET Core

Easy PDF SDK ma trudności w kontekście internetowym ze względu na wymagania dotyczące sesji interaktywnych.

Wzór IronPDF:

[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
    [HttpGet("generate")]
    public IActionResult GeneratePdf()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");

        return File(pdf.BinaryData, "application/pdf", "report.pdf");
    }

    [HttpGet("generate-async")]
    public async Task<IActionResult> GeneratePdfAsync()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");

        return File(pdf.BinaryData, "application/pdf", "report.pdf");
    }
}
[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
    [HttpGet("generate")]
    public IActionResult GeneratePdf()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");

        return File(pdf.BinaryData, "application/pdf", "report.pdf");
    }

    [HttpGet("generate-async")]
    public async Task<IActionResult> GeneratePdfAsync()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");

        return File(pdf.BinaryData, "application/pdf", "report.pdf");
    }
}
Imports Microsoft.AspNetCore.Mvc

<ApiController>
<Route("[controller]")>
Public Class PdfController
    Inherits ControllerBase

    <HttpGet("generate")>
    Public Function GeneratePdf() As IActionResult
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>")

        Return File(pdf.BinaryData, "application/pdf", "report.pdf")
    End Function

    <HttpGet("generate-async")>
    Public Async Function GeneratePdfAsync() As Task(Of IActionResult)
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = Await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>")

        Return File(pdf.BinaryData, "application/pdf", "report.pdf")
    End Function
End Class
$vbLabelText   $csharpLabel

Wdrażanie Docker

Easy PDF SDK nie jest zaprojektowany do kontenerów Linux — jego obsługiwana konfiguracja to Windows z Microsoft Office, sterownikiem wirtualnej drukarki, a (w większości konfiguracji) interaktywna sesja pulpitu, co sprawia, że typowe przepływy Docker oparte na Linux są niewykonalne.

Konfiguracja IronPDF w Dockerze:

FROM mcr.microsoft.com/dotnet/aspnet:8.0

# Install Chromium dependencies
RUN apt-get update && apt-get install -y \
    libc6 libgdiplus libx11-6 libxcomposite1 \
    libxdamage1 libxrandr2 libxss1 libxtst6 \
    libnss3 libatk-bridge2.0-0 libgtk-3-0 \
    libgbm1 libasound2 fonts-liberation \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet", "MyApp.dll"]

Rozwiązywanie typowych problemów związanych z migracją

Problem: Nie znaleziono drukarki

Objaw: Cannot find printer: BCL easyPDF Printer

Rozwiązanie:IronPDF nie wymaga sterowników drukarki:

// Just use the renderer directly
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
// Just use the renderer directly
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
$vbLabelText   $csharpLabel

Problem: Błędy COM Interop

Objaw: DLL error loading lub błędy RCW

Rozwiązanie: Usuń wszystkie odniesienia do COM i użyj zarządzanego interfejsu API IronPDF.

Problem: Przekroczenie limitu czasu na serwerze

Objaw: Generowanie pliku PDF zawiesza się na serwerze internetowym

Rozwiązanie:IronPDF działa w trybie headless bez sesji interaktywnych:

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.Timeout = 60000; // Reliable timeout
var pdf = renderer.RenderHtmlAsPdf(html);
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.Timeout = 60000; // Reliable timeout
var pdf = renderer.RenderHtmlAsPdf(html);
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.Timeout = 60000 ' Reliable timeout
Dim pdf = renderer.RenderHtmlAsPdf(html)
$vbLabelText   $csharpLabel

Problem: Tło nie drukuje się

Objaw: Brak tła CSS

Rozwiązanie: Włącz drukowanie w tle:

renderer.RenderingOptions.PrintHtmlBackgrounds = true;
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
renderer.RenderingOptions.PrintHtmlBackgrounds = True
$vbLabelText   $csharpLabel

Lista kontrolna po migracji

Po zakończeniu migracji kodu sprawdź, czy:

  • Sprawdź jakość plików PDF dzięki silnikowi Chromium w IronPDF
  • Przetestuj wszystkie skrajne przypadki z użyciem złożonego kodu HTML/CSS
  • Sprawdź, czy wdrożenie serwera działa bez sesji interaktywnych
  • Test wdrożenia Docker/kontener
  • Usuń instalator BCL EasyPDF z wdrożenia
  • Usuń instalację pakietu Office z serwerów (nie jest już potrzebna)
  • Zaktualizuj potoki CI/CD o nowy pakiet NuGet

Dodatkowe zasoby


Migracja zEasy PDF SDKdo IronPDF usuwa sterownik wirtualnej drukarki, interoperację COM i ograniczenia wyłącznie dla Windows w ścieżce generowania PDF. Renderowanie oparte na Chromium zapewnia wsparcie nowoczesnego CSS3 i JavaScript oraz ta sama baza kodów działa na Dockerze, Kubernetes i środowiskach chmurowych opartych na Linux, które trudno jest zaadresować za pomocą modelu wdrażania obsługiwanego przez easyPDF SDK.

Zwróć uwagęBCL easyPDF SDK,Easy PDF SDKi Apryse to zarejestrowane znaki towarowe ich odpowiednich właścicieli. Ta strona nie jest powiązana z, zatwierdzona przez ani sponsorowana przez BCL Technologies lub Apryse. 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