Jak generować pliki PDF w .NET Core

Konwersja HTML do PDF w .NET Core przy użyciu języka C# i biblioteki IronPDF

This article was translated from English: Does it need improvement?
Translated
View the article in English

Generowanie plików PDF o wysokiej jakości bezpośrednio z HTML jest rutynowym wymaganiem w nowoczesnych aplikacjach .NET — raporty, faktury i bilety wymagają idealnego odwzorowania pikselowego, które odpowiada interfejsowi użytkownika w sieci. IronPDF usprawnia ten proces, udostępniając pojedynczy interfejs API w języku C# do renderowania kodu HTML, widoków Razor oraz całych stron internetowych do dokumentów PDF zgodnych ze standardami. Po przeczytaniu tego przewodnika programista będzie w stanie konwertować adresy URL, surowy kod HTML lub widoki MVC w projekcie .NET Core oraz wdrażać ten sam kod w środowiskach Windows, Linux, Docker lub bezserwerowych.

PoradyW przypadku problemów z układem graficznym IronPDF dostarcza debugger Headless Chrome, który pomaga zdiagnozować nieprawidłowości w CSS, JavaScript i zapytaniach o media przed renderowaniem pliku PDF. Zapoznaj się z dedykowanym przewodnikiem dotyczącym konwersji HTML do PDF z zachowaniem idealnej zgodności pikselowej, aby poznać szczegółowe techniki.

Szybki start: Tworzenie pliku PDF z HTML w .NET Core

Z łatwością konwertuj HTML na PDF w .NET Core, korzystając z biblioteki IronPDF. Ten przewodnik zawiera prosty przykład, który pozwoli Ci szybko rozpocząć pracę, renderując zawartość HTML do wysokiej jakości pliku PDF przy użyciu minimalnej ilości kodu. Idealne rozwiązanie dla programistów, którzy chcą w łatwy sposób zintegrować tworzenie plików PDF ze swoimi aplikacjami.

  1. Install IronPDF with NuGet Package Manager

    PM > Install-Package IronPdf
  2. Skopiuj i uruchom ten fragment kodu.

    var pdf = new IronPdf.ChromePdfRenderer().RenderHtmlAsPdf("<h1>Hello World</h1>");
  3. Wdrożenie do testowania w środowisku produkcyjnym

    Rozpocznij używanie IronPDF w swoim projekcie już dziś z darmową wersją próbną

    arrow pointer

Lista kontrolna szybkiego startu

  1. InstalacjaInstall-Package IronPdf
  2. Wyświetl adres URLChromePdfRenderer.RenderUrlAsPdf()
  3. Renderowanie surowego kodu HTMLChromePdfRenderer.RenderHtmlAsPdf()
  4. Eksport widoku RazorChromePdfRenderer.RenderHtmlAsPdfAsync()
  5. Dopracuj wynik – wykorzystaj ChromePdfRenderer.RenderingOptions

Zakres niniejszego samouczka

  • Konwersja adresów URL, ciągów HTML i widoków Razor
  • Konfiguracja papieru, marginesów i typu nośnika
  • Wdrażanie na wielu platformach (Windows, Linux, Docker)
  • Obróbka końcowa: scalanie, dodawanie znaków wodnych, zabezpieczanie hasłem i podpisywanie cyfrowe plików PDF
  • Kompleksowy przykład: aplikacja MVC do rezerwacji biletów

Jak zainstalować bibliotekę PDF w .NET Core?

Instalacja biblioteki wymaga wpisania zaledwie jednej linijki kodu w dowolnym projekcie .NET 8 i pozostaje kompatybilna z wersją .NET 9 preview oraz nadchodzącą wersją .NET 10. Użyj konsoli menedżera pakietów NuGet, a menedżer pakietów automatycznie rozwiąże wszystkie zależności dla systemów Windows, Linux, Docker i środowisk bezserwerowych.

PM> Install-Package IronPdf             # .NET 8 LTS and higher
PM> Install-Package IronPdf             # .NET 8 LTS and higher
SHELL

Zwróć uwagęPotrzebujesz CLI? To samo polecenie działa z dotnet add package IronPdf w folderze projektu.

Po zainstalowaniu sprawdź, czy wszystko działa, konwertując dowolny publiczny adres URL:

// Program.cs — .NET 8 LTS
using IronPdf;

var renderer = new ChromePdfRenderer();

// Render a live website to PDF
using PdfDocument pdf = renderer.RenderUrlAsPdf("https://example.com");

// Persist to disk
pdf.SaveAs("website-snapshot.pdf");
// Program.cs — .NET 8 LTS
using IronPdf;

var renderer = new ChromePdfRenderer();

// Render a live website to PDF
using PdfDocument pdf = renderer.RenderUrlAsPdf("https://example.com");

// Persist to disk
pdf.SaveAs("website-snapshot.pdf");
' Program.cs — .NET 8 LTS
Imports IronPdf

Private renderer = New ChromePdfRenderer()

' Render a live website to PDF
Private PdfDocument As using

' Persist to disk
pdf.SaveAs("website-snapshot.pdf")
$vbLabelText   $csharpLabel

Jak to działa

  • ChromePdfRenderer uruchamia w tle instancję Chromium w środowisku sandbox — nie jest wymagana oddzielna instalacja przeglądarki Chrome.
  • RenderUrlAsPdf przechwytuje w pełni wyrenderowany DOM, w tym treści oparte na JavaScript, zapytania o media CSS oraz czcionki.
  • Wynikowy PdfDocument udostępnia metody pomocnicze do scalania, zabezpieczania hasłem lub podpisywania cyfrowego wyników — funkcje omówione w dalszej części tego samouczka.

Więcej szczegółów na temat niuansów wdrażania (Azure App Service, AWS Lambda, lokalny system Linux) można znaleźć w dedykowanym przewodniku instalacyjnym oraz na stronach dotyczących zaawansowanej konfiguracji NuGet. Wewnętrzne wskazówki dotyczące CI/CD dla klastrów Docker i K8s zostały omówione w najlepszych praktykach wdrażania Docker.


W jaki sposób usługa .NET Core może przekonwertować adres URL aktywnej strony internetowej do formatu PDF?

Wystarczy jedno wywołanie RenderUrlAsPdf: podaj dowolny publicznie dostępny adres URL, a IronPDF zwróci w pełni wyrenderowany plik PDF zgodny ze standardami. Poniższy kod jest przeznaczony dla platformy .NET 8 LTS i kompiluje się bez zmian w wersji .NET 9 preview, a także w nadchodzącej wersji .NET 10, która ukaże się w 2025 roku.

Przykład krok po kroku

// Program.cs — .NET 8 LTS-compatible
using IronPdf;

// 1. Activate a license (or trial key)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

// 2. Create a reusable renderer instance
var renderer = new ChromePdfRenderer
{
    RenderingOptions =
    {
        // Force A4 portrait output and apply @media print styles
        PaperSize    = PdfPaperSize.A4,
        CssMediaType = PdfCssMediaType.Print
    }
};

// 3. Convert Microsoft Docs home page to PDF
using PdfDocument pdf = renderer.RenderUrlAsPdf("https://learn.microsoft.com/");

// 4. Save the PDF or stream it from a Web API
pdf.SaveAs("docs-offline-copy.pdf");
// Program.cs — .NET 8 LTS-compatible
using IronPdf;

// 1. Activate a license (or trial key)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

// 2. Create a reusable renderer instance
var renderer = new ChromePdfRenderer
{
    RenderingOptions =
    {
        // Force A4 portrait output and apply @media print styles
        PaperSize    = PdfPaperSize.A4,
        CssMediaType = PdfCssMediaType.Print
    }
};

// 3. Convert Microsoft Docs home page to PDF
using PdfDocument pdf = renderer.RenderUrlAsPdf("https://learn.microsoft.com/");

// 4. Save the PDF or stream it from a Web API
pdf.SaveAs("docs-offline-copy.pdf");
' Program.cs — .NET 8 LTS-compatible
Imports IronPdf

' 1. Activate a license (or trial key)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"

' 2. Create a reusable renderer instance
Dim renderer = New ChromePdfRenderer With {
	.RenderingOptions = {
		PaperSize = PdfPaperSize.A4,
		CssMediaType = PdfCssMediaType.Print
	}
}

' 3. Convert Microsoft Docs home page to PDF
Using pdf As PdfDocument = renderer.RenderUrlAsPdf("https://learn.microsoft.com/")
	
	' 4. Save the PDF or stream it from a Web API
	pdf.SaveAs("docs-offline-copy.pdf")
End Using
$vbLabelText   $csharpLabel

Dlaczego to działa

  • ChromePdfRenderer uruchamia instancję Chromium w środowisku sandbox — bez zależności od systemowego Chrome, co pozwala zachować niewielki rozmiar obrazów Docker.
  • RenderUrlAsPdf czeka na zakończenie działania DOM i JavaScript przed wykonaniem zrzutu ekranu, dzięki czemu aplikacje jednostronicowe są renderowane poprawnie.
  • Ustawienie CssMediaType na PRINT nakazuje silnikowi stosowanie reguł specyficznych dla drukowania, odpowiadających działaniu opcji przeglądarki Drukuj → Zapisz jako PDF.
  • Wynikowy plik PdfDocument może zostać zaszyfrowany, podpisany cyfrowo, scalony lub zrasteryzowany — możliwości te omówiono w kolejnych sekcjach.

PoradyDebugowanie z dokładnością do piksela: włącz renderer.LoggingOptions.DebugMode = true i postępuj zgodnie z przewodnikiem po debugowaniu w Headless Chrome, aby sprawdzić DevTools na żywo podczas renderowania.

Powiązane zasoby


Jak przekonwertować surowy kod HTML na plik PDF w .NET Core?

Przekazanie ciągu znaków HTML — lub renderowanego znacznika widoku Razor — do ChromePdfRenderer.RenderHtmlAsPdf natychmiast generuje plik PDF zgodny ze standardami. Metoda ta uruchamia wbudowany silnik Chromium w IronPDF, więc nie jest wymagana instalacja zewnętrznej przeglądarki ani zależność od WebView. Ten sam kod, przedstawiony poniżej, kompiluje się obecnie w środowisku .NET 8 LTS i pozostaje kompatybilny z przyszłymi wersjami .NET 9 oraz planowaną na listopad 2025 r. wersją .NET 10.

Przykład — wygeneruj plik PDF z fragmentu kodu HTML

// Program.cs — compatible with .NET 8 and newer
using IronPdf;

// Sample HTML fragment (could also be read from a file, Razor view, or CMS)
const string html = """
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Quarterly Report</title>
  <style>
     body { font-family:'Segoe UI', sans-serif; margin:1.2rem; }
     header { margin-bottom:2rem; }
     h1 { color:#3056d3; }
     table { width:100%; border-collapse:collapse; margin-top:1rem; }
     th,td { border:1px solid #ddd; padding:0.5rem; text-align:right; }
     tr:nth-child(even){ background-color:#f8f9fa; }
  </style>
</head>
<body>
  <header><h1>Q2 Revenue Summary</h1></header>
  <table>
    <thead><tr><th>Product</th><th>Revenue ($)</th></tr></thead>
    <tbody>
      <tr><td>IronPDF for .NET</td><td>1,200,000</td></tr>
      <tr><td>IronOCR for .NET</td><td>890,000</td></tr>
      <tr><td>IronXL for .NET</td><td>610,000</td></tr>
    </tbody>
  </table>
</body>
</html>
""";

// 1. Create a renderer once and reuse it across conversions
var renderer = new ChromePdfRenderer
{
    RenderingOptions =
    {
        PaperSize    = PdfPaperSize.A4,                  // ISO-standard paper size
        PaperOrientation = PdfPaperOrientation.Portrait,
        CssMediaType = PdfCssMediaType.Screen,           // Respect on-screen CSS
        RenderDelay  = 100,                              // Wait 100 ms for JS/animations
        FallbackEncoding = "utf-8"                       // Handle non-ASCII correctly
    }
};

// 2. Render the HTML fragment
using PdfDocument pdf = renderer.RenderHtmlAsPdf(html);

// 3. Persist to disk or return via ASP.NET Core FileStreamResult
pdf.SaveAs("q2-report.pdf");
// Program.cs — compatible with .NET 8 and newer
using IronPdf;

// Sample HTML fragment (could also be read from a file, Razor view, or CMS)
const string html = """
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Quarterly Report</title>
  <style>
     body { font-family:'Segoe UI', sans-serif; margin:1.2rem; }
     header { margin-bottom:2rem; }
     h1 { color:#3056d3; }
     table { width:100%; border-collapse:collapse; margin-top:1rem; }
     th,td { border:1px solid #ddd; padding:0.5rem; text-align:right; }
     tr:nth-child(even){ background-color:#f8f9fa; }
  </style>
</head>
<body>
  <header><h1>Q2 Revenue Summary</h1></header>
  <table>
    <thead><tr><th>Product</th><th>Revenue ($)</th></tr></thead>
    <tbody>
      <tr><td>IronPDF for .NET</td><td>1,200,000</td></tr>
      <tr><td>IronOCR for .NET</td><td>890,000</td></tr>
      <tr><td>IronXL for .NET</td><td>610,000</td></tr>
    </tbody>
  </table>
</body>
</html>
""";

// 1. Create a renderer once and reuse it across conversions
var renderer = new ChromePdfRenderer
{
    RenderingOptions =
    {
        PaperSize    = PdfPaperSize.A4,                  // ISO-standard paper size
        PaperOrientation = PdfPaperOrientation.Portrait,
        CssMediaType = PdfCssMediaType.Screen,           // Respect on-screen CSS
        RenderDelay  = 100,                              // Wait 100 ms for JS/animations
        FallbackEncoding = "utf-8"                       // Handle non-ASCII correctly
    }
};

// 2. Render the HTML fragment
using PdfDocument pdf = renderer.RenderHtmlAsPdf(html);

// 3. Persist to disk or return via ASP.NET Core FileStreamResult
pdf.SaveAs("q2-report.pdf");
' Program.cs — compatible with .NET 8 and newer
Imports IronPdf

' Sample HTML fragment (could also be read from a file, Razor view, or CMS)
Private Const html As String = "<!DOCTYPE html>
<html lang=""en"">
<head>
  <meta charset=""utf-8"">
  <title>Quarterly Report</title>
  <style>
     body { font-family:'Segoe UI', sans-serif; margin:1.2rem; }
     header { margin-bottom:2rem; }
     h1 { color:#3056d3; }
     table { width:100%; border-collapse:collapse; margin-top:1rem; }
     th,td { border:1px solid #ddd; padding:0.5rem; text-align:right; }
     tr:nth-child(even){ background-color:#f8f9fa; }
  </style>
</head>
<body>
  <header><h1>Q2 Revenue Summary</h1></header>
  <table>
    <thead><tr><th>Product</th><th>Revenue ($)</th></tr></thead>
    <tbody>
      <tr><td>IronPDF for .NET</td><td>1,200,000</td></tr>
      <tr><td>IronOCR for .NET</td><td>890,000</td></tr>
      <tr><td>IronXL for .NET</td><td>610,000</td></tr>
    </tbody>
  </table>
</body>
</html>"

' 1. Create a renderer once and reuse it across conversions
Private renderer = New ChromePdfRenderer With {
	.RenderingOptions = {
		PaperSize = PdfPaperSize.A4,
		PaperOrientation = PdfPaperOrientation.Portrait,
		CssMediaType = PdfCssMediaType.Screen,
		RenderDelay = 100,
		FallbackEncoding = "utf-8"
	}
}

' 2. Render the HTML fragment
Private PdfDocument As using

' 3. Persist to disk or return via ASP.NET Core FileStreamResult
pdf.SaveAs("q2-report.pdf")
$vbLabelText   $csharpLabel

Co pokazuje kod

  • Wbudowany Chromium — IronPDF zawiera silnik Chromium, co gwarantuje zgodność z HTML5, CSS3 i JavaScript w nowoczesnych przeglądarkach.
  • Pojedyncza zależnośćlekka instalacja NuGet obejmuje systemy Windows, Linux, Docker oraz Azure/AWS bez dodatkowych bibliotek systemowych.
  • Opcje renderowaniaPaperSize, CssMediaType i RenderDelay odzwierciedlają ustawienia drukowania przeglądarki, dzięki czemu pliki PDF odpowiadają układom na ekranie.
  • Przyszłościowe ukierunkowanie — interfejs API jest taki sam w .NET 8, .NET 9 STS i nadchodzącym .NET 10, więc długoterminowe koszty utrzymania są minimalne.
  • Haki do przetwarzania końcowegoPdfDocument udostępnia pomocniki do scalania, ochrony hasłem i podpisów cyfrowych — każdy z nich zostanie omówiony w dalszej części tego przewodnika.

Więcej informacji: zapoznaj się z samouczkiem krok po kroku dotyczącym konwersji ciągów HTML do formatu PDF oraz pełną dokumentacją API ChromePdfRenderer.


Jak wyeksportować widok ASP .NET Core MVC do formatu PDF?

IronPDF renderuje w pełni przetworzony widok Razor ( .cshtml ) w taki sam sposób, jak zrobiłaby to przeglądarka, i przesyła wynik jako PdfDocument. Poniższy schemat pracy zapewnia przejrzystość logiki kontrolera, nie wymaga wtyczek przeglądarki i działa na platformach .NET 8 LTS, .NET 9 preview oraz planowanej wersji .NET 10, której premiera przewidziana jest na listopad 2025 roku.

Przykład kontrolera typu end-to-end

// TicketsController.cs — .NET 8 LTS / MVC
using IronPdf;
using Microsoft.AspNetCore.Mvc;
using YourApp.Models;           // TicketViewModel

public class TicketsController : Controller
{
    private readonly ChromePdfRenderer _renderer;

    public TicketsController()
    {
        _renderer = new ChromePdfRenderer
        {
            RenderingOptions =
            {
                PaperSize        = PdfPaperSize.A5,            // Compact ticket size
                PaperOrientation = PdfPdfOrientation.Portrait,
                FitToPaperWidth  = true,
                CssMediaType     = PdfCssMediaType.Print,
                Margins = new PdfMargins(5, 10, 5, 10)         // mm
            }
        };
    }

    // GET /Tickets/Print/42
    public async Task<IActionResult> Print(int id)
    {
        TicketViewModel vm = await _service.GetTicketAsync(id);

        // 1. Render the Razor view to an HTML string
        string html  = await RazorTemplateEngine.RenderViewAsync(
                           HttpContext, "~/Views/Tickets/Print.cshtml", vm);

        // 2. Convert HTML → PDF
        using PdfDocument pdf = _renderer.RenderHtmlAsPdf(html);

        // 3. Stream back as a file
        return File(pdf.BinaryData, "application/pdf",
                    $"ticket-{id}.pdf");
    }
}
// TicketsController.cs — .NET 8 LTS / MVC
using IronPdf;
using Microsoft.AspNetCore.Mvc;
using YourApp.Models;           // TicketViewModel

public class TicketsController : Controller
{
    private readonly ChromePdfRenderer _renderer;

    public TicketsController()
    {
        _renderer = new ChromePdfRenderer
        {
            RenderingOptions =
            {
                PaperSize        = PdfPaperSize.A5,            // Compact ticket size
                PaperOrientation = PdfPdfOrientation.Portrait,
                FitToPaperWidth  = true,
                CssMediaType     = PdfCssMediaType.Print,
                Margins = new PdfMargins(5, 10, 5, 10)         // mm
            }
        };
    }

    // GET /Tickets/Print/42
    public async Task<IActionResult> Print(int id)
    {
        TicketViewModel vm = await _service.GetTicketAsync(id);

        // 1. Render the Razor view to an HTML string
        string html  = await RazorTemplateEngine.RenderViewAsync(
                           HttpContext, "~/Views/Tickets/Print.cshtml", vm);

        // 2. Convert HTML → PDF
        using PdfDocument pdf = _renderer.RenderHtmlAsPdf(html);

        // 3. Stream back as a file
        return File(pdf.BinaryData, "application/pdf",
                    $"ticket-{id}.pdf");
    }
}
Imports IronPdf
Imports Microsoft.AspNetCore.Mvc
Imports YourApp.Models ' TicketViewModel

Public Class TicketsController
    Inherits Controller

    Private ReadOnly _renderer As ChromePdfRenderer

    Public Sub New()
        _renderer = New ChromePdfRenderer With {
            .RenderingOptions = New PdfRenderingOptions With {
                .PaperSize = PdfPaperSize.A5, ' Compact ticket size
                .PaperOrientation = PdfPdfOrientation.Portrait,
                .FitToPaperWidth = True,
                .CssMediaType = PdfCssMediaType.Print,
                .Margins = New PdfMargins(5, 10, 5, 10) ' mm
            }
        }
    End Sub

    ' GET /Tickets/Print/42
    Public Async Function Print(id As Integer) As Task(Of IActionResult)
        Dim vm As TicketViewModel = Await _service.GetTicketAsync(id)

        ' 1. Render the Razor view to an HTML string
        Dim html As String = Await RazorTemplateEngine.RenderViewAsync(
            HttpContext, "~/Views/Tickets/Print.cshtml", vm)

        ' 2. Convert HTML → PDF
        Using pdf As PdfDocument = _renderer.RenderHtmlAsPdf(html)
            ' 3. Stream back as a file
            Return File(pdf.BinaryData, "application/pdf", $"ticket-{id}.pdf")
        End Using
    End Function
End Class
$vbLabelText   $csharpLabel

Co ilustruje ten kod

  • Brak plików tymczasowych — widok Razor jest renderowany w pamięci, a następnie przekazywany bezpośrednio do RenderHtmlAsPdf, co pozwala uniknąć operacji wejścia/wyjścia na dysk oraz sytuacji wyścigu o dostęp do folderu tymczasowego.
  • Wydruk wielkości biletuPaperSize = A5 oraz wąskie marginesy sprawiają, że bilety drukowane w domu są kompaktowe.
  • Spójne style drukowaniaCssMediaType = Print stosuje te same reguły CSS @media print, których używają przeglądarki.
  • Strumieniowanie binarnepdf.BinaryData przesyła dokument bez ingerencji w system plików; idealne dla punktów końcowych API i funkcji Lambda.
  • Renderer wielokrotnego użytkuChromePdfRenderer jest instancjonowany raz na kontroler, a następnie ponownie wykorzystywany, co minimalizuje obciążenie związane z uruchamianiem procesów.

PaperSize, PaperOrientation, FitToPaperWidth

Margins, Header, Footer, Watermark

Kolejny krok: dodaj szyfrowanie, podpisy cyfrowe lub scal wiele zgłoszeń w jeden plik. Zobacz przykład scalania oraz instrukcję dotyczącą podpisów cyfrowych.


Jak mogę dostosować rozmiar papieru, marginesy, nagłówki, znaki wodne i zabezpieczenia przed renderowaniem?

IronPDF udostępnia pojedynczy obiekt ChromePdfRenderOptions, który kontroluje każdy aspekt wydruku — wymiary papieru, orientację, nagłówki i stopki, synchronizację JavaScript, znaki wodne, szyfrowanie i podpisy cyfrowe — a wszystko to bez dodatkowych wtyczek do przeglądarki.

Przykładowy kod — zastosowanie wielu opcji jednocześnie

// AdvancedOptions.cs — .NET 8 compatible
using IronPdf;

var renderer = new ChromePdfRenderer();

// Configure everything in one place
renderer.RenderingOptions = new ChromePdfRenderOptions
{
    // 1. Page layout
    PaperSize        = PdfPaperSize.A4,                     // ISO size
    PaperOrientation = PdfPdfOrientation.Portrait,
    Margins          = new PdfMargins { Top = 20, Bottom = 25, Left = 15, Right = 15 }, // mm

    // 2. Timing & media
    CssMediaType     = PdfCssMediaType.Print,               // Respect @media print
    EnableJavaScript = true,
    RenderDelay      = 200,                                 // Wait 200 ms for animations

    // 3. Headers & footers (HTML gives full design freedom)
    HtmlHeader       = "<header style='font:14px Segoe UI'>Invoice — {{date}}</header>",
    HtmlFooter       = "<footer style='text-align:right;font-size:10px'>Page {{page}} / {{total-pages}}</footer>",

    // 4. Watermark
    Watermark        = new HtmlStamp
    {
        HtmlTemplate = "<div style='font-size:50px;color:#cccccc;opacity:0.3;'>CONFIDENTIAL</div>",
        VerticalAlignment = VerticalAlignment.Center,
        HorizontalAlignment = HorizontalAlignment.Center
    },

    // 5. Security
    SecurityOptions = new PdfSecurityOptions
    {
        OwnerPassword = "StrongOwnerPwd!",
        UserPassword  = "ReadOnly",
        AllowUserPrinting = false,
        AllowUserCopyPasteContent = false
    }
};

// Render any HTML
using PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Advanced Options Demo</h1>");

// Digitally sign with a PFX certificate (optional)
pdf.SignAndStamp("./certs/company.pfx", "Iron Software", "Bangkok", "Approval");

// Save
pdf.SaveAs("advanced-options-demo.pdf");
// AdvancedOptions.cs — .NET 8 compatible
using IronPdf;

var renderer = new ChromePdfRenderer();

// Configure everything in one place
renderer.RenderingOptions = new ChromePdfRenderOptions
{
    // 1. Page layout
    PaperSize        = PdfPaperSize.A4,                     // ISO size
    PaperOrientation = PdfPdfOrientation.Portrait,
    Margins          = new PdfMargins { Top = 20, Bottom = 25, Left = 15, Right = 15 }, // mm

    // 2. Timing & media
    CssMediaType     = PdfCssMediaType.Print,               // Respect @media print
    EnableJavaScript = true,
    RenderDelay      = 200,                                 // Wait 200 ms for animations

    // 3. Headers & footers (HTML gives full design freedom)
    HtmlHeader       = "<header style='font:14px Segoe UI'>Invoice — {{date}}</header>",
    HtmlFooter       = "<footer style='text-align:right;font-size:10px'>Page {{page}} / {{total-pages}}</footer>",

    // 4. Watermark
    Watermark        = new HtmlStamp
    {
        HtmlTemplate = "<div style='font-size:50px;color:#cccccc;opacity:0.3;'>CONFIDENTIAL</div>",
        VerticalAlignment = VerticalAlignment.Center,
        HorizontalAlignment = HorizontalAlignment.Center
    },

    // 5. Security
    SecurityOptions = new PdfSecurityOptions
    {
        OwnerPassword = "StrongOwnerPwd!",
        UserPassword  = "ReadOnly",
        AllowUserPrinting = false,
        AllowUserCopyPasteContent = false
    }
};

// Render any HTML
using PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Advanced Options Demo</h1>");

// Digitally sign with a PFX certificate (optional)
pdf.SignAndStamp("./certs/company.pfx", "Iron Software", "Bangkok", "Approval");

// Save
pdf.SaveAs("advanced-options-demo.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

' Configure everything in one place
renderer.RenderingOptions = New ChromePdfRenderOptions With {
    ' 1. Page layout
    .PaperSize = PdfPaperSize.A4, ' ISO size
    .PaperOrientation = PdfPdfOrientation.Portrait,
    .Margins = New PdfMargins With {.Top = 20, .Bottom = 25, .Left = 15, .Right = 15}, ' mm

    ' 2. Timing & media
    .CssMediaType = PdfCssMediaType.Print, ' Respect @media print
    .EnableJavaScript = True,
    .RenderDelay = 200, ' Wait 200 ms for animations

    ' 3. Headers & footers (HTML gives full design freedom)
    .HtmlHeader = "<header style='font:14px Segoe UI'>Invoice — {{date}}</header>",
    .HtmlFooter = "<footer style='text-align:right;font-size:10px'>Page {{page}} / {{total-pages}}</footer>",

    ' 4. Watermark
    .Watermark = New HtmlStamp With {
        .HtmlTemplate = "<div style='font-size:50px;color:#cccccc;opacity:0.3;'>CONFIDENTIAL</div>",
        .VerticalAlignment = VerticalAlignment.Center,
        .HorizontalAlignment = HorizontalAlignment.Center
    },

    ' 5. Security
    .SecurityOptions = New PdfSecurityOptions With {
        .OwnerPassword = "StrongOwnerPwd!",
        .UserPassword = "ReadOnly",
        .AllowUserPrinting = False,
        .AllowUserCopyPasteContent = False
    }
}

' Render any HTML
Using pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Advanced Options Demo</h1>")
    ' Digitally sign with a PFX certificate (optional)
    pdf.SignAndStamp("./certs/company.pfx", "Iron Software", "Bangkok", "Approval")

    ' Save
    pdf.SaveAs("advanced-options-demo.pdf")
End Using
$vbLabelText   $csharpLabel

Dlaczego te opcje mają znaczenie

  • PaperSize, Margins i CssMediaType odzwierciedlają okno dialogowe drukowania przeglądarki, dzięki czemu układ na ekranie i plik PDF pozostają identyczne w systemach Windows, Linux i Docker.
  • Nagłówki i stopki HTML obsługują tokeny Razor, CSS i JavaScript — przydatne do dynamicznego numerowania stron lub brandingu.
  • HtmlStamp pozwala na tworzenie markowych znaków wodnych za pomocą jednego wiersza kodu z pełną kontrolą nad HTML i CSS.
  • Opcje bezpieczeństwa umożliwiają 128-bitowe szyfrowanie, hasła właściciela/użytkownika oraz szczegółowe uprawnienia bez konieczności korzystania z narzędzi innych firm.
  • Podpisy cyfrowe dodają pieczęć kryptograficzną bezpośrednio do kodu, zapewniając autentyczność prawną i ochronę przed manipulacją.
  • Pomocniki ekstrakcji, takie jak ExtractAllText i ExtractAllImages, odwracają ten proces, gdy wymagana jest analiza.

Szybki przewodnik — Popularne ustawienia

##

PaperSize, PaperOrientation, Margins, CssMediaType, RenderDelay

##

`HtmlHeader`, `HtmlFooter`, dynamiczne symbole zastępcze Razor, tokeny numerów stron

##

`Watermark`, `HtmlStamp`, krycie, wyrównanie

##

`SecurityOptions`, `SignAndStamp`, hasła właścicieli / użytkowników, pieczęcie certyfikatów

Kolejne zadania: scalanie wielu plików PDF, wyodrębnianie tekstu i obrazów oraz wdrażanie w środowisku Docker lub bezserwerowym. Przejdź do sekcji wdrażania, aby zapewnić zgodność między platformami.


Jak mogę wdrożyć kod generujący pliki PDF w Dockerze na systemach Linux i Windows?

IronPdf jest dostarczany jako pojedynczy, samodzielny pakiet NuGet, więc konteneryzacja aplikacji ASP.NET Core (lub konsolowej) jest prosta zarówno w systemie Windows, jak i Linux. Kluczem jest skopiowanie opublikowanych plików binarnych do niewielkiego obrazu środowiska uruchomieniowego oraz, w systemie Linux, dodanie dwóch bibliotek natywnych wymaganych przez IronPDF (libnss3 i libatk1.0-0).

Wielostopniowy plik Dockerfile (Ubuntu 22.04)

Zwróć uwagęDlaczego wieloetapowy? Obraz SDK (etap 1) kompiluje projekt; Ostateczny obraz środowiska uruchomieniowego (etap 2) pozostaje niewielki — < 120 MB — ponieważ narzędzia do kompilacji są usuwane.

####### ---------- stage 1 ----------
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["MyPdfApp.csproj", "."]
RUN dotnet restore

COPY . .
RUN dotnet publish -c Release -o /app/publish

####### ---------- stage 2 ----------
FROM mcr.microsoft.com/dotnet/aspnet:8.0-jammy
######## Install two native libs required by Chromium
RUN apt-get update && \
    apt-get install -y --no-install-recommends libnss3 libatk1.0-0 && \
    rm -rf /var/lib/apt/lists/*

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

Zwróć uwagęKontenery Windows? Zastąp drugi etap przez mcr.microsoft.com/dotnet/aspnet:8.0-windowsservercore-ltsc2022—nie są potrzebne żadne dodatkowe pakiety, ponieważ biblioteki DLL Chromium są dołączone.

Skrypt do kompleksowej walidacji

docker build -t pdf-demo .
docker run --rm -p 8080:80 pdf-demo
######### ↳ Navigate to http://localhost:8080/api/pdf?url=https://example.com
docker build -t pdf-demo .
docker run --rm -p 8080:80 pdf-demo
######### ↳ Navigate to http://localhost:8080/api/pdf?url=https://example.com
SHELL
  • Akcja API wewnętrznie wywołuje ChromePdfRenderer.RenderUrlAsPdf, tak jak w sekcji 2.
  • IronPDF uruchamia swój proces Chromium w środowisku sandbox w kontenerze — nie jest wymagany serwer X, ponieważ renderowanie odbywa się w trybie bezgłowym.
  • Zużycie pamięci pozostaje poniżej 200 MB nawet podczas renderowania dużych plików.

PoradyWskazówka dotycząca rozwiązywania problemów: Jeśli logi kontenera pokazują błąd "libnss3.so not found", sprawdź, czy obecne są zarówno libnss3, jak i libatk1.0-0. Obrazy Alpine nie są obsługiwane, ponieważ bibliotece C musl brakuje wymaganych symboli.

Zasoby wewnętrzne


Jak otworzyć, połączyć, dodać znak wodny i wyodrębnić zawartość z istniejących plików PDF w .NET Core?

IronPDF traktuje każdy plik PDF — niezależnie od tego, czy został wygenerowany przez IronPDF, Adobe® Acrobat czy narzędzia innych firm — jako obiekt najwyższej klasy PdfDocument, który można otwierać, edytować, zabezpieczać i ponownie zapisywać bez utraty jakości. Ta sama powierzchnia API działa obecnie w .NET 8 LTS i kompiluje się bez zmian w wersji zapoznawczej .NET 9 oraz w nadchodzącej wersji .NET 10.

Ujednolicony przykład — otwórz → scal → znak wodny → wyodrębnij

// ManipulateExistingPdf.cs — .NET 8 LTS compatible
using IronPdf;
using System.Linq;

// Step 1: Open two existing files (password-protected PDFs are supported)
PdfDocument invoice  = PdfDocument.FromFile("invoice.pdf", "ReadOnly");   // open with user pwd
PdfDocument tAndCs   = PdfDocument.FromFile("terms.pdf");                 // no pwd required

// Step 2: Merge them (invoice pages first, then T&Cs)
PdfDocument mergedPdf = PdfDocument.Merge(invoice, tAndCs);               // 1-liner merge

// Step 3: Apply a diagonal CONFIDENTIAL watermark to every page
mergedPdf.ApplyStamp(
    "<div style='font-size:60px;color:#d9534f;opacity:0.2;transform:rotate(-45deg);"
  + "width:100%;text-align:center;'>CONFIDENTIAL</div>",
    verticalAlignment   : VerticalAlignment.Center,
    horizontalAlignment : HorizontalAlignment.Center);

// Step 4: Extract all text and the first image for audit purposes
string fullText = mergedPdf.ExtractAllText();
var    image    = mergedPdf.ExtractAllImages().FirstOrDefault();

// Step 5: Save or stream
mergedPdf.SaveAs("invoice-with-terms.pdf");
// ManipulateExistingPdf.cs — .NET 8 LTS compatible
using IronPdf;
using System.Linq;

// Step 1: Open two existing files (password-protected PDFs are supported)
PdfDocument invoice  = PdfDocument.FromFile("invoice.pdf", "ReadOnly");   // open with user pwd
PdfDocument tAndCs   = PdfDocument.FromFile("terms.pdf");                 // no pwd required

// Step 2: Merge them (invoice pages first, then T&Cs)
PdfDocument mergedPdf = PdfDocument.Merge(invoice, tAndCs);               // 1-liner merge

// Step 3: Apply a diagonal CONFIDENTIAL watermark to every page
mergedPdf.ApplyStamp(
    "<div style='font-size:60px;color:#d9534f;opacity:0.2;transform:rotate(-45deg);"
  + "width:100%;text-align:center;'>CONFIDENTIAL</div>",
    verticalAlignment   : VerticalAlignment.Center,
    horizontalAlignment : HorizontalAlignment.Center);

// Step 4: Extract all text and the first image for audit purposes
string fullText = mergedPdf.ExtractAllText();
var    image    = mergedPdf.ExtractAllImages().FirstOrDefault();

// Step 5: Save or stream
mergedPdf.SaveAs("invoice-with-terms.pdf");
' ManipulateExistingPdf.cs — .NET 8 LTS compatible
Imports IronPdf
Imports System.Linq

' Step 1: Open two existing files (password-protected PDFs are supported)
Private invoice As PdfDocument = PdfDocument.FromFile("invoice.pdf", "ReadOnly") ' open with user pwd
Private tAndCs As PdfDocument = PdfDocument.FromFile("terms.pdf") ' no pwd required

' Step 2: Merge them (invoice pages first, then T&Cs)
Private mergedPdf As PdfDocument = PdfDocument.Merge(invoice, tAndCs) ' 1-liner merge

' Step 3: Apply a diagonal CONFIDENTIAL watermark to every page
mergedPdf.ApplyStamp("<div style='font-size:60px;color:#d9534f;opacity:0.2;transform:rotate(-45deg);" & "width:100%;text-align:center;'>CONFIDENTIAL</div>", verticalAlignment := VerticalAlignment.Center, horizontalAlignment := HorizontalAlignment.Center)

' Step 4: Extract all text and the first image for audit purposes
Dim fullText As String = mergedPdf.ExtractAllText()
Dim image = mergedPdf.ExtractAllImages().FirstOrDefault()

' Step 5: Save or stream
mergedPdf.SaveAs("invoice-with-terms.pdf")
$vbLabelText   $csharpLabel

Dlaczego to ma znaczenie

  • Otwieranie i scalaniePdfDocument.FromFile ładuje dowolny plik PDF zgodny ze standardami, w tym pliki zaszyfrowane, natomiast PdfDocument.Merge łączy dowolną liczbę dokumentów za pomocą jednego wywołania.
  • WatermarkApplyStamp (alias HtmlStamp) osadza w pełni stylizowane nakładki HTML/CSS — logo, QR lub tekst ukośny — na wybranych stronach bez rasteryzacji.
  • Pobieranie treściExtractAllText i ExtractAllImages pobierają surowy tekst w formacie UTF-8 lub strumienie obrazów binarnych do dalszej archiwizacji lub potoków AI.
  • Obsługa podpisów cyfrowych – ta sama instancja PdfDocument może zostać zapieczętowana za pomocą SignAndStamp, tworząc skróty zgodne z RFC 3161, dostosowane do wymagań dotyczących podpisów cyfrowych określonych w normie ISO 32000-2.
  • Zgodność z otwartymi standardami – IronPDF zachowuje oryginalną strukturę pliku PDF (czcionki, warstwy, metadane XMP), dzięki czemu wynik pozostaje kompatybilny z programem Adobe® Reader i innymi przeglądarkami zgodnymi z normą ISO 32000-1.
  • Przyszłościowość – API unika zestawów interoperacyjnych i wywołań Win32 GDI, dzięki czemu kod działa bez zmian w systemach Windows, Linux, Docker oraz w nadchodzących bezserwerowych wersjach .NET 10.

Chcesz podzielić, obrócić lub usunąć strony? Zapoznaj się z samouczkiem dotyczącym edycji na poziomie strony, aby poznać szczegółowe operacje.


Jak można szyfrować i podpisywać cyfrowo pliki PDF w .NET Core?

IronPDF zabezpiecza dokument w dwóch etapach: szyfrowanie oparte na standardzie AES (hasła użytkownika/właściciela + szczegółowe uprawnienia) oraz podpisy cyfrowe X.509, które plik zabezpieczają za pomocą skrótu kryptograficznego. Oba interfejsy API działają na tym samym obiekcie PdfDocument, więc przebieg pracy jest identyczny w obecnej wersji .NET 8 LTS i kompiluje się bez zmian w wersji zapoznawczej .NET 9 oraz w nadchodzącej wersji .NET 10.

Przykład — zastosuj 256-bitowe szyfrowanie AES, zablokuj uprawnienia do drukowania i dodaj widoczny podpis

// SecureAndSign.cs — .NET 8 LTS compatible
using IronPdf;

// Step 1: Load an existing PDF (or produce one with RenderHtmlAsPdf)
PdfDocument pdf = PdfDocument.FromFile("financial-report.pdf");

// Step 2: Configure AES-256 encryption & permissions
pdf.SecuritySettings = new PdfSecuritySettings
{
    EncryptionAlgorithm   = PdfEncryptionAlgorithm.AES256Bit,
    OwnerPassword         = "IronAdmin!2025",
    UserPassword          = "ReadOnly",
    AllowUserPrinting     = PdfPrintSecurity.Disabled,
    AllowUserCopyPasteContent = false,
    AllowUserAnnotations  = false
};

// Step 3: Digitally sign with a PFX certificate
pdf.SignAndStamp(
    certificatePath : "./certs/ironsoftware.pfx",
    authority       : "Iron Software Ltd.",
    location        : "Chicago, IL",
    reason          : "Final approval"
);

// Step 4: Persist or stream
pdf.SaveAs("financial-report-secured-signed.pdf");
// SecureAndSign.cs — .NET 8 LTS compatible
using IronPdf;

// Step 1: Load an existing PDF (or produce one with RenderHtmlAsPdf)
PdfDocument pdf = PdfDocument.FromFile("financial-report.pdf");

// Step 2: Configure AES-256 encryption & permissions
pdf.SecuritySettings = new PdfSecuritySettings
{
    EncryptionAlgorithm   = PdfEncryptionAlgorithm.AES256Bit,
    OwnerPassword         = "IronAdmin!2025",
    UserPassword          = "ReadOnly",
    AllowUserPrinting     = PdfPrintSecurity.Disabled,
    AllowUserCopyPasteContent = false,
    AllowUserAnnotations  = false
};

// Step 3: Digitally sign with a PFX certificate
pdf.SignAndStamp(
    certificatePath : "./certs/ironsoftware.pfx",
    authority       : "Iron Software Ltd.",
    location        : "Chicago, IL",
    reason          : "Final approval"
);

// Step 4: Persist or stream
pdf.SaveAs("financial-report-secured-signed.pdf");
' SecureAndSign.cs — .NET 8 LTS compatible
Imports IronPdf

' Step 1: Load an existing PDF (or produce one with RenderHtmlAsPdf)
Private pdf As PdfDocument = PdfDocument.FromFile("financial-report.pdf")

' Step 2: Configure AES-256 encryption & permissions
pdf.SecuritySettings = New PdfSecuritySettings With {
	.EncryptionAlgorithm = PdfEncryptionAlgorithm.AES256Bit,
	.OwnerPassword = "IronAdmin!2025",
	.UserPassword = "ReadOnly",
	.AllowUserPrinting = PdfPrintSecurity.Disabled,
	.AllowUserCopyPasteContent = False,
	.AllowUserAnnotations = False
}

' Step 3: Digitally sign with a PFX certificate
pdf.SignAndStamp(certificatePath := "./certs/ironsoftware.pfx", authority := "Iron Software Ltd.", location := "Chicago, IL", reason := "Final approval")

' Step 4: Persist or stream
pdf.SaveAs("financial-report-secured-signed.pdf")
$vbLabelText   $csharpLabel

Za kulisami

  • Szyfrowanie AES-256 — IronPDF zabezpiecza zawartość za pomocą kluczy AES zatwierdzonych przez NIST, blokując nieautoryzowane otwieranie, drukowanie lub kopiowanie i wklejanie.
  • Szczegółowość uprawnień — właściwości takie jak AllowUserPrinting i AllowUserFormData przełączają uprawnienia dla poszczególnych akcji; Aby ograniczenia zaczęły obowiązywać, wymagane jest hasło właściciela.
  • Podpisy cyfroweSignAndStamp osadza znacznik czasu RFC 3161 oraz łańcuch certyfikatów, tworząc hashe zabezpieczające przed manipulacją, rozpoznawane przez program Adobe® Acrobat oraz inne przeglądarki zgodne z normą ISO 32000-2.
  • Kompleksowe API — zarówno szyfrowanie, jak i podpisywanie modyfikują tę samą instancję PdfDocument, co pozwala uniknąć wielokrotnego przetwarzania plików i zachować wewnętrzne czcionki, warstwy oraz metadane.

PoradyWskazówka dotycząca rozwiązywania problemów: jeśli program Adobe Reader zgłasza "nieprawidłowy podpis", upewnij się, że plik PFX zawiera zaufany certyfikat główny, a ciągi znaków location są zgodne ze standardem ASCII.

Podstawowe ustawienia zabezpieczeń

##

`PdfSecuritySettings` → `OwnerPassword`, `UserPassword`, `EncryptionAlgorithm`, `AllowUserPrinting`

##

`PdfDocument.SignAndStamp` — Ścieżka PFX, uprawnienia, lokalizacja, powód, sygnatura czasowa

Wewnętrzne zasoby do pogłębienia wiedzy


Jak można zoptymalizować i skalować wydajność konwersji HTML do PDF w .NET Core?

Silnik Chrome firmy IronPDF już teraz renderuje większość stron w czasie krótszym niż 1 s na nowoczesnym sprzęcie, ale przepustowość można zwielokrotnić poprzez renderowanie wsadowe, włączenie wielowątkowości oraz ograniczenie obciążenia związanego z Headless Chrome. Poniższe wskazówki mają zastosowanie do wszystkich wersji .NET.

1. Renderowanie wsadowe w puli wątków działających w tle

// BatchRender.cs — Thread-safe on .NET 8+
using IronPdf;
using System.Threading.Tasks;

var htmlSources = Directory.GetFiles("./html", "*.html");
var renderer    = new ChromePdfRenderer();                 // reuse 1 instance

Parallel.ForEach(htmlSources, new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }, file =>
{
    string html = File.ReadAllText(file);
    using PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs(Path.ChangeExtension(file, ".pdf"));
});
// BatchRender.cs — Thread-safe on .NET 8+
using IronPdf;
using System.Threading.Tasks;

var htmlSources = Directory.GetFiles("./html", "*.html");
var renderer    = new ChromePdfRenderer();                 // reuse 1 instance

Parallel.ForEach(htmlSources, new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }, file =>
{
    string html = File.ReadAllText(file);
    using PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs(Path.ChangeExtension(file, ".pdf"));
});
' BatchRender.cs — Thread-safe on .NET 8+
Imports IronPdf
Imports System.Threading.Tasks

Private htmlSources = Directory.GetFiles("./html", "*.html")
Private renderer = New ChromePdfRenderer() ' reuse 1 instance

Parallel.ForEach(htmlSources, New ParallelOptions With {.MaxDegreeOfParallelism = Environment.ProcessorCount}, Sub(file)
	Dim html As String = File.ReadAllText(file)
	Using pdf As PdfDocument = renderer.RenderHtmlAsPdf(html)
		pdf.SaveAs(Path.ChangeExtension(file, ".pdf"))
	End Using
End Sub)
$vbLabelText   $csharpLabel

2. Zmniejszenie kosztów uruchomienia Headless Chrome

IronPDF dostarcza własną kompilację Chromium, ale każde renderowanie wiąże się z niewielkim opóźnieniem przy uruchamianiu. Pomocne jest tworzenie puli, a kontenery Linux muszą zawierać dwie natywne biblioteki:

RUN apt-get update && \
    apt-get install -y --no-install-recommends libnss3 libatk1.0-0

Brak którejkolwiek z bibliotek powoduje wyświetlenie błędu libnss3.so not found w logach Docker.

Zalecane flagi Chrome (automatycznie stosowane przez IronPDF) obejmują --disable-gpu i --no-sandbox w celu ograniczenia problemów z pamięcią i uprawnieniami administratora w kontenerach.

3. Poczekaj na opóźniony JavaScript z RenderDelay lub WaitFor

Strony, które animują liczniki lub pobierają dane po DOMContentLoaded, mogą wymagać krótkiego opóźnienia:

renderer.RenderingOptions.RenderDelay = 200;        // ms
// OR: renderer.RenderingOptions.JavaScript = "WaitFor('window.doneLoading')";
renderer.RenderingOptions.RenderDelay = 200;        // ms
// OR: renderer.RenderingOptions.JavaScript = "WaitFor('window.doneLoading')";
renderer.RenderingOptions.RenderDelay = 200 ' ms
' OR: renderer.RenderingOptions.JavaScript = "WaitFor('window.doneLoading')";
$vbLabelText   $csharpLabel

Zobacz dedykowany samouczek WaitFor dotyczący niestandardowych obietnic i odpytywania DOM.

4. Włącz rejestrowanie debugowania dla jednego żądania

renderer.LoggingOptions.DebugMode        = true;
renderer.LoggingOptions.LogsToConsole    = true;
renderer.LoggingOptions.LogFilePath      = "./logs/ironpdf-debug.log";
renderer.LoggingOptions.DebugMode        = true;
renderer.LoggingOptions.LogsToConsole    = true;
renderer.LoggingOptions.LogFilePath      = "./logs/ironpdf-debug.log";
renderer.LoggingOptions.DebugMode = True
renderer.LoggingOptions.LogsToConsole = True
renderer.LoggingOptions.LogFilePath = "./logs/ironpdf-debug.log"
$vbLabelText   $csharpLabel

Trace w Live DevTools ujawniają brakujące czcionki, obrazy 404 i zdarzenia czasowe bez konieczności ponownej kompilacji kodu.

5. Ponowne wykorzystanie szablonów PDF zamiast ponownego renderowania

W przypadku serii faktur należy utworzyć szablon PDF z symbolami zastępczymi, takimi jak [[name]], i wykonać zamianę tekstu zamiast odtwarzać złożony kod HTML. Działa 10 razy szybciej i zajmuje mniej pamięci.

Lista kontrolna do szybkiego dostosowania

##

`Parallel.ForEach`, `async/await`, ponownie wykorzystaj pojedynczy `ChromePdfRenderer`

##

Użyj `aspnet:8.0-jammy`; zainstaluj `libnss3` + `libatk1.0-0`; flagi `--no-sandbox`, `--disable-gpu`

##

`RenderDelay`, `WaitFor()`, rejestruj oś czasu DevTools dla powolnych hydracji SPA

Więcej informacji


Gdzie mogę pobrać bezpłatną wersję próbną, wybrać licencję i uzyskać pomoc ekspertów? {#anchor-10-resources}

30-dniowy klucz próbny jest wydawany natychmiast po wypełnieniu formularza Rozpocznij bezpłatny okres probny i odblokowuje wszystkie funkcje — w tym konwersję HTML do PDF, podpisy cyfrowe i szyfrowanie — bez znaków wodnych.

Po zapoznaniu się z biblioteką wybierz Licencję wieczystą dla programistów, Licencwdrożeniową lub Licencję Enterprise; Każdy plan obejmuje bezpłatne drobne aktualizacje, prawa do użytkowania w środowiskach deweloperskich, testowych i produkcyjnych oraz 30-dniową gwarancję zwrotu pieniędzy. Zastosowanie klucza wymaga zaledwie jednej linii kodu (IronPdf.License.LicenseKey = "YOUR-KEY";) i może zostać zautomatyzowane w ramach procesów CI/CD.

Kompleksowa dokumentacja — przewodniki szybkiego startu, Dokumentacja API i filmy instruktażowe — znajduje się na portalu dokumentacji i jest aktualizowana przy każdej nowej wersji .NET.

Na pytania techniczne zespół wsparcia z siedzibą w Chicago odpowiada w ciągu jednego dnia roboczego za pośrednictwem czatu na żywo, poczty elektronicznej lub telefonu.

Najczęściej zadawane pytania dotyczące optymalizacji wydajności i wdrażania zostały zebrane w Centrum pomocy dotyczącej wydajności.

Szybkie linki

Zasoby URL Dlaczego to ma znaczenie
Uzyskaj 30-dniowy klucz probny https://ironpdf.com/demos/ Odblokowuje wszystkie funkcje bez znaków wodnych
Licencjonowanie i ceny https://ironpdf.com/licensing/ Plany wieczyste lub abonamentowe; Pakiet Iron Suite zawiera 10 bibliotek
Dokumentacja API https://ironpdf.com/object-reference/api/ Pełna dokumentacja klas, np. ChromePdfRenderer
Portal dokumentacji https://ironpdf.com/docs/ Poradniki, samouczki, przykładowe projekty
Pomoc w zakresie wydajności https://ironpdf.com/troubleshooting/ironpdf-performance-assistance/ Wskazówki dotyczące optymalizacji i skalowania
Skontaktuj się z pomocą techniczną https://ironsoftware.com/contact-us/ Czat na żywo, e-mail, wsparcie telefoniczne

Kolejne kroki

  1. Sklonuj przykładowe repozytorium, które demonstruje wszystkie główne funkcje — od renderowania widoków MVC po szyfrowanie AES-256.
  2. Wprowadź klucz próbny do istniejącego rozwiązania i uruchom testy jednostkowe, aby sprawdzić kompatybilność między platformami.
  3. Umów się na prezentację na żywo z zespołem inżynierów, aby uzyskać zalecenia dotyczące konkretnego projektu.

Dzięki tym zasobom każdy zespół .NET może dostarczyć do produkcji pliki PDF o idealnej rozdzielczości — lokalnie, w Dockerze lub w środowisku bezserwerowym — w ciągu jednego sprintu.

Często Zadawane Pytania

Jak przekonwertować HTML na PDF w .NET Core?

Możesz przekonwertować HTML na PDF w .NET Core używając biblioteki IronPDF. Najpierw zainstaluj pakiet NuGet IronPDF, a następnie stwórz instancję ChromePdfRenderer. Użyj metody RenderHtmlAsPdf aby konwertować ciągi HTML do PDF.

Jak mogę przekonwertować URL strony internetowej na dokument PDF?

Aby przekonwertować URL strony internetowej na dokument PDF, zainstaluj pakiet NuGet IronPDF, stwórz instancję ChromePdfRenderer, i użyj metody RenderUrlAsPdf aby wyrenderować URL do PDF. Wynik można zapisać używając metody SaveAs.

Jaki jest najlepszy sposób na konwersję widoków Razor do PDF?

Najlepszym sposobem na konwersję widoków Razor do PDF jest użycie IronPDF. Najpierw przekonwertuj widok Razor na ciąg HTML, a następnie przekaż ten ciąg do metody RenderHtmlAsPdf aby utworzyć dokument PDF.

Jak mogę poprawić bezpieczeństwo moich dokumentów PDF?

Popraw bezpieczeństwo PDF używając IronPDF przez zastosowanie szyfrowania AES-256, ustawianie haseł i kontrolowanie uprawnień użytkownika. Skonfiguruj te ustawienia za pomocą właściwości SecuritySettings, aby ograniczać działania takie jak drukowanie i edytowanie.

Jakie opcje są dostępne do dostosowywania renderowania PDF?

IronPDF oferuje różne opcje renderowania za pomocą klasy ChromePdfRenderOptions, w tym ustawienie rozmiaru papieru, orientacji, marginesów i stosowanie typów mediów CSS. Możesz także dodawać nagłówki, stopki i znaki wodne, aby uzyskać dostosowany wynik dokumentu.

Jak wdrożyć aplikację do generowania PDF w kontenerze Docker?

Aby wdrożyć aplikację do generowania PDF w kontenerze Docker, skonfiguruj zależności Linux w pliku Dockerfile i ustaw uprawnienia użytkownika. Użyj IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig do automatycznego zarządzania zależnościami.

Jak mogę dodać znaki wodne do PDF za pomocą C#?

Możesz dodać znaki wodne do plików PDF za pomocą IronPDF, korzystając z właściwości Watermark z obiektami HtmlStamp. Dla zaawansowanych opcji klasa HtmlStamper pozwala na dostosowanie położenia i efektów przeźroczystości.

Czy mogę dodać podpisy cyfrowe do dokumentów PDF?

Tak, możesz dodać podpisy cyfrowe do PDF za pomocą klasy PdfSignature IronPDF. Użyj metody Sign na PdfDocument i podaj plik certyfikatu, aby zapewnić integralność i autentyczność dokumentu.

Jak mogę zoptymalizować wydajność generowania PDF w .NET Core?

Zoptymalizuj wydajność generowania PDF poprzez ponowne użycie bezpiecznej dla wątków instancji ChromePdfRenderer, włączenie wielowątkowości i usunięcie zbędnych flag startowych headless-Chrome. Te praktyki pomagają poprawić efektywność aplikacji.

Czy przykład HTML-to-PDF w .NET Core w tym samouczku działa również z .NET 10?

Tak. IronPDF jest w pełni kompatybilny z .NET 10, więc możesz używać przykładu ChromePdfRenderer HTML-to-PDF z tego samouczka w projektach .NET 10 bez zmiany podstawowego kodu. Główna różnica polega na tym, że celujesz w .NET 10, tworząc projekt, a następnie instalujesz najnowszy pakiet IronPdf z NuGet, aby generować doskonałe jakościowo PDF z HTML, widoków Razor lub URL.

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Dyrektor ds. technologii

Jacob Mellor jest Chief Technology Officer w Iron Software i wizjonerskim inżynierem, pionierem technologii C# PDF. Jako pierwotny deweloper głównej bazy kodowej Iron Software, kształtuje architekturę produktów firmy od jej początku, przekształcając ją wspólnie z CEO Cameron Rimington w firmę liczą...

Czytaj więcej
Sprawdzone przez
Jeff Fritz
Jeffrey T. Fritz
Główny Menedżer Programu - Zespół .NET Community
Jeff jest również Głównym Menedżerem Programu dla zespołów .NET i Visual Studio. Jest producentem wykonawczym wirtualnej serii konferencji .NET Conf i prowadzi 'Fritz and Friends', transmisję na żywo dla deweloperów emitowaną dwa razy w tygodniu, gdzie rozmawia o technologii i pisze kod razem z widzami. Jeff pisze warsztaty, prezentacje i planuje treści dla największych wydarzeń Microsoft dla deweloperów, w tym Microsoft Build, Microsoft Ignite, .NET Conf i Microsoft MVP Summit.
Gotowy, aby rozpocząć?
Nuget Pliki do pobrania 18,926,724 | Wersja: 2026.5 just released
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu? PM > Install-Package IronPdf
Uruchom przykład i zobacz, jak Twój kod HTML zamienia się w plik PDF.