IRONSOFTWAREHOME

Iron Suite for .NET

10 bibliotek .NET. Jeden kompletny pakiet dokumentów.

IRONPDF
IRONWORD
IRONXL
IRONPPT
IRONOCR
IRONBARCODE
IRONQR
IRONPRINT
IRONZIP
IRONWEBSCRAPER
PORÓWNANIE

Wybór biblioteki do generowania dokumentów dla .NET 8

Curtis Chau
Curtis Chau
Updated: 8 maja 2026

W .NET 8 wprowadzono zmiany w środowisku uruchomieniowym, które powodują brak zgodności z wieloma tradycyjnymi bibliotekami PDF. System.Drawing.Common jest przestarzały na platformach innych niż Windows, Native AOT nakłada nowe ograniczenia na biblioteki intensywnie wykorzystujące refleksję, a model wdrażania oparty na kontenerach ujawnia problemy z zależnościami, które nie pojawiały się na komputerach programistycznych z systemem Windows. Biblioteki, które działały w .NET Framework lub nawet .NET 6 mogą nie działać z błędami NU1202, DllNotFoundException lub PlatformNotSupportedException w .NET 8.

W tym artykułe opisano, które biblioteki PDF działają z platformą .NET 8, przedstawiono konkretne błędy, które mogą wystąpić w przypadku bibliotek niezgodnych, oraz podano konfiguracje wdrożeniowe dla Docker i Azure Functions.

Szybki start: Generowanie pliku PDF z HTML w .NET 8

using IronPdf;

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;

