Konwersja HTML na PDF w .NET Core za pomocą C# z IronPDF
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.
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.
-
Install IronPDF with NuGet Package Manager
-
Skopiuj i uruchom ten fragment kodu.
var pdf = new IronPdf.ChromePdfRenderer().RenderHtmlAsPdf("<h1>Hello World</h1>"); -
Wdrożenie do testowania w środowisku produkcyjnym
Rozpocznij używanie IronPDF w swoim projekcie już dziś z darmową wersją próbną
Minimalny proces (5 kroków)
- Zainstaluj pakiet
IronPdfz NuGet - KonwertujURLstrony internetowej za pomocą
RenderUrlAsPdf - Renderuj surowy HTML za pomocą
RenderHtmlAsPdf - Eksportuj widok MVC do PDF
- Dostosuj rozmiar papieru, marginesy, nagłówki i stopki
Lista kontrolna szybkiego startu
- Install –
Install-Package IronPdf - Render a URL –
ChromePdfRenderer.RenderUrlAsPdf() - Render raw HTML –
ChromePdfRenderer.RenderHtmlAsPdf() - Eksportuj widok Razor –
ChromePdfRenderer.RenderHtmlAsPdfAsync() - 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
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
Jak to działa
ChromePdfRendereruruchamia instancję Chromium w powłoce - nie jest wymagana oddzielna instalacja Chrome.RenderUrlAsPdfprzechwytuje całkowicie wyrenderowany DOM, w tym treści napędzane przez JavaScript, zapytania medialne CSS i czcionki.- Uzyskany
PdfDocumentudostę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
Dlaczego to działa
ChromePdfRendereruruchamia instancję Chromium w powłoce - brak zależności od systemowego Chrome, co utrzymuje obrazy Docker smukłe.RenderUrlAsPdfoczekuje na zakończenie DOM i JavaScript zanim wykona zdjęcie, więc aplikacje jednostronicowe są renderowane prawidłowo.- Ustawienie
CssMediaTypena Print mówi silnikowi, aby używał drukowych reguł specyficznych, dopasowując wyjście przeglądarki Print → Save as PDF. - Uzyskany
PdfDocumentmoże być zaszyfrowany, podpisany cyfrowo, złączony lub zrastratoryzowany - możliwości omawiane w późniejszych sekcjach.
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
- Poradnik – Wdrażaj IronPDF w kontenerach Docker
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> }
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 renderowania —
PaperSize,CssMediaTypeiRenderDelayodzwierciedlają 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 postprocessingowe —
PdfDocumentudostę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
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 biletowym —
PaperSize = A5i wąskie marginesy utrzymują bilety do wydruku w domu kompaktowe. - Spójne style drukowania —
CssMediaType = Printstosuje te same zasady CSS@media print, z których korzystają przeglądarki. - Binarny streaming —
pdf.BinaryDatastrumieniuje dokument bez dotykania systemu plików; idealne dla punktów końcowych API i funkcji Lambda. - Renderowanie wielokrotnego użytku —
ChromePdfRendererjest 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.
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.
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
Dlaczego te opcje mają znaczenie
PaperSize,MarginsiCssMediaTypeodwzorowują 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.
HtmlStampumoż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
ExtractAllTextiExtractAllImages, 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)
####### ---------- 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"]
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
- 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.
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
- Poradnik – Wdrażaj IronPDF w kontenerach Docker
- Jak-to – Uruchom IronPDF na Azure App Service Linux
-Dokumentacja API–
ChromePdfRendererclass
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
Dlaczego to ma znaczenie
- Otwórz i scal –
PdfDocument.FromFileładuje każdy zgodny ze standardami PDF, w tym pliki zaszyfrowane, aPdfDocument.Mergekonkatenizuje dowolną liczbę dokumentów w jednym wywołaniu. - Znak wodny –
ApplyStamp(znany również jakoHtmlStamp) osadza w pełni stylizowane nakładki HTML/CSS — logo, kod QR lub tekst ukośny — na wybranych stronach bez rastryzacji. - Ekstrakcja treści –
ExtractAllTextiExtractAllImageswycią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
PdfDocumentmoż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
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
AllowUserPrintingiAllowUserFormDataprzełączają prawa do działania; wymagane jest hasło właściciela, aby jakiekolwiek ograniczenie mogło mieć skutek. - Podpisy cyfrowe —
SignAndStamposadza 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.
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
- Samouczek – Chron PDF hasłem
- Przykład – Podpisz cyfrowo PDF
- API reference –
PdfSecuritySettings
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")
ChromePdfRendererjest bezpieczny dla wątków; jedna instancja może obsługiwać dziesiątki ulewających zadań bez zakleszczeń.Parallel.ForEachnasyca każdy rdzeń procesora; typowe serwery osiągają wzrost przepustowości o 4-6× w porównaniu z jednowątkowymi pętlami.- Jeśli żądania ASP.NET się kolejkowały, przenieś cięższe rysunki do usługi tła hostowanej lub kolejki komunikatów, aby utrzymać niskie czasy odpowiedzi.
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')";
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")
Ś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
- Jak-to – Generuj PDFy z async / wielowątkowoscia
- Rozwiazywanie problemów – Centrum pomocy technicznej w zakresie wydajności
- Przykład – Demonstracja renderowania wątkowego
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
- Sklonuj repozytorium przykładówe, które demonstruje wszystkie glówne funkcje—from MVC view rendering to AES-256 encryption.
- Podlacz klucz próbny do istniejącego rozwiązania i uruchom testy jednostkowe, aby zweryfikowac zgodność miedzyplatformowa.
- 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.

