Jak generować pliki PDF w .NET Core

Konwersja HTML na PDF w .NET Core za pomocą C# z IronPDF

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

Generowanie wysokiej jakości PDFów bezpośrednio z HTML to często wymagana funkcja w nowoczesnych aplikacjach .NET – raporty, faktury i bilety wymagają doskonałej jakości wyjściowej, która odpowiada interfejsowi użytkownika. IronPDF usprawnia ten proces, udostępniając jedno API C# do renderowania HTML, widoków Razor oraz całych stron internetowych do dokumentów PDF zgodnych z normami. Po zakończeniu tego przewodnika, programista będzie w stanie konwertować URL, surowy HTML lub widoki MVC w projekcie ASP.NET Core i wdrożyć ten sam kod na Windows, Linux, Docker lub w środowiskach bezserwerowych.

PoradyDla problemow z ukladami, IronPDF dostarcza debugger Headless Chrome, który pomaga w diagnozowaniu niuansow CSS, JavaScript oraz media-query przed zakonczeniem renderowania PDF. Przejrzyj dedykowany przewodnik HTML-do-PDF dla szczegółowych technik.

Szybki start: Tworzenie PDF z HTML w .NET Core

Bez trudu zamień HTML na PDF w .NET Core przy użyciu biblioteki IronPDF. Ten przewodnik dostarcza prosty przykład, aby szybko zacząć, renderując zawartość HTML do wysokiej jakości PDF przy minimalnym kodzie. Idealny dla programistów, którzy chcą łatwo zintegrować tworzenie PDFów z ich 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. InstallInstall-Package IronPdf
  2. Render a URLChromePdfRenderer.RenderUrlAsPdf()
  3. Render raw HTMLChromePdfRenderer.RenderHtmlAsPdf()
  4. Eksportuj widok RazorChromePdfRenderer.RenderHtmlAsPdfAsync()
  5. Doprecyzuj wyjście – wykorzystaj ChromePdfRenderer.RenderingOptions

Co obejmuje ten tutorial

  • Konwersja URL, ciagu HTML i widoku Razor
  • Konfiguracja papieru, marginesu i typu media
  • Wdrazanie kross-platformowe (Windows, Linux, Docker)
  • Post-procesowanie: lacz, dodaj znaki wodne, chroń hasłem i podpisuj cyfrowo PDFy
  • Przykład end-to-end: aplikacja MVC rezerwacji biletów

Jak zainstalować bibliotekę PDF w .NET Core?

Instalacja biblioteki w projekcie .NET 8 wymaga jednej linijki kodu i jest kompatybilna z wersją .NET 9 preview oraz nadchodzącym wydaniem .NET 10. Użyj Konsoli Menedżera Pakietów NuGet, a menedżer pakietów sam rozwiąże wszystkie zależności dla 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 wewnątrz twojego katalogu projektu.

Po zainstalowaniu, potwierdź działanie, konwertując dowolny publiczny URL:

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-3.cs
public class ClientModel
{
    [Required]
    public string Name { get; set; }
    [Required]
    public string Phone { get; set; }
    [Required]
    public string Email { get; set; }
}
Public Class ClientModel
	<Required>
	Public Property Name() As String
	<Required>
	Public Property Phone() As String
	<Required>
	Public Property Email() As String
End Class
$vbLabelText   $csharpLabel

Jak to działa

  • ChromePdfRenderer uruchamia instancję Chromium w powłoce - nie jest wymagana oddzielna instalacja Chrome.
  • RenderUrlAsPdf przechwytuje całkowicie wyrenderowany DOM, w tym treści napędzane przez JavaScript, zapytania medialne CSS i czcionki.
  • Uzyskany PdfDocument udostępnia metody pomocnicze do łączenia, ochrony hasłem lub cyfrowego podpisywania wyjścia - możliwości omawiane później w tym tutorialu.

Po więcej szczegółów na temat niuansów wdrożeniowych (Azure App Service, AWS Lambda, on-prem Linux) zobacz dedykowany przewodnik instalacji oraz strony zaawansowanej konfiguracji NuGet. Wewnętrzne wskazówki CI/CD dla Docker i klastrów K8s omówiono w najlepszych praktykach wdrażania Docker.


Jak usługa .NET Core może przekształcićURLstrony internetowej na PDF?

Jedno wywołanie RenderUrlAsPdf wystarczy: przekaż dowolny publicznie dostępny URL, a IronPDF zwróci pełni wyrenderowany, zgodny ze standardami PDF. Kod poniżej jest skierowany na .NET 8 LTS i kompiluje się bez zmian w .NET 9 preview oraz nadchodzącym wydaniu .NET 10 w 2025 roku.

Krok po kroku przykład

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-4.cs
public class ClientServices
{
    private static ClientModel _clientModel;
    public static void AddClient(ClientModel clientModel)
    {
        _clientModel = clientModel;
    }
    public static ClientModel GetClient()
    {
        return _clientModel;
    }
}
Public Class ClientServices
	Private Shared _clientModel As ClientModel
	Public Shared Sub AddClient(ByVal clientModel As ClientModel)
		_clientModel = clientModel
	End Sub
	Public Shared Function GetClient() As ClientModel
		Return _clientModel
	End Function
End Class
$vbLabelText   $csharpLabel

Dlaczego to działa

  • ChromePdfRenderer uruchamia instancję Chromium w powłoce - brak zależności od systemowego Chrome, co utrzymuje obrazy Docker smukłe.
  • RenderUrlAsPdf oczekuje na zakończenie DOM i JavaScript zanim wykona zdjęcie, więc aplikacje jednostronicowe są renderowane prawidłowo.
  • Ustawienie CssMediaType na Print mówi silnikowi, aby używał drukowych reguł specyficznych, dopasowując wyjście przeglądarki Print → Save as PDF.
  • Uzyskany PdfDocument może być zaszyfrowany, podpisany cyfrowo, złączony lub zrastratoryzowany - możliwości omawiane w późniejszych sekcjach.

PoradyPixel-perfect debugging: włącz renderer.LoggingOptions.DebugMode = true i postępuj zgodnie z Przewodnikiem debugowania Headless Chrome, aby inspekcjonować DevTools na żywo podczas renderowania.

Powiązane zasoby

-Dokumentacja API– ChromePdfRenderer.RenderUrlAsPdf -Dokumentacja API– PdfDocument.SaveAs


Jak przekształcić surowy HTML na PDF w .NET Core?

Przekazywanie ciągu HTML — lub wyrenderowanego markup Razor view — do ChromePdfRenderer.RenderHtmlAsPdf natychmiast tworzy zgodny ze standardami PDF. Metoda uruchamia wbudowany silnik Chromium IronPDF, więc nie jest wymagana instalacja zewnętrznej przeglądarki ani zależności WebView. Ten sam kod, który poniżej pokazano, kompiluje się w .NET 8 LTS dzisiaj i pozostaje kompatybilny z wersją .NET 9 i zaplanowanym wydaniem .NET 10 w listopadzie 2025 roku.

Przykład — generowanie PDF z fragmentu HTML

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-5.cs
@model IronPdfMVCHelloWorld.Models.ClientModel
@{
  ViewBag.Title = "Book Ticket";
}
<h2>Index</h2>
@using (Html.BeginForm())
{
  <div class="form-horizontal">
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
    <div class="form-group">
      @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
      <div class="col-md-10">
        @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
      </div>
    </div>
    <div class="form-group">
      @Html.LabelFor(model => model.Phone, htmlAttributes: new { @class = "control-label col-md-2" })
      <div class="col-md-10">
        @Html.EditorFor(model => model.Phone, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.Phone, "", new { @class = "text-danger" })
      </div>
    </div>
    <div class="form-group">
      @Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" })
      <div class="col-md-10">
        @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" })
      </div>
    </div>
    <div class="form-group">
      <div class="col-md-10 pull-right">
        <button type="submit" value="Save" class="btn btn-sm">
          <i class="fa fa-plus"></i>
          <span>
            Save
          </span>
        </button>
      </div>
    </div>
  </div>
}
model ReadOnly Property () As IronPdfMVCHelloWorld.Models.ClientModel
  ViewBag.Title = "Book Ticket"
End Property
'INSTANT VB TODO TASK: The following line could not be converted:
(Of h2) Index</h2> [using](Html.BeginForm())
If True Then
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'  <div class="form-horizontal"> @Html.ValidationSummary(True, "", New { @class = "text-danger" }) <div class="form-group"> @Html.LabelFor(model => model.Name, htmlAttributes: New { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Name, New { htmlAttributes = New { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Name, "", New { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Phone, htmlAttributes: New { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Phone, New { htmlAttributes = New { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Phone, "", New { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Email, htmlAttributes: New { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Email, New { htmlAttributes = New { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Email, "", New { @class = "text-danger" }) </div> </div> <div class="form-group"> <div class="col-md-10 pull-right"> <button type="submit" value="Save" class="btn btn-sm"> <i class="fa fa-plus"></i> <span> Save </span> </button> </div> </div> </div> }
$vbLabelText   $csharpLabel

Co demonstracje kod

  • Wbudowane Chromium — IronPDF zawiera silnik Chromium, gwarantując równorzędność HTML5, CSS3 i JavaScript z nowoczesnymi przeglądarkami.
  • Pojedyncza zależnośćlekka instalacja NuGet obejmuje Windows, Linux, Docker i Azure/AWS bez dodatkowych bibliotek systemowych.
  • Opcje renderowaniaPaperSize, CssMediaType i RenderDelay odzwierciedlają ustawienia drukowania przeglądarek, dzięki czemu PDF-y dopasowują się do układów ekranowych.
  • Odporność na przyszłość — powierzchnia API jest taka sama w .NET 8, .NET 9 STS i nadchodzącym .NET 10, dzięki czemu utrzymanie długoterminowe jest minimalne.
  • Hooks postprocessingowePdfDocument udostępnia pomocne metody do łączenia, ochrony hasłem i podpisy cyfrowe — każde omawiane później w tym przewodniku.

Dalsze czytanie: zobacz krok po kroku Tutorial HTML-string-to-PDF i pełną dokumentację ChromePdfRenderer API.


Jak można eksportować widok ASP .NET Core MVC do 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. Przepływ pracy poniżej utrzymuje czystość logiki kontrolera, nie wymaga wtyczek przeglądarki i działa w .NET 8 LTS, .NET 9 preview i zaplanowanym wydaniu .NET 10 w listopadzie 2025 roku.

Przykład kontrolera 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

  • Bez plików tymczasowych — widok Razor jest renderowany w pamięci, a następnie przekazywany bezpośrednio do RenderHtmlAsPdf, unikając operacji I/O dysku i wyścigowych warunków folderów tymczasowych .
  • Wynik z rozmiarem biletowymPaperSize = A5 i wąskie marginesy utrzymują bilety do wydruku w domu kompaktowe.
  • Spójne style drukowaniaCssMediaType = Print stosuje te same zasady CSS @media print, z których korzystają przeglądarki.
  • Binarny streamingpdf.BinaryData strumieniuje dokument bez dotykania systemu plików; idealne dla punktów końcowych API i funkcji Lambda.
  • Renderowanie wielokrotnego użytkuChromePdfRenderer jest instancjonowane raz na kontroler, a następnie wielokrotnie używane, minimalizując koszty uruchamiania procesów.

PaperSize, PaperOrientation, FitToPaperWidth

Margins, Header, Footer, Watermark

Kolejny krok: dodaj szyfrowanie, podpisy cyfrowe, lub złącz wiele biletów w jeden plik. Zobacz przykład łączenia i przewodnik podpisu cyfrowego.


Icon Quote related to Co ilustruje ten kod

Moją ulubioną biblioteką tego typu jest IronPDF. Umożliwia ona szybkie i efektywne manipulowanie plikami PDF. Posiada także wiele cennych funkcji, takich jak eksport do formatu PDF/A i cyfrowe podpisywanie dokumentów PDF.

Milan Jovanovic related to Co ilustruje ten kod

Milan Jovanovic

Microsoft MVP

Zobacz studium przypadku
Icon Quote related to Co ilustruje ten kod

IronOCR pozwala nam oszczędzić 40 000 USD rocznie na ręcznym przetwarzaniu, jednocześnie zwiększając produktywność i uwalniając zasoby do zadań o wysokim wpływie. Gorąco polecam.

Brent Matzelle related to Co ilustruje ten kod

Brent Matzelle

Dyrektor technologiczny, OPYN

Zobacz studium przypadku
Icon Quote related to Co ilustruje ten kod

IronSuite odgrywa kluczową rolę w naszej działalności. Są to narzędzia zwiększające wydajność w całej firmie, w tym tworzenie planów pięter i poprawa zarządzania zapasami.

David Jones related to Co ilustruje ten kod

David Jones

Główny inżynier oprogramowania, Agorus Build

Zobacz studium przypadku

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 wyjścia — wymiary papieru, orientację, nagłówki i stopki, czas JavaScript, znaki wodne, szyfrowanie i podpisy cyfrowe — wszystko to bez dodatkowych pluginów przeglądarki.

Próbka kodu — zastosowanie wielu opcji naraz

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-7.cs
[HttpPost]
public ActionResult Index(ClientModel model)
{
    if (ModelState.IsValid)
    {
        ClientServices.AddClient(model);
        return RedirectToAction("TicketView");
    }
  return View(model);
}
<HttpPost>
Public Function Index(ByVal model As ClientModel) As ActionResult
	If ModelState.IsValid Then
		ClientServices.AddClient(model)
		Return RedirectToAction("TicketView")
	End If
  Return View(model)
End Function
$vbLabelText   $csharpLabel

Dlaczego te opcje mają znaczenie

  • PaperSize, Margins i CssMediaType odwzorowują okno dialogowe drukowania przeglądarki, dzięki czemu układy na ekranie i PDF pozostają identyczne na platformach Windows, Linux i Docker.
  • HTML headers and footers wspierają tokeny Razor, CSS i JavaScript — przydatne do dynamicznych numerów stron lub brandingu.
  • HtmlStamp umożliwia jednym wierszem tworzenie spersonalizowanych znaków wodnych z pełną kontrolą nad HTML i CSS.
  • Opcje zabezpieczeń umożliwiają szyfrowanie 128-bitowe, hasła właściciela/użytkownika i szczegółowe uprawnienia bez użycia narzędzi firm trzecich.
  • Podpisy cyfrowe dodają kryptograficzne pieczęcie bezpośrednio w kodzie, zachowując legalną autentyczność i dowód naruszenia.
  • Pomocnicy ekstrakcji, tacy jak ExtractAllText i ExtractAllImages, odwracają proces, gdy wymagana jest analiza.

Szybki przegląd — Popularne ustawienia

##

PaperSize, PaperOrientation, Margins, CssMediaType, RenderDelay

##

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

##

`Watermark`, `HtmlStamp`, przezroczystość, wyrównanie

##

`SecurityOptions`, `SignAndStamp`, hasła właściciela/użytkownika, zapieczętowanie certyfikatem

Następne zadania: złącz kilka PDFów, wyciągnij tekst i obrazy, i wdrażaj na Docker lub bezserwerowo. Przejdź do sekcji wdrożeniowej, aby zapewnić zgodność międzyplatformową.


Jak mogę wdrożyć kod generacji PDF na Docker w Linux i Windows?

IronPdf jest dostarczana jako pojedynczy samodzielny pakiet NuGet, więc konteneryzacja aplikacji ASP.NET Core (lub konsolowej) jest prosta zarówno na Windows, jak i Linux. Kluczem jest skopiowanie opublikowanych binariów do smukłego obrazka czasu wykonywania, a na Linuxie dodanie dwóch natywnych bibliotek wymaganych przez IronPDF (libnss3 i libatk1.0-0).

Wieloetapowy Dockerfile (Ubuntu 22.04)

Zwróć uwagęDlaczego wieloetapowy? Obraz SDK (etap 1) kompiluje projekt; końcowy obraz wykonawczy (etap 2) pozostaje smukły — < 120 MB — ponieważ narzędzia kompilacyjne są odrzucane.

####### ---------- 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 mcr.microsoft.com/dotnet/aspnet:8.0-windowsservercore-ltsc2022 — nie są potrzebne dodatkowe pakiety, ponieważ DLL-e Chromium są dołączone.

Skrypt walidacji end-to-end

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, podobnie jak w Sekcji2.
  • IronPDF uruchamia swój proces Chromium w trybie piaskownicy wewnątrz kontenera — nie jest wymagany serwer X, ponieważ renderuje w trybie headless.
  • Zużycie pamięci pozostaje poniżej 200 MB nawet podczas dużych renderów.

PoradyPorada dotycząca rozwiązywania problemów: Jeśli logi kontenera pokazują błąd "libnss3.so not found", upewnij się, że zarówno libnss3, jak i libatk1.0-0 są obecne. Obrazy Alpine nie są obsługiwane, ponieważ biblioteka musl C nie zawiera wymaganych symboli.

Zasoby wewnętrzne


Jak mogę otworzyć, połączyć, oznaczyć znakiem wodnym i wyciągnąć zawartość z istniejących PDF w .NET Core?

IronPDF traktuje każdy PDF — czy to wygenerowany przez IronPDF, Adobe® Acrobat, czy narzędzia firm trzecich — jako pełnoprawny obiekt PdfDocument, który można otworzyć, edytować, zabezpieczyć i ponownie zapisać bez utraty jakości. Ta sama powierzchnia API działa na .NET 8 LTS dzisiaj i kompiluje się bez zmian na wersji .NET 9 preview oraz nadchodzącym wydaniu .NET 10.

Przykład zjednoczony — otwórz → połącz → oznakuj znakiem wodnym → wyciągnij

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-10.cs
[HttpPost]
public ActionResult TicketView(TicketModel model)
{
    IronPdf.Installation.TempFolderPath = $@"{Directory.GetParent}/irontemp/";
    IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;
    var html = this.RenderViewAsync("_TicketPdf", model);
    var renderer = new IronPdf.ChromePdfRenderer();
    using var pdf = renderer.RenderHtmlAsPdf(html.Result, @"wwwroot/css");
    return File(pdf.Stream.ToArray(), "application/pdf");
}
<HttpPost>
Public Function TicketView(ByVal model As TicketModel) As ActionResult
	IronPdf.Installation.TempFolderPath = $"{AddressOf Directory.GetParent}/irontemp/"
	IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = True
	Dim html = Me.RenderViewAsync("_TicketPdf", model)
	Dim renderer = New IronPdf.ChromePdfRenderer()
	Dim pdf = renderer.RenderHtmlAsPdf(html.Result, "wwwroot/css")
	Return File(pdf.Stream.ToArray(), "application/pdf")
End Function
$vbLabelText   $csharpLabel

Dlaczego to ma znaczenie

  • Otwórz i scalPdfDocument.FromFile ładuje każdy zgodny ze standardami PDF, w tym pliki zaszyfrowane, a PdfDocument.Merge konkatenizuje dowolną liczbę dokumentów w jednym wywołaniu.
  • Znak wodnyApplyStamp (znany również jako HtmlStamp) osadza w pełni stylizowane nakładki HTML/CSS — logo, kod QR lub tekst ukośny — na wybranych stronach bez rastryzacji.
  • Ekstrakcja treściExtractAllText i ExtractAllImages wyciągają surowy tekst UTF-8 lub strumienie obrazów binarnych do dalszego archiwizowania lub pracy w ramach sztucznej inteligencji.
  • Gotowe do podpisów cyfrowych – ta sama instancja PdfDocument może zostać zapieczętowana za pomocą SignAndStamp, tworząc hashe zgodne z RFC 3161, zgodne z wymaganiami dotyczącymi podpisów cyfrowych ISO 32000-2.
  • Zgodność ze standardami otwartymi — IronPDF zachowuje oryginalną strukturę PDF (czcionki, warstwy, metadane XMP), dzięki czemu wyjście pozostaje kompatybilne z Adobe® Reader i innymi ISO 32000-1 przeglądarkami.
  • Przyszłościowe — API unika asemblerów interop i wywołań Win32 GDI, więc kod działa bez zmian na Windows, Linux, Docker i nadchodzących SKU .NET 10 bezserwerowy.

Potrzebujesz podzielić, obrócić lub usunąć strony? Zobacz tutorial edycji na poziomie strony dla operacji zróżnicowanych.


Jak można zaszyfrować i cyfrowo podpisać PDF w .NET Core?

IronPDF zabezpiecza dokument w dwóch krokach: szyfrowanie oparte na AES (hasła użytkownika/właściciela + szczegółowe uprawnienia) i cyfrowe podpisy X.509, które zamykają plik kryptograficznym skrótem. Obydwa API działają na tym samym obiekcie PdfDocument, więc przepływ pracy jest identyczny w przypadku .NET 8 LTS dzisiaj i kompiluje się bez zmian w przypadku podglądu .NET 9 oraz nadchodzącego wydania .NET 10.

Przykład — zastosuj AES 256-bitów, zablokuj prawa do wydruku i dodaj widoczny podpis

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-11.cs
using System.IO;
using System.Threading.Tasks;

public static class ControllerExtensions
{
    public static async Task<string> RenderViewAsync<TModel>(this Controller controller, string viewName, TModel model, bool partial = false)
    {
        if (string.IsNullOrEmpty(viewName))
        {
            viewName = controller.ControllerContext.ActionDescriptor.ActionName;
        }
        controller.ViewData.Model = model;
        using (var writer = new StringWriter())
        {
            IViewEngine viewEngine = controller.HttpContext.RequestServices.GetService(typeof(ICompositeViewEngine)) as ICompositeViewEngine;
            ViewEngineResult viewResult = viewEngine.FindView(controller.ControllerContext, viewName, !partial);
            if (viewResult.Success == false)
            {
                return $"A view with the name {viewName} could not be found";
            }
            ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, writer, new HtmlHelperOptions());
            await viewResult.View.RenderAsync(viewContext);
            return writer.GetStringBuilder().ToString();
        }
    }
}
Imports System.IO
Imports System.Threading.Tasks

Public Module ControllerExtensions
	<System.Runtime.CompilerServices.Extension> _
	Public Async Function RenderViewAsync(Of TModel)(ByVal controller As Controller, ByVal viewName As String, ByVal model As TModel, Optional ByVal As Boolean = False) As Task(Of String)
		If String.IsNullOrEmpty(viewName) Then
			viewName = controller.ControllerContext.ActionDescriptor.ActionName
		End If
		controller.ViewData.Model = model
		Using writer = New StringWriter()
			Dim viewEngine As IViewEngine = TryCast(controller.HttpContext.RequestServices.GetService(GetType(ICompositeViewEngine)), ICompositeViewEngine)
			Dim viewResult As ViewEngineResult = viewEngine.FindView(controller.ControllerContext, viewName, Not partial)
			If viewResult.Success = False Then
				Return $"A view with the name {viewName} could not be found"
			End If
			Dim viewContext As New ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, writer, New HtmlHelperOptions())
			Await viewResult.View.RenderAsync(viewContext)
			Return writer.GetStringBuilder().ToString()
		End Using
	End Function
End Module
$vbLabelText   $csharpLabel

Kulisy działania

  • Szyfrowanie AES-256 — IronPDF pakuje ładunek przy użyciu kluczy AES zatwierdzonych przez NIST, blokując nieautoryzowane otwieranie, drukowanie lub kopiowanie.
  • Granulacja uprawnień — właściwości takie jak AllowUserPrinting i AllowUserFormData przełączają prawa do działania; wymagane jest hasło właściciela, aby jakiekolwiek ograniczenie mogło mieć skutek.
  • Podpisy cyfroweSignAndStamp osadza znacznik czasu RFC 3161 i łańcuch certyfikatów, tworząc hashe widoczne dla manipulacji, rozpoznawane przez Adobe® Acrobat i inne przeglądarki ISO 32000-2.
  • Jednostopniowe API — zarówno szyfrowanie, jak i podpisywanie modyfikują tę samą instancję PdfDocument, unikając wielokrotnych operacji na plikach i zachowując wewnętrzne czcionki, warstwy i metadane.

PoradyPorada dotycząca rozwiązywania problemów: jeśli Adobe Reader zgłasza "nieprawidłowy podpis", upewnij się, że PFX zawiera zaufany certyfikat główny oraz że ciągi location są wolne od nie-ASCII.

Podstawowe ustawienia zabezpieczeń

##

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

##

`PdfDocument.SignAndStamp` — ścieżka PFX, authority, location, reason, timestamp

Zasoby wewnętrzne dla głębszych analiz


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

Silnik Chromium IronPDF już teraz renderuje większość stron w < 1 s na nowoczesnym sprzęcie, ale przepustowość można pomnożyć przez batch rendering, włączenie wielowątkowości i optymalizację obciążenia Headless Chrome. Poniższe wskazówki są równie ważne dla wszystkich wersji .NET.

1. Grupowe renderowanie na tle wątków

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-12.cs
IronPdf.License.LicenseKey = "YourLicenseKey";
ChromePdfRenderer renderer = new ChromePdfRenderer();

// Set rendering options
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = IronPdf.Rendering.PdfPaperOrientation.Portrait;

renderer.RenderHtmlFileAsPdf(@"testFile.html").SaveAs("GeneratedFile.pdf");
Imports IronPdf

License.LicenseKey = "YourLicenseKey"
Dim renderer As New ChromePdfRenderer()

' Set rendering options
renderer.RenderingOptions.PaperSize = Rendering.PdfPaperSize.A4
renderer.RenderingOptions.PaperOrientation = Rendering.PdfPaperOrientation.Portrait

renderer.RenderHtmlFileAsPdf("testFile.html").SaveAs("GeneratedFile.pdf")
$vbLabelText   $csharpLabel

2. Ograniczenie kosztu uruchomienia Headless Chrome

IronPDF dostarcza własną wersję Chromium, ale każdy render niesie ze sobą niewielki podatek startowy. Pooling pomaga, a Linux containers muszą zawierać dwa natywne biblioteki:

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

Brak którejkolwiek z bibliotek manifestuje się jako błąd libnss3.so not found w logach Dockera.

Zalecane flagi Chrome (automatycznie stosowane przez IronPDF) obejmują --disable-gpu oraz --no-sandbox, aby zmniejszyć problemy z pamięcią i użytkownikami-root w kontenerach.

3. Poczekaj na późny JavaScript używając 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 przewodnik WaitFor dla niestandardowych obietnic i odpytywania DOM.

4. Włącz logowanie debugowania dla jednego usługi

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-15.cs
IronPdf.License.LicenseKey = "YourLicenseKey";
PdfDocument pdf = PdfDocument.FromFile("1.pdf");
PdfDocument pdf2 = PdfDocument.FromFile("2.pdf");
pdf.AppendPdf(pdf2);
pdf.SaveAs("appendedFile.pdf");
IronPdf.License.LicenseKey = "YourLicenseKey"
Dim pdf As PdfDocument = PdfDocument.FromFile("1.pdf")
Dim pdf2 As PdfDocument = PdfDocument.FromFile("2.pdf")
pdf.AppendPdf(pdf2)
pdf.SaveAs("appendedFile.pdf")
$vbLabelText   $csharpLabel

Ślady Live DevTools ujawniają brakujące czcionki, obrazy 404 i zdarzenia czasowe bez ponownej kompilacji kodu.

5. Ponownie używaj szablonów PDF zamiast ponownego renderowania

Do realizacji faktur, utwórz szablon PDF z zastępczymi miejscami, takimi jak [[name]] i wykonaj zamianę tekstu zamiast odbudowywać złożone HTML. Jest to 10x szybsze i lekkie dla pamięci.

Lista kontrolna szybkiego tuningu

##

`Parallel.ForEach`, `async/await`, ponowne użycie pojedynczego `ChromePdfRenderer`

##

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

##

`RenderDelay`, `WaitFor()`, zaloguj DevTools timelinę dla wolnych hydratacji SPA

Dalsza lektura


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

30-dniowy klucz próbny jest wydawany natychmiast z formularza Rozpocznij darmową próbę i odblokowuje każdą funkcję — w tym HTML-do-PDF, cyfrowe podpisy i szyfrowanie — bez znaków wodnych.

Po ocenieniu biblioteki, wybierz wieczystą licencję programisty, wdrożenia, lub enterprises; każdy plan zawiera bezpłatne aktualizacje, prawa do użytkowania w deweloperskich, stagingowych i produkcyi oraz 30-dniową gwarancję zwrotu pieniędzy. Zastosowanie klucza to pojedyncza linia kodu (IronPdf.License.LicenseKey = "YOUR-KEY";) i może być zautomatyzowane w potokach CI/CD.

Kompleksowa dokumentacja— przewodniki szybkiego startu, dokumentacja API i samouczki wideo — jest dostępna w portalu dokumentacji i aktualizowana dla każdej wersji .NET.

Pytania inżynieryjne otrzymują odpowiedź w ciągu jednego dnia roboczego poprzez czat na żywo, e-mail lub telefon od zespołu wsparcia z Chicago.

Centrum Wspomagania Wydajności zawiera FAQ dotyczące tuningu i wdrażania.

Szybkie linki

Zasoby URL Dlaczego to ma znaczenie
Uzyskaj 30-dniowy klucz próbny https://ironpdf.com/demos/ Odblokowuje wszystkie funkcje bez znaków wodnych
Licencjonowanie i cennik https://ironpdf.com/licensing/ Plany wieczyste lub subskrypcyjne; Iron Suite pakietuje 10 bibliotek
Dokumentacja API https://ironpdf.com/object-reference/api/ Pełna dokumentacja klasy, np. ChromePdfRenderer
Portal dokumentacji https://ironpdf.com/docs/ Przewodniki, samouczki, przykłady projektów
Centrum pomocy przy wydajności https://ironpdf.com/troubleshooting/ironpdf-performance-assistance/ Wskazówki dotyczące optymalizacji i skalowania
Kontakt ze wsparciem https://ironsoftware.com/contact-us/ Czat na żywo, e-mail, wsparcie telefoniczne

Następne kroki

  1. Sklonuj repozytorium przykładówe, które demonstruje wszystkie glówne funkcje—from MVC view rendering to AES-256 encryption.
  2. Podlacz klucz próbny do istniejącego rozwiązania i uruchom testy jednostkowe, aby zweryfikowac zgodność miedzyplatformowa.
  3. Zarezerwuj demonstracje na zywo z zespołem inżynieryjnym w celu uzyskania rekomendacji specyficznych dla projektu.

Dzięki tym zasobom kazdy zespół .NET może dostarczyć do produkcji idealnie zgodne z pikselami PDF-y—lokalnie, w Dockerze lub serverless—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 19,936,792 | Wersja: 2026.7 właśnie wydany
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.