var pdf = renderer.RenderHtmlAsPdf(@"
    <html>
    <head><style>
        body { font-family: 'Segoe UI', sans-serif; padding: 40px; }
        h1 { color: #2563eb; }
        table { width: 100%; border-collapse: collapse; margin-top: 20px; }
        th { background: #2563eb; color: white; padding: 12px; text-align: left; }
        td { padding: 10px; border-bottom: 1px solid #e5e7eb; }
    </style></head>
    <body>
        <h1>Q4 Report</h1>
        <table>
            <tr><th>Metric</th><th>Value</th><th>Change</th></tr>
            <tr><td>Revenue</td><td>$1.2M</td><td>+12%</td></tr>
            <tr><td>Users</td><td>45,230</td><td>+23%</td></tr>
        </table>
    </body></html>");

pdf.SaveAs("report.pdf");

Instalacja przez NuGet: Install-Package IronPdf. Celuje w net8.0 bez dodatkowej konfiguracji. Wdrażane na systemach Windows, Linux, macOS, Docker i Azure bez konfiguracji specyficznej dla platformy.

Dlaczego starsze biblioteki PDF nie działają w .NET 8?

iText — Niekompatybilne z .NET 8

iText (oryginalny port .NET z iText) nie był aktualizowany od 2018 roku. Jest przeznaczony tylko dla .NET Framework:

Błąd NU1202: Pakiet iTextSharp 5.5.13 nie jest zgodny z net8.0
Text

Ścieżką migracji jest iText, które posiada inne API i wymaga zgodności z AGPL (opublikowania całej aplikacji jako open-source) lub licencji komercyjnej. Ceny nie są podane — dane zewnętrzne sugerują, że wynoszą one od 15 000 do 210 000 dolarów rocznie.

Nadrzędki wkhtmltopdf — błędy ładowania bibliotek DLL w środowisku .NET 8

Owijki C# wokół wkhtmltopdf (DinkToPdf, Rotativa, NReco.PdfGenerator) kończą się niepowodzeniem z powodu błędów specyficznych dla platformy, które są unikalne dla modelu wdrażania .NET 8:

DinkToPdf — nie znaleziono biblioteki natywnej:

System.DllNotFoundException: Nie można załadować DLL 'libwkhtmltox'
Text

Rotativa.AspNetCore — wymaga ręcznej konfiguracji ścieżki pliku binarnego, co koliduje z wdrożeniem opartym na kontenerach w .NET 8:

// This pattern requires deploying wkhtmltopdf binaries alongside your app
// and breaks in Docker containers without explicit path configuration
RotativaConfiguration.Setup(env.WebRootPath, "wkhtmltopdf");

TuesPechkin / NReco — niezgodność architektury:

System.BadImageFormatException: Nie można załadować pliku lub zestawu
Text

Błędy te odzwierciedlają głębszy problem: wkhtmltopdf zostało zarchiwizowane w lipcu 2024 r. z niezałatanymi lukami CVE. Natywna architektura binarna powstała przed wprowadzeniem ulepszeń w wykrywaniu platformy w .NET 8. Nie ma rozwiązania — pozostaje jedynie migracja do innej biblioteki.

PDFSharp — Problemy z System.Drawing.Common na Linux

PDFSharp zależy od System.Drawing.Common, które Microsoft zdeprecjował dla platform innych niż Windows w .NET 6. W .NET 8, to powoduje błędy w czasie wykonywania podczas wdrażania na Linux lub Docker:

using PdfSharp.Pdf;
using PdfSharp.Drawing;

var document = new PdfDocument();
// PlatformNotSupportedException on Linux:
// System.Drawing.Common is not supported on this platform

PDFSharp 6.x pracuje nad usunięciem tej zależności, ale wsparcie międzyplatformowe jest wciąż niekompletne na początku 2026 roku. Dla wdrożeń tylko na Windows, PDFSharp działa z .NET 8. Dla Linux, Docker lub wdrożeń w chmurze jest to niewiarygodne.

Jakie biblioteki PDF działają z platformą .NET 8?

IronPDF — pełna obsługa .NET 8, wielopłatformowość

IronPDF celuje w net8.0 natywnie z wbudowanym renderowaniem Chromium. Brak zależności od System.Drawing.Common, brak zarządzania plikami binarnymi, brak konfiguracji specyficznej dla platformy.

Minimalna integracja API (główny wzorzec .NET 8):

using IronPdf;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/invoice/{id}/pdf", async (int id, InvoiceService service) =>
{
    var invoice = await service.GetInvoiceAsync(id);
    var renderer = new ChromePdfRenderer();

    var pdf = renderer.RenderHtmlAsPdf(invoice.ToHtml());

    return Results.File(pdf.BinaryData, "application/pdf", $"invoice-{id}.pdf");
});

app.Run();

Dla zespołów korzystających z wzorca kontrolera, ten sam kod działa wewnątrz akcji kontrolera — RenderHtmlAsPdf zwraca PdfDocument, który można zamienić na bajty za pomocą .BinaryData.

Licencjonowanie: Licencja wieczysta zaczyna się od $liteLicense (Lite — 1 deweloper, 1 projekt). Professional: 1499 USD (10 programistów). Enterprise: 2999 USD (bez ograniczeń). Opublikowano na ironpdf.com.

QuestPDF — zgodny z .NET 8, bez HTML

QuestPDF współpracuje z platformą .NET 8 bez zależności od platformy. Jego płynny interfejs API w języku C# tworzy dokumenty programowo — bez parsera HTML, silnika CSS ani silnika przeglądarki:

using QuestPDF.Fluent;
using QuestPDF.Infrastructure;

QuestPDF.Settings.License = LicenseType.Community; // Free under $1M revenue

Document.Create(container =>
{
    container.Page(page =>
    {
        page.Size(PageSizes.A4);
        page.Margin(2, Unit.Centimetre);
        page.Content().Column(col =>
        {
            col.Item().Text("Q4 Report").FontSize(24).Bold();
            col.Item().Table(table =>
            {
                table.ColumnsDefinition(c => { c.RelativeColumn(2); c.RelativeColumn(1); c.RelativeColumn(1); });
                table.Header(h =>
                {
                    h.Cell().Text("Metric").Bold();
                    h.Cell().Text("Value").Bold();
                    h.Cell().Text("Change").Bold();
                });
                table.Cell().Text("Revenue"); table.Cell().Text("$1.2M"); table.Cell().Text("+12%");
                table.Cell().Text("Users"); table.Cell().Text("45,230"); table.Cell().Text("+23%");
            });
        });
    });
}).GeneratePdf("report.pdf");

QuestPDF nie konwertuje plików HTML. Jeśli w Twoim środowisku pracy wykorzystujesz szablony HTML (widoki Razor, eksporty pulpitów nawigacyjnych, archiwizacja treści internetowych), potrzebujesz innej biblioteki. Licencja społecznościowa obejmuje firmy z przychodami rocznymi poniżej 1 mln USD; powyżej tego wymagana jest licencja komercyjna.

iText — Kompatybilne z .NET 8, Licencjonowane AGPL

iText (następca iText) wspiera .NET 8. Dodatek pdfHTML zapewnia konwersję z HTML do PDF z niestandardowym parserem — nie jest to silnik przeglądarki, więc nowoczesne funkcje CSS (Flexbox, Grid) nie renderują się poprawnie.

Licencjonowanie: AGPL dla zastosowań open source, licencja komercyjna (subskrypcyjna, ceny nie publikowane) dla zastosowań własnościowych. iText przeszedł na licencjonowanie komercyjne oparte na subskrypcji w 2024 roku.

Wdrażanie Docker

Standardowy obraz Debian (zalecany)

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["MyApp.csproj", "."]
RUN dotnet restore
COPY . .
RUN dotnet publish -c Release -o /app/publish

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

# IronPDF works without additional apt-get installs
# Chromium dependencies are handled internally

COPY --from=build /app/publish .

ENV DOTNET_RUNNING_IN_CONTAINER=true
EXPOSE 8080
ENTRYPOINT ["dotnet", "MyApp.dll"]
Text

Obraz Alpine (mniejszy rozmiar)

FROM mcr.microsoft.com/dotnet/sdk:8.0-alpine AS build
WORKDIR /src
COPY ["MyApp.csproj", "."]
RUN dotnet restore
COPY . .
RUN dotnet publish -c Release -o /app/publish

FROM mcr.microsoft.com/dotnet/aspnet:8.0-alpine
WORKDIR /app

# Alpine requires explicit Chromium dependencies
RUN apk add --no-cache chromium nss freetype harfbuzz ca-certificates ttf-freefont

COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "MyApp.dll"]
Text

Obraz Debian nie wymaga dodatkowych pakietów. Obraz Alpine jest mniejszy, ale wymaga instalacji bibliotek Chromium. Dla większości wdrożeń standardowy obraz Debian jest prostszy i bardziej niezawodny.

Azure Functions (izolowany model roboczy)

.NET 8 Azure Functions używają izolowanego modelu roboczego. IronPDF współpracuje z tym modelem do generowania PDF na żądanie:

using IronPdf;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;

namespace MyApp.Functions;

public class PdfFunctions
{
    [Function("GenerateInvoice")]
    public async Task<HttpResponseData> GenerateInvoice(
        [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req)
    {
        var invoice = await req.ReadFromJsonAsync<InvoiceRequest>();

        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(BuildInvoiceHtml(invoice));

        var response = req.CreateResponse(System.Net.HttpStatusCode.OK);
        response.Headers.Add("Content-Type", "application/pdf");
        response.Headers.Add("Content-Disposition",
            $"attachment; filename=invoice-{invoice.Id}.pdf");
        await response.Body.WriteAsync(pdf.BinaryData);

        return response;
    }

    private string BuildInvoiceHtml(InvoiceRequest invoice)
    {
        return $@"<html><body>
            <h1>Invoice #{invoice.Id}</h1>
            <p>Amount: ${invoice.Amount:F2}</p>
        </body></html>";
    }
}

public record InvoiceRequest(string Id, decimal Amount);

Uwaga dotycząca wdrożenia: Binarny Chromium IronPDF dodaje ~200MB do pakietu wdrożeniowego. Plan konsumpcji Azure Functions ma limit rozmiaru wdrożenia 1,5 GB — zweryfikuj całkowity rozmiar pakietu. Dla planów Premium lub Dedykowanych ten limit nie obowiązuje. Opóźnienie zimnego startu przy pierwszym generowaniu PDF wynosi 2–5 sekund, ponieważ Chromium się inicjalizuje.

Zgodność z Native AOT

.NET 8 rozszerzyło wsparcie dla Native AOT, ale biblioteki PDF napotykają fundamentalne ograniczenia. Biblioteki oparte na Chromium (IronPDF, Puppeteer Sharp) nie mogą być kompilowane AOT, ponieważ osadzają lub uruchamiają procesy przeglądarki. iText używa rozległej refleksji, która koliduje z przycinaniem.

Aktualny status z <PublishAot>true</PublishAot>:

BibliotekaStatus AOTPowód
IronPDFNiekompatybilneOsadza środowisko wykonawcze Chromium
iTextNiekompatybilneCiężka refleksja, dynamiczne generowanie kodu
QuestPDFCzęściowy (z TrimMode=partial)Użycie pewnej refleksji
PDFSharpNiekompatybilneZależność od System.Drawing.Common

Jeśli Native AOT jest twardym wymaganiem, QuestPDF z TrimMode=partial jest najbliższą opcją — ale tylko do programowego generowania dokumentów, nie do konwersji HTML. Dla scenariuszy HTML do PDF, AOT nie jest obecnie wykonalny z żadną biblioteką.

Porównanie licencji

BibliotekaModelKosztWsparcie dla .NET 8
IronPDFWieczysta$liteLicense (Lite) / $1,499 (Pro) / $2,999 (Enterprise)Pełna
iTextAGPL lub SubskrypcjaNie publikowane (szacowane na $15K–$210K/rocznie)Pełna
QuestPDFSpołecznościowa / KomercyjnaBezpłatna < $1M dochodu, potem komercyjnaPełna
PDFSharpMIT (bezpłatne)$0Tylko dla Windows (Linux niekompletny)
Aspose.PDFNa programistę~ $999+Pełne (problemy z pamięcią w Linux)

Kompatybilność z .NET 9

.NET 9 (wydany w listopadzie 2025) kontynuuje wzorce ustalone w .NET 8. Biblioteki, które działają z .NET 8, ogólnie działają z .NET 9 bez zmian. Kluczowe dodatki w .NET 9 związane z generowaniem PDF to ulepszenie wydajności ARM64 (korzystne dla renderowania opartego na Chromium na Apple Silicon i AWS Graviton) oraz kontynuacja ulepszeń Native AOT (choć fundamentalne ograniczenia dla bibliotek PDF pozostają).

Jeśli docelowym systemem jest .NET 9 lub planujesz aktualizację, wybór biblioteki, która w pełni wspiera wdrożenia międzyplatformowe w .NET 8, jest najbezpieczniejszą ścieżką. Biblioteki z platformowo-specyficznymi problemami (PDFSharp na Linux, Aspose z libgdiplus) mogą nie rozwiązać tych problemów w .NET 9, ponieważ deprecjacja podstawowej zależności jest trwała.

Przewodnik migracji

Od iText do IronPDF

// Before (iTextSharp — doesn't compile against net8.0)
using iTextSharp.text;
using iTextSharp.text.pdf;

var doc = new Document();
PdfWriter.GetInstance(doc, new FileStream("output.pdf", FileMode.Create));
doc.Open();
doc.Add(new Paragraph("Hello World"));
doc.Close();

// After (IronPDF — targets net8.0)
using IronPdf;

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<p>Hello World</p>");
pdf.SaveAs("output.pdf");

Z wkhtmltopdf Wrappers do IronPDF

// Before (DinkToPdf — DllNotFoundException on .NET 8)
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument
{
    Objects = { new ObjectSettings { HtmlContent = html } }
};
var bytes = converter.Convert(doc);

// After (IronPDF — native .NET 8 support)
using IronPdf;

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
var bytes = pdf.BinaryData;

Powierzchnia API jest prostsza w obu przypadkach. Głównym kosztem migracji jest testowanie istniejących szablonów HTML z nowym silnikiem renderowania, aby zweryfikować, czy wynik odpowiada oczekiwaniom.

Rekomendacja

Dla projektów .NET 8 wymagających konwersji HTML do PDF: IronPDF zapewnia wbudowane renderowanie Chromium, które działa międzyplatformowo bez konfiguracji. Obsługuje wdrożenia Docker, Azure Functions i kontenery Linux bezpośrednio.

Dla projektów .NET 8 budujących dokumenty programistycznie z danych: Fluent API QuestPDF jest dobrze zaprojektowane i zgodne z .NET 8, a Licencja Społecznościowa obejmuje większość startupów i małych zespołów.

Dla manipulacji PDF (scalanie, rozdzielanie, formy) na Windows: PDFSharp pozostaje wykonalny, jeśli twoim celem wdrożeniowym jest tylko Windows.

Unikaj iText (niekompatybilny), obwolut wkhtmltopdf (archiwizowane, CVEs) i wszelkich bibliotek zależnych od System.Drawing.Common dla wdrożeń międzyplatformowych.

Zwróć uwagę: Aspose, DinkToPdf, NReco, PDFSharp, PuppeteerSharp, QuestPDF, Rotativa, TuesPechkin, iText i wkhtmltopdf są zarejestrowanymi znakami towarowymi ich właścicieli. Ta strona nie jest powiązana, wspierana ani sponsorowana przez Aspose Pty Ltd, CodeFlint, DinkToPdf, NReco, PuppeteerSharp, Rotativa, TuesPechkin, empira Software GmbH, iText Group ani wkhtmltopdf. 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.
Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Your trial license will be sent to your email address

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Otrzymaj swoją Konsultację Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta