Konwersja HTML do PDF w .NET Core przy użyciu języka C# i biblioteki IronPDF
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.
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.
-
Install IronPDF with NuGet Package Manager
PM > Install-Package IronPdf -
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 przebieg pracy (5 kroków)
- Zainstaluj
IronPdfpakiet NuGet - Konwertuj adres URL strony internetowej za pomocą
RenderUrlAsPdf - Renderuj surowy kod HTML za pomocą
RenderHtmlAsPdf - Eksportuj widok MVC do pliku PDF
- Dostosuj rozmiar papieru, marginesy, nagłówki i stopki
Lista kontrolna szybkiego startu
- Instalacja –
Install-Package IronPdf - Wyświetl adres URL –
ChromePdfRenderer.RenderUrlAsPdf() - Renderowanie surowego kodu HTML –
ChromePdfRenderer.RenderHtmlAsPdf() - Eksport widoku Razor –
ChromePdfRenderer.RenderHtmlAsPdfAsync() - 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
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")
Jak to działa
ChromePdfRendereruruchamia w tle instancję Chromium w środowisku sandbox — nie jest wymagana oddzielna instalacja przeglądarki Chrome.RenderUrlAsPdfprzechwytuje w pełni wyrenderowany DOM, w tym treści oparte na JavaScript, zapytania o media CSS oraz czcionki.- Wynikowy
PdfDocumentudostę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
Dlaczego to działa
ChromePdfRendereruruchamia instancję Chromium w środowisku sandbox — bez zależności od systemowego Chrome, co pozwala zachować niewielki rozmiar obrazów Docker.RenderUrlAsPdfczeka na zakończenie działania DOM i JavaScript przed wykonaniem zrzutu ekranu, dzięki czemu aplikacje jednostronicowe są renderowane poprawnie.- Ustawienie
CssMediaTypena PRINT nakazuje silnikowi stosowanie reguł specyficznych dla drukowania, odpowiadających działaniu opcji przeglądarki Drukuj → Zapisz jako PDF. - Wynikowy plik
PdfDocumentmoże zostać zaszyfrowany, podpisany cyfrowo, scalony lub zrasteryzowany — możliwości te omówiono w kolejnych sekcjach.
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
- Dokumentacja API –
ChromePdfRenderer.RenderUrlAsPdf - Dokumentacja API –
PdfDocument.SaveAs - Samouczek – Wdrażanie IronPDF w kontenerach Docker
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")
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 renderowania —
PaperSize,CssMediaTypeiRenderDelayodzwierciedlają 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ńcowego —
PdfDocumentudostę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
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 biletu —
PaperSize = A5oraz wąskie marginesy sprawiają, że bilety drukowane w domu są kompaktowe. - Spójne style drukowania —
CssMediaType = Printstosuje te same reguły CSS@media print, których używają przeglądarki. - Strumieniowanie binarne —
pdf.BinaryDataprzesyła dokument bez ingerencji w system plików; idealne dla punktów końcowych API i funkcji Lambda. - Renderer wielokrotnego użytku —
ChromePdfRendererjest 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
Dlaczego te opcje mają znaczenie
PaperSize,MarginsiCssMediaTypeodzwierciedlają 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.
HtmlStamppozwala 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
ExtractAllTextiExtractAllImages, 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)
####### ---------- 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 ż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
- 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.
libnss3, jak i libatk1.0-0. Obrazy Alpine nie są obsługiwane, ponieważ bibliotece C musl brakuje wymaganych symboli.Zasoby wewnętrzne
- Samouczek – Wdrażanie IronPDF w kontenerach Docker
- Instrukcja – Uruchamianie IronPDF w usłudze Azure App Service Linux
- Dokumentacja API – klasa
ChromePdfRenderer
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")
Dlaczego to ma znaczenie
- Otwieranie i scalanie –
PdfDocument.FromFileładuje dowolny plik PDF zgodny ze standardami, w tym pliki zaszyfrowane, natomiastPdfDocument.Mergełączy dowolną liczbę dokumentów za pomocą jednego wywołania. - Watermark –
ApplyStamp(aliasHtmlStamp) osadza w pełni stylizowane nakładki HTML/CSS — logo, QR lub tekst ukośny — na wybranych stronach bez rasteryzacji. - Pobieranie treści –
ExtractAllTextiExtractAllImagespobierają 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
PdfDocumentmoż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")
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
AllowUserPrintingiAllowUserFormDataprzełączają uprawnienia dla poszczególnych akcji; Aby ograniczenia zaczęły obowiązywać, wymagane jest hasło właściciela. - Podpisy cyfrowe —
SignAndStamposadza 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.
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
- Samouczek – Zabezpieczanie pliku PDF hasłem
- Przykład – Cyfrowe podpisywanie plików PDF
- Dokumentacja API –
PdfSecuritySettings
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)
ChromePdfRendererjest bezpieczny dla wątków; Pojedyncza instancja może obsługiwać dziesiątki zadań jednocześnie bez zakleszczeń.Parallel.ForEachwykorzystuje w pełni każdy rdzeń procesora; Typowe serwery odnotowują 4–6-krotny wzrost przepustowości w porównaniu z pętlą jednowątkową.- Jeśli żądania ASP.NET gromadzą się w kolejce, przenieś obciążające renderowanie do hostowanej usługi działającej w tle lub kolejki komunikatów, aby skrócić czas odpowiedzi.
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')";
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"
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
- Instrukcja – Generowanie plików PDF przy użyciu asynchroniczności / wielowątkowości
- Rozwiązywanie problemów – Centrum pomocy dotyczące wydajności
- Przykład – demonstracja renderowania wielowątkowego
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, Licencję wdroż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
- Sklonuj przykładowe repozytorium, które demonstruje wszystkie główne funkcje — od renderowania widoków MVC po szyfrowanie AES-256.
- Wprowadź klucz próbny do istniejącego rozwiązania i uruchom testy jednostkowe, aby sprawdzić kompatybilność między platformami.
- 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.

