# Jak konwertować HTML na PDF w C# (Przewodnik dla Deweloperów)
Konwertowanie HTML na PDF w C# wydaje się proste, dopóki rzeczywiste projekty nie osiągną ograniczeń renderowania, wdrożenia i skalowalności. Ten przewodnik pokazuje, jak to zrobić niezawodnie z silnikiem Chromium IronPDF, zaczynając od działającego kodu, który można uruchomić w mniej niż minutę. Jeśli wciąż wybierasz narzędzie, [porównaj wszystkie biblioteki C# HTML do PDF](/blog/compare-to-other-components/csharp-html-to-pdf-libraries-compared/) najpierw.
*as-heading:2(Skrócona instrukcja: Przewodnik szybkiego startu, jak przekonwertować HTML na PDF)*
Możesz łatwo przekonwertować HTML na PDF w C# używając biblioteki [IronPDF](/), która zapewnia metodę `ChromePdfRenderer.RenderHtmlAsPdf` do tworzenia wysokiej jakości plików PDF z HTML, CSS i JavaScript.
```csharp
:title=Get started making PDFs now!
new IronPdf.ChromePdfRenderer()
.RenderHtmlAsPdf("<p>Hello World</p>")
.SaveAs("pixelperfect.pdf");
```
Po zakupie lub zarejestrowaniu się na 30-dniowy okres próbny IronPDF, znajdź klucz licencyjny wysłany na twój e-mail. Dodaj klucz licencyjny na początku swojej aplikacji.
```csharp
IronPdf.License.LicenseKey = "KEY";
```
*Cały kod w tym przewodniku był zweryfikowany w IronPDF v2026.6.1 · .NET 10 · czerwiec 2026.*
*as-heading:2(Dlaczego programiści .NET potrzebują konwertera HTML na PDF dla C#)*
IronPDF korzysta z wbudowanego mechanizmu renderującego Google Chromium, aby zapewnić wysoką wierność konwersji, dokładnie zachowując układ i stylizację treści webowych.
✅ **Solidny silnik renderowania Chrome:** używa silnika <a href="https://www.chromium.org/blink/" target="_blank" rel="noopener">Blink</a> Chrome'a do dokładnej konwersji HTML na PDF.
✅ **Dokładność na poziomie pikseli:** generowane PDF odpowiadają precyzyjnie stronie internetowej, a nie wersji przyjaznej dla druku.
✅ **Pełne wsparcie dla nowoczesnej sieci:** pełna obsługa CSS3, HTML5 i JavaScript dla wszystkich elementów HTML.
✅ **Wzrost wydajności o 5-20x:** znacznie szybszy niż automatyzacja przeglądarki lub sterowniki sieciowe.
✅ **Zgodność z <a href="https://pdfa.org/" target="_blank" rel="noopener">PDF/UA</a>:** generowanie dostępnych PDF-ów spełniających <a href="https://www.section508.gov/" target="_blank" rel="noopener">standardy Sekcji 508</a>.
✅ Brak zewnętrznych zależności: bez plików wykonywalnych do zainstalowania na serwerach.
✅ Designed for C#, F#, and VB.NET on <a href="https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-10/overview" target="_blank" rel="noopener">.NET 10</a>, <a href="https://learn.microsoft.com/en-us/dotnet/core/releases-and-support" target="_blank" rel="noopener">9, 8, 7, 6, Core, Standard, and Framework</a>.
[[i:(Najnowsze w wersji v2026.6.1 (czerwiec 2026): automatyczne zakładki PDF generowane z nagłówków HTML podczas renderowania, pełna liniaryzacja PDF w pamięci dla środowisk chmurowych i izolowanych, cyfrowe podpisy ECDSA z inspekcją certyfikatu podpisującego, klikalne adnotacje z linkami oraz mniejsze, wzmocnione obrazy Linux i Docker. Zobacz pełną listę zmian, aby uzyskać kompletną historię wydania.)]]
IronPDF upraszcza proces dla programistów .NET, oferując prostą i wydajną metodę generowania profesjonalnie wyglądających dokumentów PDF z HTML aplikacji webowych. Od faktur i raportów po certyfikaty i archiwa, programiści mogą korzystać z dobrze znanej stosu webowego, podczas gdy IronPDF obsługuje złożoność w zaledwie kilku linijkach kodu.
**POWIĄZANE:** <a class="content-anchor" href="/product-updates/changelog/">Dziennik zmian IronPDF: Aktualizacje, kamienie milowe, plan <i class="fa-solid fa-arrow-right"></i></a>
*as-heading:2(Czego się nauczysz)*
1. [Jak przekonwertować HTML na PDF w C#](#1-how-to-convert-html-to-pdf-c-num)
- [Jak przekonwertować string HTML na PDF](#how-to-convert-html-string-to-pdf)
- [Jak wyeksportować istniejący URL do PDF](#how-to-export-existing-url-to-pdf)
- [Jak przekonwertować plik HTML na PDF](#how-to-convert-html-file-to-pdf)
- [Jak przekonwertować strony Razor na PDF](#how-to-convert-razor-pages-to-pdf)
- [Jak przekonwertować widoki MVC na PDF](#how-to-convert-mvc-views-to-pdf)
2. [Jak skonfigurować ustawienia HTML na PDF](#2-how-to-configure-html-to-pdf-settings)
- [Jak ustawić niestandardowe nagłówki HTTP, ciasteczka i dane logowania](#how-to-set-custom-http-headers-cookies-and-login-credentials)
- [Jak skonfigurować proxy dla renderowania PDF](#how-to-configure-proxy-for-pdf-rendering)
3. [Jak używać zaawansowanych funkcji generowania i bezpieczeństwa PDF](#3-how-to-use-advanced-pdf-generation-security-features)
- [Jak generować szablon HTML dla wsadowego tworzenia PDF](#how-to-generate-html-template-for-batch-pdf-creation)
- [Jak generować PDF metodą asynchroniczną](#how-to-generate-pdf-using-async-method)
- [Jak dodać zaawansowane funkcje bezpieczeństwa](#how-to-add-advanced-security-features)
- [Jak konwertować formularze HTML na wypełnialne PDFy](#how-to-convert-html-forms-to-fillable-pdfs)
- [Jak konwertować określone elementy HTML na PDF](#how-to-convert-specific-html-elements-to-pdf)
- [Jak przekształcać uwierzytelnione strony na PDF](#how-to-render-authenticated-pages-to-pdf)
4. [Jak wdrożyć HTML na PDF na platformach chmurowych](#4-how-to-deploy-html-to-pdf-on-cloud-platforms)
- [Jak wdrożyć na Azure](#how-to-deploy-on-azure)
- [Jak wdrożyć na AWS Lambda](#how-to-deploy-on-aws-lambda)
- [Jak wdrożyć z Dockerem](#how-to-deploy-with-docker)
5. [Porównaj IronPDF z innymi bibliotekami PDF .NET](#5-compare-ironpdf-with-other-net-pdf-libraries)
- [Szybka tabela decyzji: IronPDF w porównaniu do innych konwerterów PDF .NET](#quick-decision-matrix-ironpdf-versus-other-net-pdf-converters)
- [Szczegółowe porównanie: IronPDF w porównaniu do innych konwerterów PDF .NET](#detailed-comparison-ironpdf-versus-other-net-pdf-converters)
- [Realne porównanie konwersji HTML na PDF: Renderowanie strony głównej Reddita](#real-life-html-to-pdf-conversion-comparison-rendering-reddits-homepage)
- [Wnioski na temat wydajności i jakości wyjściowych PDFów](#conclusion-on-performance-and-output-pdf-quality)
- [Podsumowanie](#summary)
6. [Rozwiązywanie problemów i wsparcie techniczne](#6-troubleshooting--technical-support)
- [Szybkie poprawki dla typowych błędów](#quick-fixes-on-common-errors)
- [Uzyskaj pomoc od inżynierów, którzy stworzyli IronPDF, 24/7](#get-help-from-the-engineers-who-built-ironpdf-247)
*as-heading:2(Wybierz swoją ścieżkę HTML do PDF według przypadku użycia)*
Nie wiesz, od czego zacząć? Przejdź bezpośrednio do ścieżki, która odpowiada temu, co budujesz:
<div class="my-6 max-w-full overflow-x-auto">
<table class="w-full border-separate border-spacing-0 overflow-clip rounded-lg border border-[#D9E5E9] [&_th]:border [&_th]:border-[#D9E5E9] [&_th]:px-3 [&_th]:py-4 [&_th]:text-center [&_th]:text-sm [&_th]:font-medium [&_td]:border [&_td]:border-[#D9E5E9] [&_td]:px-3 [&_td]:py-4 [&_td]:align-top [&_td]:text-[13.5px]/[1.5] [&_td]:text-[#181818] [&_td_ul]:m-0 [&_td_ul]:list-none [&_td_ul]:p-0 [&_td_ul>li+li]:mt-2">
<thead>
<tr>
<th><strong>Co budujesz</strong></th>
<th><strong>Zacznij tutaj</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><span>Konwersja jednorazowego łańcucha HTML</span></td>
<td><a class="content-anchor" href="#how-to-convert-html-string-to-pdf">HTML String to PDF <i class="fa-solid fa-arrow-right"></i></a></td>
</tr>
<tr>
<td><span>Archiwizacja aktywnego adresu URL lub strony internetowej</span></td>
<td><a class="content-anchor" href="#how-to-export-existing-url-to-pdf">URL to PDF <i class="fa-solid fa-arrow-right"></i></a></td>
</tr>
<tr>
<td><span>Tworzenie aplikacji Razor Pages lub MVC</span></td>
<td><a class="content-anchor" href="#how-to-convert-razor-pages-to-pdf">Razor / MVC to PDF <i class="fa-solid fa-arrow-right"></i></a></td>
</tr>
<tr>
<td><span>Generacja na serwerze dużych wolumenów lub w partiach</span></td>
<td><a class="content-anchor" href="#how-to-generate-pdf-using-async-method">Generacja asynchroniczna i wsadowa <i class="fa-solid fa-arrow-right"></i></a></td>
</tr>
</tbody>
</table>
</div>
## 1. How to Convert HTML to PDF C#
Niezależnie od tego, czy pracujesz z stringami HTML, URL-ami, czy plikami HTML, IronPDF oferuje elastyczne opcje generowania wysokiej jakości dokumentów PDF spełniających twoje konkretne wymagania.
W tym tutorialu przeprowadzimy cię przez najczęstsze scenariusze, w tym konwersję stringu HTML na PDF, URL-a na PDF, i pliku HTML na PDF. Ponadto, IronPDF oferuje również różnorodne operacje manipulacji dokumentami PDF:
<div class="my-6 max-w-full overflow-x-auto">
<table class="w-full border-separate border-spacing-0 overflow-clip rounded-lg border border-[#D9E5E9] [&_th]:border [&_th]:border-[#D9E5E9] [&_th]:px-3 [&_th]:py-4 [&_th]:text-center [&_th]:text-sm [&_th]:font-medium [&_td]:border [&_td]:border-[#D9E5E9] [&_td]:px-3 [&_td]:py-4 [&_td]:align-top [&_td]:text-[13.5px]/[1.5] [&_td]:text-[#181818] [&_td_ul]:m-0 [&_td_ul]:list-none [&_td_ul]:p-0 [&_td_ul>li+li]:mt-2">
<thead>
<tr>
<th><strong>Wszechstronna konwersja PDF</strong></th>
<th><strong>Dynamiczna konwersja stron webowych na PDF</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>
<ul>
<li><a class="content-anchor" href="/how-to/html-zip-file-to-pdf/">Konwertuj PDF z pliku HTML ZIP <i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/image-to-pdf/">Konwertuj obrazy na PDF <i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/rasterize-pdf-to-images/">Konwertuj obrazy z PDF <i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/docx-to-pdf/">Konwertuj DOCX na PDF <i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/rtf-to-pdf/">Konwertuj RTF na PDF <i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/md-to-pdf/">Konwertuj MD na PDF <i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/xml-to-pdf/">Konwertuj XML na PDF <i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/pdf-to-html/">Konwertuj PDF na HTML <i class="fa-solid fa-arrow-right"></i></a></li>
</ul>
</td>
<td>
<ul>
<li><a class="content-anchor" href="/how-to/aspx-to-pdf/">Konwertuj PDF ze stron ASPX <i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/xaml-to-pdf-maui/">Konwertuj XAML na PDF (MAUI) <i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/csharp-pdf-reports/">Generuj raporty w PDF <i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/blazor-tutorial/">Utwórz PDF-y w Blazor Servers <i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/razor-to-pdf-blazor-server/">Konwertuj Razor na PDF (Blazor Server) <i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/cshtml-to-pdf-razor/">Konwertuj CSHTML na PDF (Strony Razor) <i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/cshtml-to-pdf-mvc-core/">Konwertuj CSHTML na PDF (MVC Core) <i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/cshtml-to-pdf-mvc-framework/">Konwertuj CSHTML na PDF (MVC Framework) <i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/cshtml-to-pdf-razor-headlessly/">Konwertuj CSHTML na PDF (Headlessly) <i class="fa-solid fa-arrow-right"></i></a></li>
</ul>
</td>
</tr>
</tbody>
</table>
</div>
### Jak przekonwertować string HTML na PDF
Najbardziej podstawową operacją jest konwersja stringu HTML na PDF. Ta metoda jest doskonała dla dynamicznie generowanych treści HTML. Metoda `RenderHtmlAsPdf` w pełni wspiera HTML5, CSS3, JavaScript i obrazy podczas konwersji HTML na PDF bezpośrednio.
```csharp
using IronPdf;
// Create the Chrome renderer
var renderer = new ChromePdfRenderer();
// Convert HTML string to PDF
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>");
// Save the PDF
pdf.SaveAs("output.pdf");
```
*Zweryfikowane na IronPDF v2026.6.1 · .NET 10 · czerwiec 2026.*
#### Wynik
Uruchom powyższy fragment, a IronPDF zwróci jednostronicowy PDF zawierający dokładnie nagłówek, który podałeś, najprostszą możliwą renderowania:
<iframe loading="lazy" title="HTML string to PDF output" src="/static-assets/pdf/tutorials/html-to-pdf/output.pdf#view=fit" width="100%" height="600px" style="border: 1px solid #D9E5E9; border-radius: 8px;">
</iframe>
#### Wydajność
Wydajność konwersji IronPDF do formatu PDF z ciągów znaków, adresów URL i kodu HTML została zmierzona przy użyciu laptopa Lenovo z 16 GB pamięci RAM. Dokument testowy to 3-stronicowa faktura dla Enterprise, zawierająca standardowy CSS Grid, gradienty i tabele wielosekcyjne.
Wyniki są następujące:
| Metryka | Wartość |
|---|---|
| Średni czas renderowania | ~486 ms |
| Pamięć na render | ~3,6 MB |
*Pomiar przeprowadzono na podstawie 5 kolejnych renderowań na 16-rdzeniowej stacji roboczej (Windows 11, .NET 8). Pierwsze wywołanie obejmuje również jednorazową inicjalizację silnika Chromium (~1,3 s)*
Kiedy po raz pierwszy uruchomiłem test, renderowanie przebiegało bardzo wolno (ponad sekundę na każde wywołanie!). Po przyjrzeniu się sytuacji zdałem sobie sprawę, że miałem uruchomionych kilka instancji Chromium i korzystałem z zasilania bateryjnego, co uniemożliwiało bibliotece wykazanie się prawdziwą prędkością. Po zamknięciu konkurencyjnych procesów i podłączeniu się sytuacja uległa poprawie: średni czas działania w trybie warm run wyniósł ~486 ms, a najszybszy wynik to około 473 ms.
[[t:(Niedawne aktualizacje naprawiają problemy z znakami specjalnymi/emoji w metadanych HTML i zapewniają lepsze zarządzanie polami formularzy html, w tym chińskimi znakami na Linuxie. Testuj dynamiczną zawartość za pomocą <span style="color: red;">`EnableJavaScript = true`</span> dla optymalnych wyników.)]]
Gdy ciąg HTML odwołuje się do lokalnych zasobów, takich jak obrazy czy arkusze stylów, użyj parametru `baseUrlOrPath`, aby właściwie przekonwertować zawartość HTML z wszystkimi zasobami:
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-2.cs
```
[[t:(baseUrlOrPath informuje IronPDF, gdzie znaleźć twoje pliki CSS, JavaScript i obrazy. Wszystkie względne ścieżki w twoim stringu HTML będą rozwiązywane w tym katalogu.)]]
[[w:(Jedną z kwestii, na którą należy zwrócić uwagę, i powodem, dla którego testowanie wyników jest ważne niezależnie od tego, jakiej biblioteki używasz do automatycznego generowania dokumentów, jest to, że dokument Enterprise może zawierać uszkodzone elementy lub brakujące zasoby, gdy odniesienia powracają do ustawień systemowych. IronPDF daje Ci parametr `baseUrlOrPath`, aby wskazać ścieżki względne na odpowiedni katalog, więc szybki test wyjścia przed dużą operacją jest zazwyczaj wszystkim, czego potrzebujesz, aby to wykryć.)]]
**POWIĄZANY ARTYKUŁ INSTRUKTAŻOWY:** <a class="content-anchor" href="/how-to/html-string-to-pdf/">Jak przekonwertować string HTML na PDF w C# <i class="fa-solid fa-arrow-right"></i></a>
### Jak wyeksportować istniejący URL do PDF
Renderowanie całych stron internetowych do PDF z C# umożliwia zespołom oddzielenie projektu PDF od renderowania backendu. To podejście pozwala na konwersję dowolnego określonego URL bezpośrednio do formatu PDF.
Główna metoda to `RenderUrlAsPdf`, która pobiera żywą stronę i renderuje ją w jednym wywołaniu:
```csharp
using IronPdf;
// Create a PDF from any existing web page
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF");
pdf.SaveAs("wikipedia.pdf");
```
#### Wynik
Tutaj `RenderUrlAsPdf` przechwytuje artykuł z Wikipedii na żywo w statyczny, gotowy do druku PDF, z tekstem, obrazami, tabelkami i układem zachowanym na wszystkich 33 stronach:
<iframe loading="lazy" title="URL (Wikipedia) to PDF output" src="/static-assets/pdf/tutorials/html-to-pdf/wikipedia.pdf#view=fit" width="100%" height="600px" style="border: 1px solid #D9E5E9; border-radius: 8px;">
</iframe>
**CSS dla Drukowania vs Ekran**
Możesz skonfigurować IronPDF do renderowania z użyciem dowolnego typu mediów CSS.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-4.cs
```
**Wsparcie JavaScript**
IronPDF w pełni obsługuje JavaScript, jQuery, a nawet AJAX podczas konwersji HTML na PDF. Dla dynamicznych treści HTML możesz skonfigurować IronPDF, aby czekał na zakończenie JavaScript przed renderowaniem stron webowych w PDF. Jest to idealne dla jednorożnych aplikacji internetowych i dynamicznych witryn.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-5.cs
```
Wykonywanie JavaScriptu można również zobaczyć przy renderowaniu zaawansowanej wizualizacji d3.js z witryny do PDF.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-6.cs
```
*Zweryfikowane na IronPDF v2026.6.1 · .NET 10 · czerwiec 2026.*
**CSS Responsywny**
Ponieważ responsywne strony internetowe są projektowane do oglądania w przeglądarce, a IronPDF nie otwiera prawdziwego okna przeglądarki w systemie operacyjnym serwera, elementy HTML mogą być renderowane w najmniejszym możliwym rozmiarze. `PdfCssMediaType.Print` jest zalecana, aby poradzić sobie z tym problemem podczas renderowania całych stron internetowych.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-7.cs
```
**POWIĄZANY ARTYKUŁ INSTRUKTAŻOWY:** <a class="content-anchor" href="/how-to/url-to-pdf/">Jak renderować URL na PDF <i class="fa-solid fa-arrow-right"></i></a>
### Jak przekonwertować plik HTML na PDF
Konwersja lokalnych plików HTML na PDF zachowuje wszystkie względne zasoby, w tym CSS, obrazy i JavaScript, jakby były otwarte przy użyciu protokołu file://. Metoda ta jest najlepsza do konwersji szablonów lub wstępnie zaprojektowanych stron HTML na dokumenty PDF.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-8.cs
```
*Zweryfikowane na IronPDF v2026.6.1 · .NET 10 · czerwiec 2026.*
#### Wynik
Wskaż `RenderHtmlFileAsPdf` na szablon faktury HTML, a cały design pliku (logo, tabelka z pozycjami, sumy) zostanie odwzorowany doskonale, bez dodatkowego kodu po Twojej stronie:
<iframe loading="lazy" title="HTML file (invoice) to PDF output" src="/static-assets/pdf/tutorials/html-to-pdf/Invoice.pdf#view=fit" width="100%" height="600px" style="border: 1px solid #D9E5E9; border-radius: 8px;">
</iframe>
#### Wydajność
Wydajność została ponownie zmierzona przy stałych zmiennych podczas renderowania poprzedniej 3-stronicowej faktury dla Enterprise z pliku na dysku:
| Metryka | Wartość |
|---|---|
| Średni czas renderowania | ~502 ms |
| Pamięć na render | ~3,1 MB |
*Pomiar przeprowadzono na podstawie 5 kolejnych renderowań na tej samej stacji roboczej z 16-rdzeniowym procesorem (Windows 11, .NET 8). Renderowanie oparte na plikach odpowiada renderowaniu ciągów znaków w pamięci z dokładnością do około 3%; odczytanie kodu HTML z dysku nie powoduje żadnego wymiernego obciążenia.*
[[t:(Zachowaj swoje pliki HTML w osobnym folderze z ich zasobami (CSS, obrazy), aby edytować i testować w przeglądarce przed konwersją pliku HTML na PDF. To zapewnia, że twoje HTML renderuje się perfekcyjnie dla wysokiej jakości dokumentów PDF.)]]
**POWIĄZANY ARTYKUŁ INSTRUKTAŻOWY:** <a class="content-anchor" href="/how-to/html-file-to-pdf/">Renderuj plik HTML na PDF <i class="fa-solid fa-arrow-right"></i></a>
### Jak przekonwertować strony Razor na PDF
Jeśli twój projekt ASP.NET Core już używa stron Razor, możesz je bezpośrednio przekonwertować na PDF bez przebudowywania HTML. Rozszerzenie Razor IronPDF dodaje metodę `RenderRazorToPdf`, która pobiera Twoją stronę .cshtml (uzupełnioną o model i układ) i renderuje ją jako dokument PDF w jednym wywołaniu.
```shell
:InstallCmd Install-Pakiet IronPdf.Extensions.Razor
```
```csharp
using IronPdf;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
public class ReportModel : PageModel
{
public IActionResult OnGet()
{
var renderer = new ChromePdfRenderer();
// Render a Razor Page directly to PDF
PdfDocument pdf = renderer.RenderRazorToPdf(this);
Response.Headers.Add("Content-Disposition", "inline");
return new FileContentResult(pdf.BinaryData, "application/pdf");
}
}
```
[[i:(RenderRazorToPdf wymaga projektu ASP.NET Core Web App. Nie będzie działać w aplikacjach konsolowych ani bibliotekach klas; silnik widoków Razor musi być dostępny w kanale hostingu.)]]
**POWIĄZANY ARTYKUŁ INSTRUKTAŻOWY:** <a class="content-anchor" href="/how-to/cshtml-to-pdf-razor/">Jak przekonwertować CSHTML na PDF w stronach Razor <i class="fa-solid fa-arrow-right"></i></a>
### Jak przekonwertować widoki MVC na PDF
Zespoły używające wzorca MVC mogą generować PDF-y bezpośrednio z swoich istniejących Widoków i kontrolerów. Zainstaluj pakiet rozszerzeń MVC Core, a następnie wywołaj `RenderRazorViewToPdf` z Twoją ścieżką widoku i modelem; IronPDF obsługuje kanał renderowania Razor i wypuszcza gotowy PDF.
Jest to szczególnie przydatne dla raportów, faktur i wszelkich stron, gdzie HTML już został zaprojektowany i przetestowany w przeglądarce. Generowany PDF zachowuje pełną treść Widoku, włącznie z stronami układu i widokami cząstkowymi.
```shell
:InstallCmd Install-Pakiet IronPdf.Extensions.Mvc.Core
```
Najpierw zarejestruj usługę `IRazorViewRenderer` w swoim Program.cs, aby Twoje kontrolery mogły ją wstrzykiwać:
```csharp
using IronPdf.Extensions.Mvc.Core;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
// Register the Razor view renderer for IronPDF
builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
builder.Services.AddSingleton<IRazorViewRenderer, RazorViewRenderer>();
```
Następnie w działaniu kontrolera wstrzyknij renderer i przekonwertuj dowolny widok na PDF:
```csharp
using IronPdf;
using IronPdf.Extensions.Mvc.Core;
using Microsoft.AspNetCore.Mvc;
public class ReportController : Controller
{
private readonly IRazorViewRenderer _viewRenderService;
// Inject the view renderer via constructor
public ReportController(IRazorViewRenderer viewRenderService)
{
_viewRenderService = viewRenderService;
}
public IActionResult Download()
{
var reportModel = new { Title = "Quarterly Report", Total = 1250.00 };
var renderer = new ChromePdfRenderer();
// Render an MVC View with model data to PDF
PdfDocument pdf = renderer.RenderRazorViewToPdf(
_viewRenderService, "Views/Home/Report.cshtml", reportModel);
Response.Headers.Add("Content-Disposition", "inline");
return new FileContentResult(pdf.BinaryData, "application/pdf");
}
}
```
**POWIĄZANY ARTYKUŁ INSTRUKTAŻOWY:** <a class="content-anchor" href="/how-to/cshtml-to-pdf-mvc-core/">Jak przekonwertować widoki na PDF w ASP.NET Core MVC <i class="fa-solid fa-arrow-right"></i></a>
### Dynamiczna strona internetowa do PDF
Czy potrzebujesz, aby Twoja dynamiczna strona internetowa została zachowana i przekonwertowana do PDF, zachowując dokładny układ i formatowanie? Nie szukaj dalej niż IronPDF, które szybko konwertuje różnorodne popularne frameworki dynamicznych stron internetowych do PDF.
#### PDF ze stron ASPX
Oto krótki fragment kodu dotyczący konwersji stron ASPX jako PDF w Active Server Pages.
```cs
:path=/static-assets/pdf/content-code-examples/how-to/aspx-to-pdf-2.cs
```
Szczegółowe wyjaśnienie tego fragmentu kodu i eksplorowanie jego dodatkowych funkcji znajdziesz w naszym kompleksowym [przewodniku](https://ironpdf.com/how-to/aspx-to-pdf/).
#### XAML do PDF (MAUI)
Dla deweloperów szukających budowy aplikacji międzyplatformowych, .NET MAUI jest popularnym wyborem. IronPDF w pełni obsługuje konwersję XAML do PDF w kilku krokach.
```cs
:path=/static-assets/pdf/content-code-examples/how-to/xaml-to-pdf-maui-mainpage-xaml-cs.cs
```
Szczegółowe wyjaśnienie tego fragmentu kodu i eksplorowanie jego dodatkowych funkcji znajdziesz w naszym kompleksowym [przewodniku](https://ironpdf.com/how-to/xaml-to-pdf-maui/).
#### Generuj raporty PDF
Kiedy chodzi o generowanie raportów PDF, dokładne wymiary i format są kluczowe. W ten sposób, IronPDF pozwala na płynne generowanie PDF w zaledwie kilku krokach.
```cs
:path=/static-assets/pdf/content-code-examples/how-to/csharp-pdf-reports-render-html-file.cs
```
Szczegółowe wyjaśnienie tego fragmentu kodu i eksplorowanie jego dodatkowych funkcji znajdziesz w naszym kompleksowym [przewodniku](https://ironpdf.com/how-to/csharp-pdf-reports/).
#### Twórz PDF-y na serwerach Blazor
IronPDF obsługuje .NET 6, a ponieważ obejmuje typy projektów, takie jak Blazor, ten fragment kodu dostarcza krótkiego przykładu, jak tworzyć PDF-y na serwerach Blazor.
```csharp
@code {
// Model to bind user input
private InputHTMLModel _InputMsgModel = new InputHTMLModel();
private async Task SubmitHTML()
{
// Set your IronPDF license key
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";
// Create a renderer to convert HTML to PDF
var render = new IronPdf.ChromePdfRenderer();
// Render the HTML input into a PDF document
var doc = render.RenderHtmlAsPdf(_InputMsgModel.HTML);
var fileName = "iron.pdf";
// Create a stream reference for the PDF content
using var streamRef = new DotNetStreamReference(stream: doc.Stream);
// Invoke JavaScript function to download the PDF in the browser
await JS.InvokeVoidAsync("SubmitHTML", fileName, streamRef);
}
public class InputHTMLModel
{
public string HTML { get; set; } = "My new message";
}
}
```
Szczegółowe wyjaśnienie tego fragmentu kodu i eksplorowanie jego dodatkowych funkcji znajdziesz w naszym kompleksowym [przewodniku](https://ironpdf.com/how-to/blazor-tutorial/).
#### Razor do PDF (serwer Blazor)
Oprócz tworzenia PDF-ów w Blazor Servers, IronPDF obsługuje również generowanie dokumentów PDF z komponentów Razor wewnątrz strony Blazor. Ułatwiając tworzenie plików i stron PDF.
```csharp
[Parameter]
public IEnumerable<PersonInfo> persons { get; set; }
public Dictionary<string, object> Parameters { get; set; } = new Dictionary<string, object>();
protected override async Task OnInitializedAsync()
{
persons = new List<PersonInfo>
{
new PersonInfo { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
new PersonInfo { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
new PersonInfo { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
};
}
private async void PrintToPdf()
{
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Apply text footer
renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
{
LeftText = "{date} - {time}",
DrawDividerLine = true,
RightText = "Page {page} of {total-pages}",
Font = IronSoftware.Drawing.FontTypes.Arial,
FontSize = 11
};
Parameters.Add("persons", persons);
// Render razor component to PDF
PdfDocument pdf = renderer.RenderRazorComponentToPdf<Person>(Parameters);
File.WriteAllBytes("razorComponentToPdf.pdf", pdf.BinaryData);
}
```
Szczegółowe wyjaśnienie tego fragmentu kodu i eksplorowanie jego dodatkowych funkcji znajdziesz w naszym kompleksowym [przewodniku](https://ironpdf.com/how-to/razor-to-pdf-blazor-server/).
#### CSHTML do PDF
Konwersja CSHTML (Razor) do PDF pozwala generować profesjonalne, gotowe do druku dokumenty bezpośrednio z aplikacji internetowych. Jest to przydatne dla faktur, raportów, umów lub treści dynamicznych. IronPDF wspiera Razor Pages, MVC Core i MVC Framework, a także rendering bez interfejsu, co czyni integrację generowania PDF w aplikacjach .NET bezproblemową, za pomocą zaledwie kilku linijek kodu.
##### CSHTML do PDF (strony Razor)
```csharp
using IronPdf.Razor.Pages;
public IActionResult OnPostAsync()
{
persons = new List<Person>
{
new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
};
ViewData["personList"] = persons;
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render Razor Page to PDF document
PdfDocument pdf = renderer.RenderRazorToPdf(this);
Response.Headers.Add("Content-Disposition", "inline");
return File(pdf.BinaryData, "application/pdf", "razorPageToPdf.pdf");
}
```
Szczegółowe wyjaśnienie tego fragmentu kodu i eksplorowanie jego dodatkowych funkcji znajdziesz w naszym kompleksowym [przewodniku](https://ironpdf.com/how-to/cshtml-to-pdf-razor/).
##### CSHTML do PDF (MVC Core)
```csharp
public async Task<IActionResult> Persons()
{
var persons = new List<Person>
{
new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
};
if (_httpContextAccessor.HttpContext.Request.Method == HttpMethod.Post.Method)
{
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render View to PDF document
PdfDocument pdf = renderer.RenderRazorViewToPdf(_viewRenderService, "Views/Home/Persons.cshtml", persons);
Response.Headers.Add("Content-Disposition", "inline");
// Output PDF document
return File(pdf.BinaryData, "application/pdf", "viewToPdfMVCCore.pdf");
}
return View(persons);
}
```
Szczegółowe wyjaśnienie tego fragmentu kodu i eksplorowanie jego dodatkowych funkcji znajdziesz w naszym kompleksowym [przewodniku](https://ironpdf.com/how-to/cshtml-to-pdf-mvc-core/).
##### CSHTML do PDF (MVC Framework)
```csharp
public ActionResult Persons()
{
var persons = new List<Person>
{
new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
};
if (HttpContext.Request.HttpMethod == "POST")
{
// Provide the path to your view file
var viewPath = "~/Views/Home/Persons.cshtml";
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render Razor view to PDF document
PdfDocument pdf = renderer.RenderView(this.HttpContext, viewPath, persons);
Response.Headers.Add("Content-Disposition", "inline");
// View the PDF
return File(pdf.BinaryData, "application/pdf");
}
return View(persons);
}
```
Szczegółowe wyjaśnienie tego fragmentu kodu i eksplorowanie jego dodatkowych funkcji znajdziesz w naszym kompleksowym [przewodniku](https://ironpdf.com/how-to/cshtml-to-pdf-mvc-framework/).
##### CSHTML do PDF (bez interfejsu)
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/convert-pdf-20.cs
```
Szczegółowe wyjaśnienie tego fragmentu kodu i eksplorowanie jego dodatkowych funkcji znajdziesz w naszym kompleksowym [przewodniku](https://ironpdf.com/how-to/cshtml-to-pdf-razor-headlessly/).
## 2. Jak skonfigurować ustawienia HTML na PDF
W zakresie manipulacji dokumentami PDF, IronPDF zapewnia rozległe możliwości dostosowywania przez właściwość `ChromePdfRenderer.RenderingOptions` dla renderowanych PDF.
<div class="my-6 max-w-full overflow-x-auto">
<table class="w-full border-separate border-spacing-0 overflow-clip rounded-lg border border-[#D9E5E9] [&_th]:border [&_th]:border-[#D9E5E9] [&_th]:px-3 [&_th]:py-4 [&_th]:text-center [&_th]:text-sm [&_th]:font-medium [&_td]:border [&_td]:border-[#D9E5E9] [&_td]:px-3 [&_td]:py-4 [&_td]:align-top [&_td]:text-[13.5px]/[1.5] [&_td]:text-[#181818] [&_td_ul]:m-0 [&_td_ul]:list-none [&_td_ul]:p-0 [&_td_ul>li+li]:mt-2">
<thead>
<tr>
<th><strong>Ustawienia</strong></th>
<th><strong>Opis</strong></th>
<th><strong>Przykład</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>
<span><code>RozmiarPapieru</code></span>
</td>
<td>
<span>Ustaw wymiary strony dla istniejących PDF-ów (A4, Letter, Legal, itp.)</span>
</td>
<td>
<span><code>PdfPaperSize.A4</code></span>
</td>
</tr>
<tr>
<td>
<span><code>OrientacjaPapieru</code></span>
</td>
<td>
<span>Ustaw Orientację pionową lub poziomą dla istniejących PDF-ów</span>
</td>
<td>
<span><code>PdfPaperOrientation.Landscape</code></span>
</td>
</tr>
<tr>
<td>
<span><code>MarginTop</code>/<code>Bottom</code>/<code>Left</code>/<code>Right</code></span>
</td>
<td>
<span>Ustaw marginesy stron w milimetrach (domyślnie: 25 mm)</span>
</td>
<td>
<span>25</span>
</td>
</tr>
<tr>
<td>
<span><code>CssMediaType</code></span>
</td>
<td>
<span>CSS dla Ekranu lub Drukowania dla HTML na PDF</span>
</td>
<td>
<span><code>PdfCssMediaType.Print</code></span>
</td>
</tr>
<tr>
<td>
<span><code>PrintHtmlBackgrounds</code></span>
</td>
<td>
<span>Uwzględnij kolory tła i obrazy (domyślnie: true)</span>
</td>
<td>
<span>true</span>
</td>
</tr>
<tr>
<td>
<span><code>EnableJavaScript</code></span>
</td>
<td>
<span>Wykonaj JavaScript przed renderowaniem treści HTML</span>
</td>
<td>
<span>true</span>
</td>
</tr>
<tr>
<td>
<span><code>WaitFor.RenderDelay</code></span>
</td>
<td>
<span>Czas oczekiwania na dynamiczną treść HTML (ms)</span>
</td>
<td>
<span>500</span>
</td>
</tr>
</tbody>
</table>
</div>
Zobacz ten fragment kodu dla pełnego przykładu konfiguracji manipulacji dokumentami PDF:
```csharp
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Apply print-specific CSS rules
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
// Set custom margins in millimeters
renderer.RenderingOptions.MarginTop = 50;
renderer.RenderingOptions.MarginBottom = 50;
// Enable background colors and images
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
// Set paper size and orientation
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
// Generate PDFs with all settings applied to HTML content
var htmlContent = "<div style='background-color: #f0f0f0; padding: 20px;'><h1>Styled Content</h1></div>";
var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
pdfDocument.SaveAs("styled-output.pdf");
```
[[t:(Użyj PdfCssMediaType dla czystszych, zoptymalizowanych do druku układów w twoim formacie pliku PDF. Użyj Ekranu, aby dokładnie dopasować to, co użytkownicy widzą w swojej przeglądarce.)]]
**POWIĄZANE ARTYKUŁY INSTRUKTAŻOWE:**
<div class="my-6 max-w-full overflow-x-auto">
<table class="w-full border-separate border-spacing-0 overflow-clip rounded-lg border border-[#D9E5E9] [&_th]:border [&_th]:border-[#D9E5E9] [&_th]:px-3 [&_th]:py-4 [&_th]:text-center [&_th]:text-sm [&_th]:font-medium [&_td]:border [&_td]:border-[#D9E5E9] [&_td]:px-3 [&_td]:py-4 [&_td]:align-top [&_td]:text-[13.5px]/[1.5] [&_td]:text-[#181818] [&_td_ul]:m-0 [&_td_ul]:list-none [&_td_ul]:p-0 [&_td_ul>li+li]:mt-2">
<thead>
<tr>
<th>Dostosuj konwersję PDF</th>
<th>Doprecyzuj układ PDF</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<ul>
<li><a class="content-anchor" href="/how-to/rendering-options/">Przegląd wszystkich metod renderowania PDF <i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/custom-margins/">Jak ustawić niestandardowe marginesy <i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/color-grayscale/">Jak generować odcienie szarości <i class="fa-solid fa-arrow-right"></i></a></li>
</ul>
</td>
<td>
<ul>
<li><a class="content-anchor" href="/how-to/table-of-contents/">Jak dodać spis treści <i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/html-to-pdf-page-breaks/">Jak dodawać lub unikać podziałów stron <i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="content-anchor" href="/how-to/viewport-zoom/">How to Fit to Paper & Zoom <i class="fa-solid fa-arrow-right"></i></a></li>
</ul>
</td>
</tr>
</tbody>
</table>
</div>
### Jak ustawić niestandardowe nagłówki HTTP, ciasteczka i dane logowania
Podczas renderowania URL-ów, które wymagają uwierzytelnienia lub konkretnej metadanych żądania, IronPDF pozwala na dołączenie danych logowania, ciasteczek sesyjnych i nagłówków HTTP z żądaniem. To umożliwia renderowanie pulpitów intranetowych, raportów ograniczonych dostępu lub generowanych przez API stron bez potrzeby samodzielnego pobierania HTML.
Dla podstawowej lub NTLM uwierzytelniania ustaw obiekt `LoginCredentials` na rendererze. Dla dostępu opartego na tokenach lub sesjach przeprowadź ciasteczka i nagłówki przez `RenderingOptions` przed wywołaniem `RenderUrlAsPdf`.
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// Network authentication (Basic, Digest, NTLM)
renderer.LoginCredentials = new ChromeHttpLoginCredentials
{
NetworkUsername = "user@domain.com",
NetworkPassword = "securePassword"
};
// Session cookies for authenticated pages
renderer.RenderingOptions.CustomCookies["sessionId"] = "abc123";
// Custom HTTP headers (e.g., Bearer tokens, API keys)
renderer.RenderingOptions.CustomHttpRequestHeaders["Authorization"] = "Bearer eyJhbGciOi...";
var pdf = renderer.RenderUrlAsPdf("https://intranet.company.com/quarterly-report");
pdf.SaveAs("quarterly-report.pdf");
```
**POWIĄZANE ARTYKUŁY INSTRUKTAŻOWE:** <a class="content-anchor" href="/how-to/logins/">Renderuj PDFy za logowaniem <i class="fa-solid fa-arrow-right"></i></a> | <a class="content-anchor" href="/how-to/http-request-header/">Niestandardowe nagłówki żądań HTTP <i class="fa-solid fa-arrow-right"></i></a>
### Jak skonfigurować proxy dla renderowania PDF
Podczas renderowania HTML ładującego zasoby zewnętrzne za firmowym proxy, przekaż adres proxy jako trzeci parametr na `RenderHtmlAsPdf()`. To jest parametr metody, a nie właściwość na `ChromePdfRenderOptions`, więc jest ustawiany dla każdego wywołania rendera, a nie instancji renderera.
Dla proxy z uwierzytelnianiem, osadź dane uwierzytelniające bezpośrednio w URL używając formatu `http://user:pass@host:port`. Zakoduj specjalne znaki w hasłach za pomocą `Uri.EscapeDataString()`.
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// Proxy is the third parameter, not a render option
var pdf = renderer.RenderHtmlAsPdf(
"<h1>Report</h1><link rel='stylesheet' href='https://cdn.example.com/styles.css'>",
baseUrlOrPath: null,
proxy: "http://proxy.corp.local:8080"
);
pdf.SaveAs("proxied-report.pdf");
```
Zauważ, że `RenderUrlAsPdf()` nie akceptuje parametru proxy. Aby renderować aktywny adres URL za proxy, najpierw pobierz HTML za pomocą `HttpClient` skonfigurowanego z `WebProxy`, następnie przekaż go do `RenderHtmlAsPdf()` z parametrem proxy dla załadowania zasobów.
**POWIĄZANY ARTYKUŁ INSTRUKTAŻOWY:** <a class="content-anchor" href="/how-to/proxy/">Jak skonfigurować serwery proxy dla renderowania PDF <i class="fa-solid fa-arrow-right"></i></a>
## 3. Jak używać zaawansowanych funkcji generowania i bezpieczeństwa PDF
Odblokuj możliwości na poziomie Enterprise dla konwersji HTML na PDF z zaawansowanym szablonowaniem, operacjami asynchronicznymi i funkcjami bezpieczeństwa. Te metody manipulacji PDF umożliwiają tworzenie dokumentów PDF na dużą skalę, ochronę poufnych plików PDF oraz zapewnienie autentyczności dokumentu podczas konwersji HTML na profesjonalny format PDF.
### Jak generować szablon HTML dla wsadowego tworzenia PDF
**Podstawowe wsadowe tworzenie PDF**
Tworzenie wsadowego PDF jest kluczowe dla efektywnego generowania wielu spersonalizowanych dokumentów PDF. Dla podstawowych scenariuszy metoda `String.Format` w C# działa najlepiej do prostych manipulacji PDF.
```csharp
// Simple HTML templating with String.Format
string htmlTemplate = String.Format("<h1>Hello {0}!</h1>", "World");
// Results in HTML content: <h1>Hello World!</h1>
```
Dla dłuższych szablonów, kiedy potrzebujesz generować dokumenty PDF, użyj zamiany symboli zastępczych w treści HTML:
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-16.cs
```
**Szablonowanie HTML do PDF z Handlebars.NET**
Dla złożonych szablonów z pętli i warunkach, kiedy konwertujesz HTML na PDF, użyj zaawansowanego szablonowania z `Handlebars.NET` do generowania plików PDF z dynamiczną zawartością HTML.
```shell
# First, install Handlebars.NET for HTML to PDF templating
PM > Install-Pakiet Handlebars.NET
```
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-21.cs
```
**POWIĄZANY ARTYKUŁ: ** <a class="content-anchor" href="https://github.com/rexm/Handlebars.NET">Dowiedz się więcej na temat Handlebars.NET na GitHub <i class="fa-solid fa-arrow-right"></i></a>
<div>
<h4 style="color: #181818;">Kontrola podziałów stron PDF:</h4> Zarządzanie paginacją w generowanych dokumentach PDF zapewnia profesjonalne, czytelne układy podczas konwersji fragmentów HTML. Użyj CSS, aby kontrolować, gdzie strony się załamują w plikach PDF.
</div>
```html
<!DOCTYPE html>
<html>
<head>
<style type="text/css" media="print">
.page {
page-break-after: always;
page-break-inside: avoid;
}
</style>
</head>
<body>
<div class="page">
<h1>Page 1 Content</h1>
</div>
<div class="page">
<h1>Page 2 Content</h1>
</div>
<div class="page">
<h1>Page 3 Content</h1>
</div>
</body>
</html>
```
### Jak generować PDF metodą asynchroniczną
IronPDF dostarcza wydajność na poziomie przedsiębiorstwa z pełnym wsparciem dla <a href="https://learn.microsoft.com/en-us/dotnet/standard/parallel-programming/task-based-asynchronous-programming" target="_blank" rel="noopener">asynchronicznego i wielowątkowego</a> dla twoich potrzeb konwersji HTML na PDF, kiedy potrzebujesz generować pliki PDF na dużą skalę.
```csharp
using IronPdf;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
public class PdfGenerationService
{
// Async method for non-blocking PDF generation from HTML content
public async Task<byte[]> GeneratePdfAsync(string html)
{
var renderer = new ChromePdfRenderer();
// Async HTML to PDF conversion preserves thread pool
var pdf = await renderer.RenderHtmlAsPdfAsync(html);
// Return PDF files as byte array for web responses
return pdf.BinaryData;
}
// Concurrent batch PDF generation for multiple HTML strings
public async Task GenerateMultiplePdfsAsync(List<string> htmlSzablony)
{
var renderer = new ChromePdfRenderer();
// Create parallel conversion tasks to generate PDF documents
var tasks = htmlSzablony.Select(html =>
renderer.RenderHtmlAsPdfAsync(html)
);
// Await all PDF conversions simultaneously
var pdfs = await Task.WhenAll(tasks);
// Save generated PDF files from HTML content
for (int i = 0; i < pdfs.Length; i++)
{
pdfs[i].SaveAs($"document-{i}.pdf");
}
}
}
```
*Zweryfikowane na IronPDF v2026.6.1 · .NET 10 · czerwiec 2026.*
[[t:(Wskazówki dotyczące optymalizacji wydajności konwersji HTML na PDF)]]
- Używaj systemów 64-bitowych dla optymalnej wydajności generowania PDF.
- Zapewnij odpowiednie zasoby serwera, gdy generujesz dokumenty PDF (unikaj słabyćh darmowych poziomów)
- Daj wystarczająco RenderDelay dla złożonego JavaScriptu w treści HTML.
- Ponownie wykorzystuj instancje `ChromePdfRenderer` kiedy to możliwe.
- Wykorzystaj ostatnie poprawki pamięci dla operacji asynchronicznych / w partiach, aby zmniejszyć zużycie zasobów; testuj dla zmniejszonych rozmiarów plików z powtarzającymi się niestandardowymi nagłówkami/stopkami.
**POWIĄZANY ARTYKUŁ INSTRUKTAŻOWY:** <a class="content-anchor" href="/how-to/async/">Jak generować PDF-y z asynchronicznie i wielowątkowo <i class="fa-solid fa-arrow-right"></i></a>
### Jak dodać zaawansowane funkcje bezpieczeństwa
**Jak dodać ochronę hasłem dla plików PDF w .NET**
Zabezpieczaj poufne generowane dokumenty PDF hasłami i uprawnieniami podczas konwersji treści HTML na chroniony format PDF.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-24.cs
```
**Jak dodać podpisy cyfrowe do plików PDF**
Dodaj podpisy kryptograficzne, aby zapewnić autentyczność dokumentu PDF, gdy generujesz pliki PDF z treści HTML. Po podpisaniu możesz [zweryfikować podpis i przeczytać certyfikat podpisującego](/how-to/verify-pdf-signatures/) dla audytu i kontroli zgodności.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-25.cs
```
*Zweryfikowane na IronPDF v2026.6.1 · .NET 10 · czerwiec 2026.*
**POWIĄZANY ARTYKUŁ INSTRUKTAŻOWY:** <a class="content-anchor" href="/how-to/signing/">Podpisywanie cyfrowo dokumentów PDF w C# <i class="fa-solid fa-arrow-right"></i></a>
### Jak konwertować formularze HTML na wypełnialne PDFy
Aby przekonwertować standardowe elementy formularza HTML na interaktywne, wypełnialne pola formularza PDF, włącz opcję renderowania `CreatePdfFormsFromHtml`. To zachowuje pola tekstowe, pola wyboru, radio buttony i menu rozwijane jako edytowalne pola w generowanym dokumencie PDF.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-26.cs
```
[[w:(Każde pole formularza w Twoim HTML musi mieć unikalny atrybut `name`. Duplikaty nazw spowodują, że pola będą dzielić tę samą wartość w generowanym PDF, co prowadzi do niespodziewanych zachowań, gdy użytkownicy wypełniają formularz.)]]
**POWIĄZANY ARTYKUŁ INSTRUKTAŻOWY:** <a class="content-anchor" href="/how-to/create-forms/">Jak tworzyć wypełnialne formularze PDF w C# <i class="fa-solid fa-arrow-right"></i></a>
### Jak konwertować określone elementy HTML na PDF
Aby renderować konkretną sekcję strony, a nie cały dokument, odizoluj docelowy element przed renderowaniem. Najbardziej bezpośrednie podejście używa opcji renderowania `JavaScript` do zastąpienia treści dokumentu zawartością docelowego elementu, połączonego z `WaitFor.HtmlQuerySelector()` aby upewnić się, że element istnieje przed ekstrakcją. Fragment poniżej zachowuje `document.head`, więc arkusze stylów i czcionki są przenoszone; bez tego kroku, reguły CSS opierające się na selektorach przodków byłyby utracone w wyodrębnionym PDF.
Dla scenariuszy po stronie serwera, gdzie masz dostęp do surowego HTML, wyodrębnij docelowy fragment za pomocą parsera takiego jak AngleSharp i przekaż go do `RenderHtmlAsPdf()`, bez potrzeby wykonywania JavaScriptu.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-27.cs
```
**POWIĄZANY ARTYKUŁ INSTRUKTAŻOWY:** <a class="content-anchor" href="/how-to/html-element-to-pdf/">Jak konwertować elementy HTML i częściowe strony na PDF <i class="fa-solid fa-arrow-right"></i></a>
### Jak przekształcać uwierzytelnione strony na PDF
Istnieją trzy mechanizmy do renderowania stron za uwierzytelnianiem: dane logowania sieciowego, niestandardowe ciasteczka i nagłówki żądań HTTP. To pokrywa najczęstsze scenariusze uwierzytelniania podczas konwersji chronionych treści webowych na PDF.
**Dane logowania**
Użyj `ChromeHttpLoginCredentials` dla podstawowego, 'digest' lub NTLM uwierzytelniania przy konwertowaniu chronionych adresów URL na PDF.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-28.cs
```
**Ciasteczka i nagłówki HTTP**
Dla uwierzytelnienia oparte na tokenach lub sesjach, dołącz niestandardowe ciasteczka i nagłówki HTTP bezpośrednio do żądania renderowania.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-29.cs
```
[[t:(Dla logowań opartych na formularzach HTML (POST nazwa użytkownika/hasło), rozważ użycie `HttpClient` do pierwotnej autoryzacji, a następnie przekaż uzyskane ciasteczka do słownika `CustomCookies`, by renderować chronioną stronę.)]]
**POWIĄZANY ARTYKUŁ INSTRUKTAŻOWY:** <a class="content-anchor" href="/how-to/logins/">Jak przekonwertować HTML za logowaniem na PDF <i class="fa-solid fa-arrow-right"></i></a>
### Jak generować PDF-y z wielu fragmentów HTML?
Aby generować PDF-y za pomocą łączenia fragmentów HTML, można je [scalić](https://ironpdf.com/examples/merge-pdfs/). To tworzy raporty wielosekcyjne lub łączy treści z różnych źródeł:
```cs
var renderer = new ChromePdfRenderer();
PdfDocument part1 = renderer.RenderHtmlAsPdf("<h1>Section 1</h1><p>First section content</p>");
PdfDocument part2 = renderer.RenderHtmlAsPdf("<h1>Section 2</h1><p>Second section content</p>");
var merged = PdfDocument.Merge(part1, part2);
merged.SaveAs("Merged.pdf");
// Alternative approach: copy specific pages
var combinedDoc = new PdfDocument();
combinedDoc.CopyPage(part1, 0); // Copy first page
combinedDoc.CopyPage(part2, 0); // Copy first page
combinedDoc.SaveAs("Combined.pdf");
```
To pomaga przy tworzeniu raportów wielosekcyjnych z różnych fragmentów HTML. Możesz także [dodać zakładki](https://ironpdf.com/how-to/bookmarks/) w celu poprawy nawigacji.

### Jak przekonwertować HTML na PDF w API webowych?
W ASP.NET Web API generuj i zwracaj PDF-y bez zapisywania na dysku za pomocą [MemoryStream](https://ironpdf.com/how-to/pdf-to-memory-stream/). Ten wzorzec jest idealny dla [aplikacji Blazor](https://ironpdf.com/how-to/blazor-tutorial/) i usług RESTful:
```cs
[HttpGet("download")]
public IActionResult GetPdf()
{
var renderer = new ChromePdfRenderer();
string html = "<h1>Web Report</h1><p>Generated dynamically.</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
var bytes = pdf.BinaryData;
// Optional: Add metadata
pdf.MetaData.Author = "API Service";
pdf.MetaData.CreationDate = DateTime.Now;
return File(bytes, "application/pdf", "report.pdf");
}
```
Ten wzorzec działa świetnie dla generacji PDF po stronie serwera w aplikacjach webowych .NET 10. Możesz zintegrować się z [widokami CSHTML](https://ironpdf.com/how-to/cshtml-to-pdf-mvc-core/) dla aplikacji MVC.
### Jak dodawać nagłówki, znaki wodne i zabezpieczenia?
#### Dodawanie profesjonalnych nagłówków i stopek
Nagłówki i stopki zawierające numery stron, daty lub elementy brandingowe sprawiają, że dokumenty wielostronicowe są znacznie bardziej czytelne i profesjonalne. IronPDF przetwarza je jako fragmenty HTML, dzięki czemu można używać pełnego stylu CSS, w tym obrazów i kolorów marki:
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
MaxHeight = 50,
HtmlFragment = "<div style='text-align:center;font-size:12px;'>Annual Report 2025 -- Confidential</div>",
BaseUrl = new Uri(@"file:///C:/assets/")
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
MaxHeight = 30,
HtmlFragment = "<div style='text-align:center;font-size:10px;'>Page {page} of {total-pages}</div>",
DrawDividerLine = true
};
renderer.RenderingOptions.MarginTop = 60;
renderer.RenderingOptions.MarginBottom = 40;
var pdf = renderer.RenderHtmlAsPdf("<h1>Report Content</h1><p>Body text here.</p>");
pdf.SaveAs("report-with-headers.pdf");
```
Elementy zastepcze jak `{page}` i `{total-pages}` sa automatycznie zastepowane podczas renderowania. Zapoznaj sie z [samouczkiem hdrów i stopki](https://ironpdf.com/how-to/headers-and-footers/) dotyczacym dynamicznej iniekcji dat, umieszczania logo i naprzemiennego stylu stron.
#### Stosowanie znaków wodnych, szyfrowania i podpisów cyfrowych
Znaki wodne chronią dokumenty robocze i poufne raporty. Ochrona hasłem i ustawienia uprawnień ograniczają krąg osób, które mogą drukować, kopiować lub edytować plik PDF. Podpisy cyfrowe zapewniają weryfikowalną warstwę autentyczności dla umów i dokumentów podlegających regulacjom. Możesz połączyć wszystkie trzy w jednym przepływie pracy:
```csharp
using IronPdf;
using System.Security.Cryptography.X509Certificates;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1><p>Terms and conditions.</p>");
// Watermark
pdf.ApplyWatermark(
"<div style='font-size:72px;color:red;opacity:0.3;'>DRAFT</div>",
rotation: 45,
opacity: 30
);
// Encryption and permissions
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
// Digital signature
var cert = X509CertificateLoader.LoadPkcs12FromFile("certificate.pfx", "password");
var signature = new PdfSignature(cert)
{
SigningContact = "Jane Smith",
SigningLocation = "New York, NY",
SigningReason = "Contract Approval"
};
pdf.Sign(signature);
pdf.SaveAsRevision("signed-contract.pdf");
```
Dowiedz się więcej o [technikach znakowania wodnego](https://ironpdf.com/how-to/custom-watermark/), [ustawieniach zabezpieczeń plików PDF](https://ironpdf.com/how-to/pdf-permissions-passwords/) oraz [podpisywaniu opartym na certyfikatach](https://ironpdf.com/examples/digitally-sign-a-pdf/), w tym o integracji z modułami bezpieczeństwa sprzętowego (HSM).
## 4. Jak wdrożyć HTML na PDF na platformach chmurowych
Wdrażanie konwersji HTML na PDF w środowiskach chmurowych wymaga specyficznej konfiguracji dla renderowania bezgłowego, tymczasowych ścieżek plików i przydziału zasobów. Aby zadawaliśmy kluczowe zagadnienia dotyczące wdrożeń w popularnych platformach chmurowych i w kontenerach z IronPDF.
<div class="my-6 max-w-full overflow-x-auto">
<table class="w-full border-separate border-spacing-0 overflow-clip rounded-lg border border-[#D9E5E9] [&_th]:border [&_th]:border-[#D9E5E9] [&_th]:px-3 [&_th]:py-4 [&_th]:text-center [&_th]:text-sm [&_th]:font-medium [&_td]:border [&_td]:border-[#D9E5E9] [&_td]:px-3 [&_td]:py-4 [&_td]:align-top [&_td]:text-[13.5px]/[1.5] [&_td]:text-[#181818] [&_td_ul]:m-0 [&_td_ul]:list-none [&_td_ul]:p-0 [&_td_ul>li+li]:mt-2">
<thead>
<tr>
<th>Platforma</th>
<th>Min Zasoby</th>
<th>Pakiet</th>
<th>AutoKonfiguracja</th>
<th>Tymczasowa Ścieżka</th>
<th>Kluczowy Problem</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<span>Usługa aplikacji Azure</span>
</td>
<td>
<span>Poziom B1 (Podstawowy)</span>
</td>
<td>
<span><code>IronPdf.Linux</code></span>
</td>
<td>
<span><code>true</code></span>
</td>
<td>
<span>/tmp</span>
</td>
<td>
<span>Bezpłatne/Współdzielone poziomy nie działają (brak GPU, mało pamięci)</span>
</td>
</tr>
<tr>
<td>
<span>Azure Functions (Windows)</span>
</td>
<td>
<span>Poziom B1</span>
</td>
<td>
<span><code>IronPdf</code></span>
</td>
<td>
<span><code>true</code></span>
</td>
<td>
<span>/tmp</span>
</td>
<td>
<span>Odznacz "Uruchom z pliku pakietu"</span>
</td>
</tr>
<tr>
<td>
<span>AWS Lambda</span>
</td>
<td>
<span>512 MB / 60s timeout</span>
</td>
<td>
<span><code>IronPdf.Linux</code></span>
</td>
<td>
<span><code>true</code></span>
</td>
<td>
<span>/tmp (wymagane)</span>
</td>
<td>
<span>Domyślny system plików jest tylko do odczytu</span>
</td>
</tr>
<tr>
<td>
<span>Docker (Ubuntu/Debian)</span>
</td>
<td>
<span>Zależne od obrazu</span>
</td>
<td>
<span><code>IronPdf.Linux</code></span>
</td>
<td>
<span><code>false</code></span>
</td>
<td>
<span> Domyślny obraz </span>
</td>
<td>
<span>Ustaw <code>false</code> (Dockerfile zarządza zależnościami)</span>
</td>
</tr>
</tbody>
</table>
</div>
### Jak wdrożyć na Azure
Podczas wdrażania na Azure Functions lub Usłudze App, wyłącz akcelerację GPU i zapewnij, że twoja warstwa hostingowa dostarcza wystarczającą pamięć dla renderowania opartego na Chrome. Dodaj te ustawienia podczas uruchamiania aplikacji, przed wszelkimi wywołaniami renderowania.
Piaskownice Azure działają bezgłowo bez dostępu do GPU, a poziomy darmowe/współdzielone (F1, D1) brakuje zasobów wymaganych przez Chrome. Celuj w **Poziom B1 (Podstawowy)** lub wyższy.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-30.cs
```
[[e:(Usługa App Azure Darmowa i Współdzielona (F1, D1) nie ma wystarczających zasobów dla renderowania PDF z Chrome. Użyj przynajmniej poziomu **B1 (Podstawowy)** lub wyższego, aby uniknąć błędów braku pamięci i timeoutów procesów.)]]
**POWIĄZANY PRZEWODNIK ROZPOCZYNAJĄCY:** <a class="content-anchor" href="/get-started/azure/">Jak wdrożyć IronPDF na Azure <i class="fa-solid fa-arrow-right"></i></a>
### Jak wdrożyć na AWS Lambda
AWS Lambda wymaga wdrożenia opartego na Dockerze dla renderowania PDF opartego na Chrome. Domyślny system plików Lambda jest tylko do odczytu, więc wszystkie tymczasowe i ścieżki wdrożenia muszą wskazywać na `/tmp`.
Skonfiguruj te ustawienia na górze obsługiwacza funkcji, przed jakimikolwiek wywołaniami renderowania.
```csharp
using Amazon.Lambda.Core;
using IronPdf;
public class PdfFunction
{
public string FunctionHandler(string input, ILambdaContext context)
{
// Lambda's only writable directory
var tmpPath = "/tmp/";
IronPdf.Installation.TempFolderPath = tmpPath;
IronPdf.Installation.CustomDeploymentDirectory = tmpPath;
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
// Let IronPDF install Chrome dependencies on first cold start
IronPdf.Installation.LinuxAndDockerDependenciesAutoKonfiguracja = true;
context.Logger.LogLine("Rendering PDF...");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(input);
// Save to /tmp before uploading to S3 or returning
var outputPath = $"{tmpPath}output.pdf";
pdf.SaveAs(outputPath);
return outputPath;
}
}
```
[[i:(Konfiguruj swoją funkcję Lambda z co najmniej **512 MB pamięci** i minimum **60-sekundowym czasem wywołania.** Renderowanie oparte na Chrome jest intensywne pod względem pamięci, a zimne starty wymagają dodatkowego czasu na inicjalizację wbudowanego silnika przeglądarki.)]]
**RELATED GET-STARTED Guide:** <a class="content-anchor" href="/get-started/aws/">Jak wdrożyć IronPDF na AWS Lambda <i class="fa-solid fa-arrow-right"></i></a>
### Jak wdrożyć z Dockerem
Dla wdrożeń Dockera użyj pakietu NuGet `IronPdf.Linux`, aby zmniejszyć rozmiar obrazu i uniknąć pobierania zasobów podczas wykonywania. Ten pakiet zawiera wcześniej skompilowane binaria natywne dla Linuksa, zoptymalizowane dla środowisk kontenerowych.
Ustaw `LinuxAndDockerDependenciesAutoKonfiguracja = false`, gdy Twój Dockerfile już instaluje współdzielone zależności biblioteki Chrome za pomocą `apt-get`. Automatyczna instalacja w czasie wykonywania jest w tym przypadku zbędna i może powodować błędy uprawnień lub dłuższe zimne starty.
<div class="my-6 max-w-full overflow-x-auto">
<table class="w-full border-separate border-spacing-0 overflow-clip rounded-lg border border-[#D9E5E9] [&_th]:border [&_th]:border-[#D9E5E9] [&_th]:px-3 [&_th]:py-4 [&_th]:text-center [&_th]:text-sm [&_th]:font-medium [&_td]:border [&_td]:border-[#D9E5E9] [&_td]:px-3 [&_td]:py-4 [&_td]:align-top [&_td]:text-[13.5px]/[1.5] [&_td]:text-[#181818] [&_td_ul]:m-0 [&_td_ul]:list-none [&_td_ul]:p-0 [&_td_ul>li+li]:mt-2">
<thead>
<tr>
<th>Platforma</th>
<th>Pakiet</th>
<th>Konfiguracja kluczowa</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<span>Ubuntu 22.04 / Debian</span>
</td>
<td>
<span><code>IronPdf.Linux</code></span>
</td>
<td>
<span>Domyślny, działa od razu po wyjęciu z pudełka</span>
</td>
</tr>
<tr>
<td>
<span>Alpine Linux</span>
</td>
<td>
<span><code>IronPdf.Linux</code></span>
</td>
<td>
<span>Zainstaluj chromium przez apk w Dockerfile</span>
</td>
</tr>
<tr>
<td>
<span>Amazon Linux 2</span>
</td>
<td>
<span><code>IronPdf.Linux</code></span>
</td>
<td>
<span>Użyj <code>LinuxAndDockerDependenciesAutoKonfiguracja = true</code></span>
</td>
</tr>
<tr>
<td>
<span>Kontenery Windows</span>
</td>
<td>
<span><code>IronPdf</code></span>
</td>
<td>
<span>Nie wymaga dodatkowej konfiguracji</span>
</td>
</tr>
</tbody>
</table>
</div>
<br />
Minimalny wieloetapowy Dockerfile dla obrazu opartego na Ubuntu/Debian:
```dockerfile
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /app
COPY . .
RUN dotnet publish -c Release -o /out
FROM mcr.microsoft.com/dotnet/aspnet:10.0
# Install Chrome dependencies for PDF rendering
RUN apt-get update && apt-get install -y \
libglib2.0-0 libnss3 libatk1.0-0 libatk-bridge2.0-0 \
libcups2 libdrm2 libxkbcommon0 libxcomposite1 \
libxdamage1 libxrandr2 libgbm1 libpango-1.0-0 \
libcairo2 libasound2 libxshmfence1 && \
rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY --from=build /out .
ENTRYPOINT ["dotnet", "MyApp.dll"]
```
<br />
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-33.cs
```
*Zweryfikowane na IronPDF v2026.6.1 · .NET 10 · czerwiec 2026.*
**RELATED GET-STARTED Guide:** <a class="content-anchor" href="/get-started/ironpdf-docker/">Jak korzystać z IronPDF z Dockerem <i class="fa-solid fa-arrow-right"></i></a>
### 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
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-12.cs
```
- `ChromePdfRenderer` jest **[bezpieczny dla wątków](/examples/threading/)**; jedna instancja może obsługiwać dziesiątki ulewających zadań bez zakleszczeń.
- `Parallel.ForEach` nasyca 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](https://stackoverflow.com/questions/65237160/ironpdf-deadlocks-when-running-in-parallel), 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:
```dockerfile
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)](https://stackoverflow.com/questions/66947545/chrome-headless-not-working-as-root-with-no-sandbox) 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:
```csharp
renderer.RenderingOptions.RenderDelay = 200; // ms
// OR: renderer.RenderingOptions.JavaScript = "WaitFor('window.doneLoading')";
```
Zobacz dedykowany **[przewodnik WaitFor](/how-to/waitfor/)** dla niestandardowych obietnic i odpytywania DOM.
#### 4. Włącz logowanie debugowania dla jednego usługi
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-15.cs
```
Ś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](/troubleshooting/ironpdf-performance-assistance/), takimi jak `[[name]]` i wykonaj zamianę tekstu zamiast odbudowywać złożone HTML. Jest to 10x szybsze i lekkie dla pamięci.
#### Dalsza lektura
- Jak-to – [Generuj PDFy z async / wielowątkowoscia](/how-to/async/)
- Rozwiazywanie problemów – [Centrum pomocy technicznej w zakresie wydajności](/troubleshooting/ironpdf-performance-assistance/)
- Przykład – [Demonstracja renderowania wątkowego](/examples/threading/)
---
## 5. Porównanie IronPDF z innymi bibliotekami PDF dla .NET
IronPDF jest preferowanym rozwiązaniem dla wielu zespołów, jeśli chodzi o generowanie plików PDF w C# dzięki solidnemu silnikowi renderowania opartemu na Chromium, intuicyjnemu API i częstym ulepszeniom produktu. Porównajmy IronPDF z innymi konwerterami PDF, aby znaleźć najlepsze rozwiązanie dla Twoich potrzeb generowania PDF.
### Bezplatne i otwarte alternatywy
Niektóre narzędzia, które mogą wziąć pod uwagę:
- **PuppeteerSharp:** wersja portu Puppeteer na platformę .NET na licencji MIT, która steruje bezgłowym Chrome'a.
- **Playwright dla .NET:** biblioteka automatyzacji Microsoftu na licencji Apache-2.0, również oparta na Chromium.
- **wkhtmltopdf:** długoterminowa samodzielna binarna konwersja HTML do PDF.
- **Natywne drogi przeglądarki:** drukowanie do PDF bezpośrednio z bezgłowej przeglądarki lub sterownika drukarki systemu operacyjnego.
Warto najpierw zwrócić uwagę na rozróżnienie: PuppeteerSharp i Playwright są ramkami automatyzacji przeglądarki, a nie bibliotekami PDF. Ekspozycja wywołania drukowania do PDF na bazie prawdziwego Chromium, więc wierność renderowania jest doskonała, ale szczegóły PDF, takie jak nagłówki i stopki, szyfrowanie, podpisy i PDF/A, wraz z cyklem życia przeglądarki, pozostają do zrealizowania przez ciebie: wysyłanie i aktualizowanie binarium Chromium, zarządzanie współbieżnością i odzyskiwanie po awarii, oraz budowanie struktury dokumentu ręcznie. Playwright dodaje warunek warty poznania wcześnie: jego `PdfAsync` działa tylko w bezgłowym Chromie (nie w Firefox ani WebKit), więc wdrożenia muszą zapewniać bezgłowego Chrome, co ma znaczenie w kontenerach i rozwiązaniach bezserwerowych.
wkhtmltopdf znowu zajmuje inne miejsce. Projekt został zarchiwizowany w 2024 roku, a jego ostatnie wydanie (0.12.6, 2020) działa na ~2012 Qt WebKit silniku, który nie otrzymuje dalszych łatek bezpieczeństwa, w tym krytyczna niezałatana porada dotyczącą SSRF (CVE-2022-35583); pozostaje użyteczny dla prostych statycznych dokumentów na zaufanym wejściu, ale mniej dla jawnego wyjścia. Natywne drogi przeglądarek nie wymagają w ogóle biblioteki, kosztem jakiejkolwiek rodzimój biblioteki PDF .NET ani faktycznej kontroli nad automatyzacją po stronie serwera.
Dla prototypów, narzędzi wewnętrznych i pracy bez budżetu, są to legalne wybory. Poniższe porównanie obejmuje funkcję po funkcji bibliotek komercyjnych.
### Szybka macierz decyzyjna: IronPDF versus inne konwertery PDF dla .NET
<div class="my-6 max-w-full overflow-x-auto">
<table class="w-full border-separate border-spacing-0 overflow-clip rounded-lg border border-[#D9E5E9] [&_th]:border [&_th]:border-[#D9E5E9] [&_th]:px-3 [&_th]:py-4 [&_th]:text-center [&_th]:text-sm [&_th]:font-medium [&_td]:border [&_td]:border-[#D9E5E9] [&_td]:px-3 [&_td]:py-4 [&_td]:align-top [&_td]:text-[13.5px]/[1.5] [&_td]:text-[#181818] [&_td_ul]:m-0 [&_td_ul]:list-none [&_td_ul]:p-0 [&_td_ul>li+li]:mt-2">
<thead>
<tr>
<th>Rozwiązanie</th>
<th>Kiedy używać</th>
<th>Najlepsze dla</th>
</tr>
</thead>
<tbody>
<tr style="background-color: #f8fdff;">
<td>
<span><strong>IronPDF</strong></span>
</td>
<td>
<span>Konwersja nowoczesnych stron internetowych/HTML do PDF z dokładnym wizualnym podobieństwem.</span>
</td>
<td>
<span>Aplikacje Enterprise wymagające niezawodnego silnika renderowania HTML, dynamicznych treści i profesjonalnego wsparcia.</span>
</td>
</tr>
<tr>
<td>
<span>wkhtmltopdf</span>
</td>
<td>
<span>Prosta konwersja HTML w aplikacjach niekrytycznych, gdzie przestarzałe renderowanie jest akceptowalne.</span>
</td>
<td>
<span>Podstawowe generowanie dokumentów z dziedzicznym HTML/CSS.</span>
</td>
</tr>
<tr>
<td>
<span>Syncfusion</span>
</td>
<td>
<span>Jeśli już zainwestowano w ekosystem Syncfusion lub uprawnione do bezpłatnej licencji dla społeczności.</span>
</td>
<td>
<span>Organizacje używające wielu komponentów Syncfusion.</span>
</td>
</tr>
<tr>
<td>
<span>Aspose.PDF</span>
</td>
<td>
<span>Skomplikowana manipulacja PDF, gdy jakość renderowania HTML jest mniej istotna.</span>
</td>
<td>
<span>Obszerne funkcje edycji PDF poza konwersją HTML.</span>
</td>
</tr>
</tbody>
</table>
</div>
**POWIĄZANE PORÓWNANIA:**
<ul>
<li><a class="content-anchor" href="/competitors/syncfusion-vs-ironpdf/">Porównaj IronPDF i Syncfusion <i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="mt-2 content-anchor" href="/competitors/aspose-vs-ironpdf/">Porównaj IronPDF i Aspose <i class="fa-solid fa-arrow-right"></i></a></li>
</ul>
### Szczegółowe porównanie: IronPDF versus inne konwertery PDF .NET
<details class="comparison-toggle">
<summary>Show the full feature-by-feature table (10 .NET PDF libraries)</summary>
<div>
<div class="my-6 max-w-full overflow-x-auto">
<table class="w-full min-w-[1000px] border-separate border-spacing-0 overflow-clip rounded-lg border border-[#D9E5E9] [&_th]:border [&_th]:border-[#D9E5E9] [&_th]:px-3 [&_th]:py-4 [&_th]:text-center [&_th]:text-sm [&_th]:font-bold [&_th]:text-[#181818] [&_td]:border [&_td]:border-[#D9E5E9] [&_td]:px-3 [&_td]:py-3 [&_td]:text-center [&_td]:align-middle [&_td]:text-[13.5px]/[1.5] [&_td]:text-[#181818] [&_a]:underline [&_.iron-col]:bg-[#F1F9FB] [&_.recommended]:block [&_.recommended]:text-[11px] [&_.recommended]:font-bold [&_.recommended]:text-[#E01A59] [&_.col-name]:block [&_.col-name]:text-sm [&_.col-name]:font-bold [&_.section-row_td]:bg-[#F5F8FA] [&_.section-row_td]:font-bold [&_.section-row_td]:uppercase [&_.section-row_td]:tracking-wide [&_.section-row_td]:text-xs [&_.section-row_td]:text-[#5A6B77] [&_.chip]:inline-block [&_.chip]:whitespace-nowrap [&_.chip]:rounded [&_.chip]:px-2 [&_.chip]:py-0.5 [&_.chip]:text-xs [&_.chip]:font-semibold [&_.chip-full]:bg-[#E8F6F1] [&_.chip-full]:text-[#44806B] [&_.chip-good]:bg-[#E8F6F1] [&_.chip-good]:text-[#44806B] [&_.chip-free]:bg-[#E8F6F1] [&_.chip-free]:text-[#44806B] [&_.chip-partial]:bg-[#FFF2DA] [&_.chip-partial]:text-[#A66E0A] [&_.chip-limited]:bg-[#FFF2DA] [&_.chip-limited]:text-[#A66E0A] [&_.chip-no]:bg-[#FFE1E2] [&_.chip-no]:text-[#A8181D] [&_.chip-iron]:bg-[#DEEFFC] [&_.chip-iron]:text-[#1D629B] [&_.price-val]:block [&_.price-val]:font-bold [&_.price-note]:mt-0.5 [&_.price-note]:block [&_.price-note]:text-[11px] [&_.price-note]:leading-snug [&_.price-note]:text-[#5A6B77] [&_.winner-tag]:ml-1 [&_.winner-tag]:inline-block [&_.winner-tag]:rounded [&_.winner-tag]:bg-[#E8F6F1] [&_.winner-tag]:px-1.5 [&_.winner-tag]:py-0.5 [&_.winner-tag]:text-[11px] [&_.winner-tag]:font-bold [&_.winner-tag]:text-[#44806B]">
<thead>
<tr>
<th>Funkcja</th>
<th class="iron-col">
<span class="recommended">★ Zalecane</span>
<span class="col-name">IronPDF</span>
</th>
<th>wkhtmltopdf</th>
<th>iText</th>
<th>Aspose.PDF</th>
<th>Syncfusion</th>
<th>Apryse</th>
<th>SelectPdf</th>
<th>Spire.PDF</th>
<th>PDFsharp</th>
<th>QuestPDF</th>
</tr>
</thead>
<tbody>
<tr class="section-row">
<td colspan="11">Renderowanie i konwersja</td>
</tr>
<tr>
<td>Dokładność renderowania</td>
<td class="iron-col">Pixel-Perfect <span class="winner-tag">Najlepsze</span></td>
<td>Styl druku</td>
<td>Tylko programistyka</td>
<td>Dobrze</td>
<td>Dobrze</td>
<td>Dobrze</td>
<td>Dobrze</td>
<td>Niski poziom</td>
<td>Bez renderowania</td>
<td>Układ Code-First</td>
</tr>
<tr>
<td>Wsparcie HTML5</td>
<td class="iron-col"><span class="chip chip-full">Pełne</span></td>
<td><span class="chip chip-limited">Przestarzałe</span></td>
<td><span class="chip chip-partial">Dodatek</span></td>
<td><span class="chip chip-partial">Częściowe</span></td>
<td><span class="chip chip-full">Pełne</span></td>
<td><span class="chip chip-partial">Moduł</span></td>
<td><span class="chip chip-full">Pełne</span></td>
<td><span class="chip chip-limited">Ograniczone</span></td>
<td><span class="chip chip-no">Nie</span></td>
<td><span class="chip chip-no">Nie (Code-First)</span></td>
</tr>
<tr>
<td>Wsparcie dla CSS3</td>
<td class="iron-col"><span class="chip chip-full">Pełne</span></td>
<td><span class="chip chip-limited">Ograniczone</span></td>
<td><span class="chip chip-partial">Dodatek</span></td>
<td><span class="chip chip-partial">Częściowe</span></td>
<td><span class="chip chip-full">Pełne</span></td>
<td><span class="chip chip-partial">Moduł</span></td>
<td><span class="chip chip-full">Pełne</span></td>
<td><span class="chip chip-limited">Ograniczone</span></td>
<td><span class="chip chip-no">Nie</span></td>
<td><span class="chip chip-no">Nie (Code-First)</span></td>
</tr>
<tr>
<td>Wykonanie JavaScript</td>
<td class="iron-col">
<span class="chip chip-full">Pełna</span>
<span class="winner-tag">Najlepsze</span>
</td>
<td><span class="chip chip-no">Nie</span></td>
<td><span class="chip chip-no">Nie</span></td>
<td><span class="chip chip-limited">Kwestionowane</span></td>
<td><span class="chip chip-partial">Ograniczone</span></td>
<td><span class="chip chip-partial">Ograniczone</span></td>
<td><span class="chip chip-partial">Ograniczone</span></td>
<td><span class="chip chip-limited">Bardzo ograniczone</span></td>
<td><span class="chip chip-no">Nie</span></td>
<td><span class="chip chip-no">Nie</span></td>
</tr>
<tr>
<td>HTML→PDF (Nowoczesny układ)</td>
<td class="iron-col">Wbudowane Chromium <span class="winner-tag">Najlepsze</span></td>
<td>Qt WebKit (Przestarzałe)</td>
<td>Płatny dodatek</td>
<td>Częściowe; JS Kwestionowane</td>
<td>Silnik Blink</td>
<td>Wymaga modułu</td>
<td>Pełne HTML→PDF</td>
<td>Oparte na obrazach</td>
<td><span class="chip chip-no">Nie</span></td>
<td><span class="chip chip-no">Nie jest rendererem HTML</span></td>
</tr>
<tr>
<td>Renderowanie PDF→Obraz</td>
<td class="iron-col"><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-no">Nie</span></td>
<td><span class="chip chip-partial">Tak</span></td>
<td><span class="chip chip-partial">Tak</span></td>
<td><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-no">Nie</span></td>
<td><span class="chip chip-partial">Ograniczone</span></td>
<td><span class="chip chip-no">Nie</span></td>
<td><span class="chip chip-partial">Tylko własne dokumenty</span></td>
</tr>
<tr class="section-row">
<td colspan="11">Operacje na dokumentach</td>
</tr>
<tr>
<td>Generowanie PDF programistycznie</td>
<td class="iron-col"><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-no">Nie</span></td>
<td><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-partial">Tylko HTML</span></td>
<td><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-good">Podstawowe</span></td>
<td><span class="chip chip-full">Tak (Fluent API)</span></td>
</tr>
<tr>
<td>Scałanie, dzielenie i przearanżowanie</td>
<td class="iron-col"><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-no">Nie</span></td>
<td><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-partial">Ograniczone</span></td>
<td><span class="chip chip-full">Tak</span></td>
</tr>
<tr>
<td>Nagłówki / Stopki / Numery stron</td>
<td class="iron-col">HTML/Tekst/Obraz <span class="winner-tag">Najlepsze</span></td>
<td>Ograniczone</td>
<td>Tak</td>
<td>Przez wydarzenia</td>
<td>Przez wydarzenia</td>
<td>Tak</td>
<td>Szablony</td>
<td>Podręcznik</td>
<td>Tylko ręcznie</td>
<td><span class="chip chip-full">Slot najwyższej klasy</span></td>
</tr>
<tr>
<td>Znakowanie wodne i pieczętowanie</td>
<td class="iron-col"><span class="chip chip-full">Tekst & Obraz</span></td>
<td><span class="chip chip-no">Nie</span></td>
<td><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-partial">Ograniczone</span></td>
<td><span class="chip chip-no">Nie</span></td>
<td><span class="chip chip-full">Tak (Nakładki)</span></td>
</tr>
<tr>
<td>Wyodrębnianie tekstu z plików PDF</td>
<td class="iron-col"><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-no">Nie</span></td>
<td><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-good">Podstawowe</span></td>
<td><span class="chip chip-no">Nie</span></td>
</tr>
<tr>
<td>OCR dla zeskanowanych PDF</td>
<td class="iron-col">Za pomocą IronOCR <span class="winner-tag">Zintegrowane</span></td>
<td><span class="chip chip-no">Nie</span></td>
<td><span class="chip chip-partial">Dodatek</span></td>
<td><span class="chip chip-partial">Osobny produkt</span></td>
<td><span class="chip chip-partial">Dodatek</span></td>
<td><span class="chip chip-partial">Dodatek</span></td>
<td><span class="chip chip-no">Nie</span></td>
<td><span class="chip chip-partial">Sposób obejścia</span></td>
<td><span class="chip chip-no">Nie</span></td>
<td><span class="chip chip-no">Nie</span></td>
</tr>
<tr class="section-row">
<td colspan="11">Bezpieczeństwo i zgodność</td>
</tr>
<tr>
<td>Podpisy cyfrowe</td>
<td class="iron-col"><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-no">Nie</span></td>
<td><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-good">Przykładowy kod</span></td>
<td><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-no">Nie</span></td>
<td><span class="chip chip-no">Nie</span></td>
<td><span class="chip chip-no">Nieudokumentowane</span></td>
</tr>
<tr>
<td>Zgodność z PDF/A</td>
<td class="iron-col"><span class="chip chip-full">Tak (PDF/A-3B)</span></td>
<td><span class="chip chip-no">Nie</span></td>
<td><span class="chip chip-full">Pełny PDF/A</span></td>
<td><span class="chip chip-full">Walidacja & Tworzenie</span></td>
<td><span class="chip chip-good">Wymaga natywnego SDK</span></td>
<td><span class="chip chip-good">Zgodność z PDFA</span></td>
<td><span class="chip chip-no">Nie</span></td>
<td><span class="chip chip-full">Tak</span></td>
<td><span class="chip chip-partial">Ograniczone</span></td>
<td><span class="chip chip-full">PDF/A-2x i 3x</span></td>
</tr>
<tr class="section-row">
<td colspan="11">Platformaa i doświadczenie deweloperskie</td>
</tr>
<tr>
<td>Wielopłatformowe</td>
<td class="iron-col">Windows · Linux · macOS <span class="winner-tag">Wszystkie 3</span></td>
<td>Zależy od binariów</td>
<td>.NET Standard 2.0</td>
<td>Dodatkowa konfiguracja Linuksa</td>
<td>Blink + Serwer .NET</td>
<td>SDK natywne</td>
<td>Tylko Windows *</td>
<td>Ograniczona dokumentacja Linuksa</td>
<td>Skoncentrowane na Windows</td>
<td><span class="chip chip-full">Win/Linux/macOS</span></td>
</tr>
<tr>
<td>Wdrożenie Cloud & Docker</td>
<td class="iron-col">Azure · AWS · Docker <span class="winner-tag">Najlepsze</span></td>
<td>Skomplikowane; Dziedziczne</td>
<td>Wiele pakietów</td>
<td>Częściowe; Kontenery</td>
<td>Potrzebne dodatki Blink</td>
<td>Natywne zależności</td>
<td>Tylko Windows</td>
<td>Ograniczone informacje</td>
<td>Proste; Lekki</td>
<td><span class="chip chip-full">Docker/K8s; Lokalnie</span></td>
</tr>
<tr class="section-row">
<td colspan="11">Wsparcie i dokumentacja</td>
</tr>
<tr>
<td>Dokumentacja</td>
<td class="iron-col">Obszerna + Kopiuj/Wklej <span class="winner-tag">Najlepsze</span></td>
<td>Częściowa dokumentacja CLI</td>
<td>Obszerna; KB</td>
<td>Szeroka; GitHub</td>
<td>Centrum pomocy</td>
<td>Katalog Cross-Language</td>
<td>Przewodniki na start</td>
<td>Przewodnik programowy</td>
<td>Przewodniki społecznościowe</td>
<td><span class="chip chip-full">Strukturalna + Aplikacja towarzysząca</span></td>
</tr>
<tr>
<td>Wsparcie dla deweloperów</td>
<td class="iron-col">24/7 Inżynierowie <span class="winner-tag">Najlepsze</span></td>
<td>Tylko społeczność</td>
<td>Subskrypcja wliczona</td>
<td>Forum + Płatne</td>
<td>24/5 Direct-Trac</td>
<td>Komercjalne</td>
<td>E-mail</td>
<td>Forum + E-mail</td>
<td>Tylko społeczność</td>
<td><span class="chip chip-partial">Społeczność + GitHub</span></td>
</tr>
<tr class="section-row">
<td colspan="11">Licencjonowanie i ceny</td>
</tr>
<tr>
<td>Model licencji</td>
<td class="iron-col"><span class="chip chip-iron">Wieczysta</span></td>
<td><span class="chip chip-free">Otwarto źródłowy</span></td>
<td><span class="chip chip-partial">AGPL / Subskrypcja</span></td>
<td><span class="chip chip-good">Wieczysta</span></td>
<td><span class="chip chip-partial">Subskrypcja roczna</span></td>
<td><span class="chip chip-partial">Dostosowane / Według zużycia</span></td>
<td><span class="chip chip-good">Wieczysta</span></td>
<td><span class="chip chip-good">Wieczysta</span></td>
<td><span class="chip chip-free">Darmowe (MIT)</span></td>
<td><span class="chip chip-free">MIT Darmowe / Płatne poziomy</span></td>
</tr>
<tr>
<td>Cena wyjściowa</td>
<td class="iron-col">
<span class="price-val iron-price">
<a href="https://ironpdf.com/licensing/">$liteLicense</a>
</span>
<span class="price-note">Wieczysta · 1 programista</span>
</td>
<td><span class="price-val" style="color:#16a34a">Darmowe</span></td>
<td>
<span class="price-val">~45 000 USD/rok</span>
<span class="price-note">Indywidualna wycena</span>
</td>
<td>
<span class="price-val">1 175 USD+</span>
<span class="price-note">Na programistę</span>
</td>
<td>
<span class="price-val">Custom Quote</span>
<span class="price-note">Free <M (Community)</span>
</td>
<td>
<span class="price-val">~9 000 USD+/rok</span>
<span class="price-note">Indywidualna wycena</span>
</td>
<td>
<span class="price-val">499 USD+</span>
<span class="price-note">Na czas nieokreślony</span>
</td>
<td>
<span class="price-val">9</span>
<span class="price-note">Wieczysta · aktualizacje przez 1 rok</span>
</td>
<td><span class="price-val" style="color:#16a34a">Darmowe</span></td>
<td>
<span class="price-val" style="color:#16a34a">Bezpłatne</span>
<span class="price-note">Społeczność MIT <1 mln USD</span>
</td>
</tr>
<tr>
<td>Bezpłatna wersja próbna</td>
<td class="iron-col">30 dni · Pełne funkcje <span class="winner-tag">Bez limitów</span></td>
<td>N/D (Darmowe)</td>
<td>30 dni</td>
<td>Tak (Z watermarkiem)</td>
<td>Community <$1M Rev</td>
<td>Tak</td>
<td>Wspólnota (5 stron)</td>
<td>Darmowe (10 stron)</td>
<td>N/D (Darmowe)</td>
<td>N/A (MIT Free <$1M)</td>
</tr>
<tr>
<td>Przejrzystość cenowa</td>
<td class="iron-col">Opublikowana & Jasna <span class="winner-tag">Najlepsze</span></td>
<td>Otwarto źródłowy</td>
<td><span class="chip chip-limited">Skomplikowane AGPL</span></td>
<td><span class="chip chip-partial">Wiele poziomów</span></td>
<td><span class="chip chip-good">Skontaktuj się po wycenę</span></td>
<td><span class="chip chip-limited">Brak opublikowanych cen</span></td>
<td><span class="chip chip-good">Opublikowana</span></td>
<td><span class="chip chip-good">Opublikowana</span></td>
<td>MIT; Bez ograniczeń</td>
<td>MIT; Oparte na zaufaniu</td>
</tr>
</tbody>
</table>
</div>
</div>
</details>
### Porównanie prawdziwego życia HTML do PDF: Renderowanie strony głównej Reddita
Aby ocenić jakość wyjściowego PDF, przetestowaliśmy te biblioteki na stronie głównej Reddita zawierającej dynamiczne treści webowe, nowoczesne CSS i elementy HTML JavaScript. Ta strona służy jako idealny przypadek testowy do generowania wyjściowego PDF.
https://www.reddit.com/

**IronPDF**

IronPDF dostarcza pixel-perfect wyniki, zachowując całą dynamiczną zawartość webową, stylizację nowoczesnych czcionek webowych i elementy interaktywne dokładnie tak, jak są wyświetlane w Chrome, wszystko w zaledwie kilku liniach kodu.
**Syncfusion**

Syncfusion wyrenderowało PDF z większością brakujących sekcji i stylizacji, szczególnie dynamicznej zawartości. Początkowo zablokowany przez zabezpieczenia Reddita. Osiągnięcie lepszych wyników wymaga obszernego dostosowania wiersza poleceń, ale wyjściowy wciąż jest niekompletny.
**Aspose.PDF**

Aspose.PDF wymagał ręcznego pobrania HTML na początku (brak obsługi bezpośredniego URL). Po konwersji wyjściowy brakował właściwego formatowania i prawie wszystkich sekcji zawartości, czyniąc go nieodpowiednim dla nowoczesnego webu z dynamiczną zawartością.
**wkhtmltopdf**

wkhtmltopdf zakończył szybko, ale wyprodukował czystą, statyczną stronę z brakującą istotną zawartością, jak aktualizacje na żywo, elementy dynamiczne i interaktywne sekcje. To pokazuje niekompatybilność wkhtmltopdf z nowoczesnymi stronami opartymi na JavaScript.
### Wnioski dotyczące wydajności i jakości wyjściowego PDF
.NET deweloperzy potrzebujący niezawodnego konwertera HTML do PDF, wybierają IronPDF ze względu na minimalny kod, łatwe w użyciu API i częste ulepszenia produktu.
W prawdziwym teście na treści webowej dostarczył najszybsze, najbardziej dokładne wyniki, podczas gdy Syncfusion pozostawało w tyle, Aspose wymagał dodatkowych kroków, a wkhtmltopdf brakowało nowoczesnych stylizacji. IronPDF oferuje najlepszą równowagę między szybkością, dokładnością i prostotą dla dzisiejszych procesów konwersji HTML do PDF.
[[i:(Aspose, Syncfusion i wkhtmltopdf są znakami towarowymi swoich odpowiednich właścicieli. Ta strona nie jest z nimi powiązana ani nie jest przez nie zatwierdzona. Wszystkie nazwy, logotypy i marki należą do ich właścicieli, a porównania są oparte na ogólnodostępnych informacjach w momencie pisania.)]]
### Podsumowanie
Ta instrukcja obejmowała wszystko, co potrzebne do konwersji HTML do PDF w .NET: od podstawowej konwersji ciągu do zaawansowanych funkcji, takich jak przetwarzanie asynchroniczne, cyfrowe podpisy i generowanie wsadowe. Demonstrowaliśmy trzy metody konwersji, niezbędne konfiguracje, zaawansowane funkcje i ustawienia bezpieczeństwa oraz porównaliśmy IronPDF z innymi bibliotekami poprzez testy w realnym świecie generowania dokumentów dynamicznych.
Podczas gdy konkurenci mieli problemy z nowoczesnymi stronami lub wymagały skomplikowanych obejść, IronPDF dostarczył nieskazitelne wyniki z minimalnym kodem i potężnym silnikiem renderowania.
Gotowy, aby uprościć swoje procesy PDF i doświadczyć wszechstronnej generacji PDF w zaledwie kilku liniach kodu? Zainstaluj IronPDF przez NuGet Pakiet Manager (lub wybierz Zarządzaj pakietem NuGet w Visual Studio) i skonwertuj swój pierwszy HTML do PDF już dziś.
[Rozpocznij darmowy 30-dniowy okres próbny](/licensing/) dla testów produkcyjnych bez znaków wodnych. [Elastyczne licencjonowanie](/licensing/) zaczyna się od `$liteLicense` z przejrzystym cenowaniem dla zespołów, które skalują się zgodnie z Twoimi potrzebami.
<a class="content-anchor" href="/licensing/">Zobacz licencjonowanie IronPDF <i class="fa-solid fa-arrow-right"></i></a>
## 6. Rozwiązywanie problemów i wsparcie techniczne
Masz problem z poniższymi błędami w konwersji HTML na PDF? IronPDF oferuje całodobowe wsparcie inżynieryjne przez czat na [https://ironpdf.com/](/)
### Szybkie Naprawy Najczęstszych Błędów
- Powolne pierwsze renderowanie? Normalne. Chrome inicjalizuje się w 2–3 sekundy, a następnie przyspiesza.
- Problemy z chmurą? Użyj co najmniej zasobów Azure B1 lub równoważnych.
- Brakujące zasoby? Ustaw ścieżki bazowe lub osadź jako base64.
- Brakujące elementy? Dodaj `RenderDelay` do wykonania JavaScriptu.
- Problemy z pamięcią podczas renderowania? Zaktualizuj do najnowszej wersji (v2026.6.1) dla poprawek w HTML do PDF, pieczątkach i nagłówkach/stopkach.
- Problemy z pola formularza (np. długie obszary tekstowe, checkboksy)? Naprawione w wersji v2025.7.17; zapewnij unikalne nazwy dla checkboksów.
- Zacinanie niestandardowych nagłówków/stopek lub uszkodzone znaki specjalne? Rozwiązane w wersji v2025.8.8; przetestuj zawijanie słów i metadane.
### Uzyskaj Pomoc od Inżynierów, Którzy Stworzyli IronPDF, 24/7
<ul>
<li><a class="content-anchor" href="/troubleshooting/engineering-request-pdf/">Kompleksowy przewodnik po rozwiązywaniu problemów <i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="mt-2 content-anchor" href="/troubleshooting/ironpdf-performance-assistance/">Strategie optymalizacji wydajności <i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="mt-2 content-anchor" href="/troubleshooting/engineering-request-pdf/">Wnioski o wsparcie inżynierskie <i class="fa-solid fa-arrow-right"></i></a></li>
<li><a class="mt-2 content-anchor" href="/troubleshooting/quick-ironpdf-troubleshooting/">Szybka lista kontrolna rozwiązywania problemów <i class="fa-solid fa-arrow-right"></i></a></li>
</ul>
*as-heading:2(Następne kroki)*
<div class="my-6 grid grid-cols-1 gap-4 pb-10 sm:grid-cols-2 lg:grid-cols-3">
<div class="group flex h-full flex-col gap-8 rounded-lg border border-[#E7EEF0] bg-white p-6 transition-all duration-200 hover:shadow-[0_4px_12px_0_rgb(24_24_24/0.08)]">
<span class="flex flex-col gap-4">
<span class="flex h-8 max-w-10 items-center justify-center text-[32px] text-[#678CB1]"><i class="fa-duotone fa-solid fa-graduation-cap"></i></span>
<span class="text-[15px]/[1.6] font-bold text-[#181818]">Jak scalić lub podzielić dokumenty PDF</span>
</span>
<a href="/how-to/headers-and-footers/" class="mt-auto flex items-center gap-2 text-sm/[1.4] font-bold text-[#2A95D5] no-underline transition-colors duration-200 group-hover:text-[#E01A59]">Zobacz jak-to <span class="inline-flex items-center transition-transform duration-200 group-hover:translate-x-1"><i class="fa-solid fa-arrow-right"></i></span></a>
</div>
<div class="group flex h-full flex-col gap-8 rounded-lg border border-[#E7EEF0] bg-white p-6 transition-all duration-200 hover:shadow-[0_4px_12px_0_rgb(24_24_24/0.08)]">
<span class="flex flex-col gap-4">
<span class="flex h-8 max-w-10 items-center justify-center text-[32px] text-[#678CB1]"><i class="fa-duotone fa-solid fa-graduation-cap"></i></span>
<span class="text-[15px]/[1.6] font-bold text-[#181818]">Jak dodać niestandardowe nagłówki i stopki do plików PDF</span>
</span>
<a href="/how-to/merge-or-split-pdfs/" class="mt-auto flex items-center gap-2 text-sm/[1.4] font-bold text-[#2A95D5] no-underline transition-colors duration-200 group-hover:text-[#E01A59]">Zobacz jak-to <span class="inline-flex items-center transition-transform duration-200 group-hover:translate-x-1"><i class="fa-solid fa-arrow-right"></i></span></a>
</div>
<div class="group flex h-full flex-col gap-8 rounded-lg border border-[#E7EEF0] bg-white p-6 transition-all duration-200 hover:shadow-[0_4px_12px_0_rgb(24_24_24/0.08)]">
<span class="flex flex-col gap-4">
<span class="flex h-8 max-w-10 items-center justify-center text-[32px] text-[#678CB1]"><i class="fa-duotone fa-solid fa-graduation-cap"></i></span>
<span class="text-[15px]/[1.6] font-bold text-[#181818]">Jak zaciemniać tekst i regiony w PDF</span>
</span>
<a href="/how-to/redact-text/" class="mt-auto flex items-center gap-2 text-sm/[1.4] font-bold text-[#2A95D5] no-underline transition-colors duration-200 group-hover:text-[#E01A59]">Zobacz jak-to <span class="inline-flex items-center transition-transform duration-200 group-hover:translate-x-1"><i class="fa-solid fa-arrow-right"></i></span></a>
</div>
</div>
<div class="tutorials-navigation">
<a href="/how-to/create-new-pdfs/" class="tutorials-navigation__cta tutorials-navigation__cta--left"><i class="fa-solid fa-chevron-left"></i>Creating PDFs in C#</a>
<a href="/tutorials/csharp-edit-pdf-complete-tutorial/" class="tutorials-navigation__cta tutorials_navigation__cta--right">Editing PDFs in C#<i class="fa-solid fa-arrow-right"></i></a>
</div>
Konwertowanie HTML na PDF w C# wydaje się proste, dopóki rzeczywiste projekty nie osiągną ograniczeń renderowania, wdrożenia i skalowalności. Ten przewodnik pokazuje, jak to zrobić niezawodnie z silnikiem Chromium IronPDF, zaczynając od działającego kodu, który można uruchomić w mniej niż minutę. Jeśli wciąż wybierasz narzędzie, porównaj wszystkie biblioteki C# HTML do PDF najpierw.
Skrócona instrukcja: Przewodnik szybkiego startu, jak przekonwertować HTML na PDF
Możesz łatwo przekonwertować HTML na PDF w C# używając biblioteki IronPDF, która zapewnia metodę ChromePdfRenderer.RenderHtmlAsPdf do tworzenia wysokiej jakości plików PDF z HTML, CSS i JavaScript.
Po zakupie lub zarejestrowaniu się na 30-dniowy okres próbny IronPDF, znajdź klucz licencyjny wysłany na twój e-mail. Dodaj klucz licencyjny na początku swojej aplikacji.
Cały kod w tym przewodniku był zweryfikowany w IronPDF v2026.6.1 · .NET 10 · czerwiec 2026.
Dlaczego programiści .NET potrzebują konwertera HTML na PDF dla C#
IronPDF korzysta z wbudowanego mechanizmu renderującego Google Chromium, aby zapewnić wysoką wierność konwersji, dokładnie zachowując układ i stylizację treści webowych.
✅ Solidny silnik renderowania Chrome: używa silnika Blink Chrome'a do dokładnej konwersji HTML na PDF.
✅ Dokładność na poziomie pikseli: generowane PDF odpowiadają precyzyjnie stronie internetowej, a nie wersji przyjaznej dla druku.
✅ Pełne wsparcie dla nowoczesnej sieci: pełna obsługa CSS3, HTML5 i JavaScript dla wszystkich elementów HTML.
✅ Wzrost wydajności o 5-20x: znacznie szybszy niż automatyzacja przeglądarki lub sterowniki sieciowe.
Zwróć uwagę: Najnowsze w wersji v2026.6.1 (czerwiec 2026): automatyczne zakładki PDF generowane z nagłówków HTML podczas renderowania, pełna liniaryzacja PDF w pamięci dla środowisk chmurowych i izolowanych, cyfrowe podpisy ECDSA z inspekcją certyfikatu podpisującego, klikalne adnotacje z linkami oraz mniejsze, wzmocnione obrazy Linux i Docker. Zobacz pełną listę zmian, aby uzyskać kompletną historię wydania.
IronPDF upraszcza proces dla programistów .NET, oferując prostą i wydajną metodę generowania profesjonalnie wyglądających dokumentów PDF z HTML aplikacji webowych. Od faktur i raportów po certyfikaty i archiwa, programiści mogą korzystać z dobrze znanej stosu webowego, podczas gdy IronPDF obsługuje złożoność w zaledwie kilku linijkach kodu.
Niezależnie od tego, czy pracujesz z stringami HTML, URL-ami, czy plikami HTML, IronPDF oferuje elastyczne opcje generowania wysokiej jakości dokumentów PDF spełniających twoje konkretne wymagania.
W tym tutorialu przeprowadzimy cię przez najczęstsze scenariusze, w tym konwersję stringu HTML na PDF, URL-a na PDF, i pliku HTML na PDF. Ponadto, IronPDF oferuje również różnorodne operacje manipulacji dokumentami PDF:
Najbardziej podstawową operacją jest konwersja stringu HTML na PDF. Ta metoda jest doskonała dla dynamicznie generowanych treści HTML. Metoda RenderHtmlAsPdf w pełni wspiera HTML5, CSS3, JavaScript i obrazy podczas konwersji HTML na PDF bezpośrednio.
using IronPdf;// Create the Chrome renderervar renderer = new ChromePdfRenderer();// Convert HTML string to PDFvar pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>");// Save the PDFpdf.SaveAs("output.pdf");
using IronPdf;
// Create the Chrome renderer
var renderer = new ChromePdfRenderer();
// Convert HTML string to PDF
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>");
// Save the PDF
pdf.SaveAs("output.pdf");
ImportsIronPdf' Create the Chrome rendererDim renderer As New ChromePdfRenderer()' Convert HTML string to PDFDim pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>")' Save the PDFpdf.SaveAs("output.pdf")
Imports IronPdf
' Create the Chrome renderer
Dim renderer As New ChromePdfRenderer()
' Convert HTML string to PDF
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>")
' Save the PDF
pdf.SaveAs("output.pdf")
Zweryfikowane na IronPDF v2026.6.1 · .NET 10 · czerwiec 2026.
Wynik
Uruchom powyższy fragment, a IronPDF zwróci jednostronicowy PDF zawierający dokładnie nagłówek, który podałeś, najprostszą możliwą renderowania:
Wydajność
Wydajność konwersji IronPDF do formatu PDF z ciągów znaków, adresów URL i kodu HTML została zmierzona przy użyciu laptopa Lenovo z 16 GB pamięci RAM. Dokument testowy to 3-stronicowa faktura dla Enterprise, zawierająca standardowy CSS Grid, gradienty i tabele wielosekcyjne.
Wyniki są następujące:
Metryka
Wartość
Średni czas renderowania
~486 ms
Pamięć na render
~3,6 MB
Pomiar przeprowadzono na podstawie 5 kolejnych renderowań na 16-rdzeniowej stacji roboczej (Windows 11, .NET 8). Pierwsze wywołanie obejmuje również jednorazową inicjalizację silnika Chromium (~1,3 s)
Kiedy po raz pierwszy uruchomiłem test, renderowanie przebiegało bardzo wolno (ponad sekundę na każde wywołanie!). Po przyjrzeniu się sytuacji zdałem sobie sprawę, że miałem uruchomionych kilka instancji Chromium i korzystałem z zasilania bateryjnego, co uniemożliwiało bibliotece wykazanie się prawdziwą prędkością. Po zamknięciu konkurencyjnych procesów i podłączeniu się sytuacja uległa poprawie: średni czas działania w trybie warm run wyniósł ~486 ms, a najszybszy wynik to około 473 ms.
Porady: Niedawne aktualizacje naprawiają problemy z znakami specjalnymi/emoji w metadanych HTML i zapewniają lepsze zarządzanie polami formularzy html, w tym chińskimi znakami na Linuxie. Testuj dynamiczną zawartość za pomocą EnableJavaScript = true dla optymalnych wyników.
Gdy ciąg HTML odwołuje się do lokalnych zasobów, takich jak obrazy czy arkusze stylów, użyj parametru baseUrlOrPath, aby właściwie przekonwertować zawartość HTML z wszystkimi zasobami:
using IronPdf;var renderer = new ChromePdfRenderer();// Convert HTML content with local image and CSS referencesstring html = @" <link rel='stylesheet' href='styles.css'> <img src='logo.png' alt='Company Logo'> <h1>Company Report</h1> <p>Annual report content...</p>";// Set base path for resolving relative URLs in HTML to PDF conversionvar pdf = renderer.RenderHtmlAsPdf(html, @"C:\MyProject\Assets\");pdf.SaveAs("report.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Convert HTML content with local image and CSS references
string html = @"
<link rel='stylesheet' href='styles.css'>
<img src='logo.png' alt='Company Logo'>
<h1>Company Report</h1>
<p>Annual report content...</p>";
// Set base path for resolving relative URLs in HTML to PDF conversion
var pdf = renderer.RenderHtmlAsPdf(html, @"C:\MyProject\Assets\");
pdf.SaveAs("report.pdf");
ImportsIronPdfDim renderer As New ChromePdfRenderer()' Convert HTML content with local image and CSS referencesDim html AsString = " <link rel='stylesheet' href='styles.css'> <img src='logo.png' alt='Company Logo'> <h1>Company Report</h1> <p>Annual report content...</p>"' Set base path for resolving relative URLs in HTML to PDF conversionDim pdf = renderer.RenderHtmlAsPdf(html, "C:\MyProject\Assets\")pdf.SaveAs("report.pdf")
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' Convert HTML content with local image and CSS references
Dim html As String = "
<link rel='stylesheet' href='styles.css'>
<img src='logo.png' alt='Company Logo'>
<h1>Company Report</h1>
<p>Annual report content...</p>"
' Set base path for resolving relative URLs in HTML to PDF conversion
Dim pdf = renderer.RenderHtmlAsPdf(html, "C:\MyProject\Assets\")
pdf.SaveAs("report.pdf")
Porady: baseUrlOrPath informuje IronPDF, gdzie znaleźć twoje pliki CSS, JavaScript i obrazy. Wszystkie względne ścieżki w twoim stringu HTML będą rozwiązywane w tym katalogu.
Ostrzeżenie: Jedną z kwestii, na którą należy zwrócić uwagę, i powodem, dla którego testowanie wyników jest ważne niezależnie od tego, jakiej biblioteki używasz do automatycznego generowania dokumentów, jest to, że dokument Enterprise może zawierać uszkodzone elementy lub brakujące zasoby, gdy odniesienia powracają do ustawień systemowych. IronPDF daje Ci parametr baseUrlOrPath, aby wskazać ścieżki względne na odpowiedni katalog, więc szybki test wyjścia przed dużą operacją jest zazwyczaj wszystkim, czego potrzebujesz, aby to wykryć.
Renderowanie całych stron internetowych do PDF z C# umożliwia zespołom oddzielenie projektu PDF od renderowania backendu. To podejście pozwala na konwersję dowolnego określonego URL bezpośrednio do formatu PDF.
Główna metoda to RenderUrlAsPdf, która pobiera żywą stronę i renderuje ją w jednym wywołaniu:
using IronPdf;// Create a PDF from any existing web pagevar renderer = new ChromePdfRenderer();var pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF");pdf.SaveAs("wikipedia.pdf");
using IronPdf;
// Create a PDF from any existing web page
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF");
pdf.SaveAs("wikipedia.pdf");
ImportsIronPdf' Create a PDF from any existing web pagePrivate renderer = New ChromePdfRenderer()Private pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF")pdf.SaveAs("wikipedia.pdf")
Imports IronPdf
' Create a PDF from any existing web page
Private renderer = New ChromePdfRenderer()
Private pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF")
pdf.SaveAs("wikipedia.pdf")
Wynik
Tutaj RenderUrlAsPdf przechwytuje artykuł z Wikipedii na żywo w statyczny, gotowy do druku PDF, z tekstem, obrazami, tabelkami i układem zachowanym na wszystkich 33 stronach:
CSS dla Drukowania vs Ekran
Możesz skonfigurować IronPDF do renderowania z użyciem dowolnego typu mediów CSS.
using IronPdf;using IronPdf.Rendering;// Initialize HTML to PDF convertervar renderer = new ChromePdfRenderer();// Configure CSS media type for rendering specified URLsrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;// Screen media type shows the entire web page as displayed on screen
using IronPdf;
using IronPdf.Rendering;
// Initialize HTML to PDF converter
var renderer = new ChromePdfRenderer();
// Configure CSS media type for rendering specified URLs
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
// Screen media type shows the entire web page as displayed on screen
ImportsIronPdfImportsIronPdf.Rendering' Initialize HTML to PDF converterDim renderer As New ChromePdfRenderer()' Configure CSS media type for rendering specified URLsrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print' Screen media type shows the entire web page as displayed on screen
Imports IronPdf
Imports IronPdf.Rendering
' Initialize HTML to PDF converter
Dim renderer As New ChromePdfRenderer()
' Configure CSS media type for rendering specified URLs
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
' Screen media type shows the entire web page as displayed on screen
Wsparcie JavaScript
IronPDF w pełni obsługuje JavaScript, jQuery, a nawet AJAX podczas konwersji HTML na PDF. Dla dynamicznych treści HTML możesz skonfigurować IronPDF, aby czekał na zakończenie JavaScript przed renderowaniem stron webowych w PDF. Jest to idealne dla jednorożnych aplikacji internetowych i dynamicznych witryn.
using IronPdf;// Configure JavaScript rendering for dynamic HTML content to PDFvar renderer = new ChromePdfRenderer();// Enable JavaScript execution during PDF generationrenderer.RenderingOptions.EnableJavaScript = true;// WaitFor.RenderDelay pauses before capturing the HTMLrenderer.RenderingOptions.WaitFor.RenderDelay(500); // milliseconds
using IronPdf;
// Configure JavaScript rendering for dynamic HTML content to PDF
var renderer = new ChromePdfRenderer();
// Enable JavaScript execution during PDF generation
renderer.RenderingOptions.EnableJavaScript = true;
// WaitFor.RenderDelay pauses before capturing the HTML
renderer.RenderingOptions.WaitFor.RenderDelay(500); // milliseconds
ImportsIronPdf' Configure JavaScript rendering for dynamic HTML content to PDFDim renderer As New ChromePdfRenderer()' Enable JavaScript execution during PDF generationrenderer.RenderingOptions.EnableJavaScript = True' WaitFor.RenderDelay pauses before capturing the HTMLrenderer.RenderingOptions.WaitFor.RenderDelay(500) ' milliseconds
Imports IronPdf
' Configure JavaScript rendering for dynamic HTML content to PDF
Dim renderer As New ChromePdfRenderer()
' Enable JavaScript execution during PDF generation
renderer.RenderingOptions.EnableJavaScript = True
' WaitFor.RenderDelay pauses before capturing the HTML
renderer.RenderingOptions.WaitFor.RenderDelay(500) ' milliseconds
Wykonywanie JavaScriptu można również zobaczyć przy renderowaniu zaawansowanej wizualizacji d3.js z witryny do PDF.
using IronPdf;// Create renderer for JavaScript-heavy HTMLvar renderer = new ChromePdfRenderer();// Convert d3.js visualization web page to PDFvar pdf = renderer.RenderUrlAsPdf("https://observablehq.com/@d3/chord-diagram");// Save the interactive chart as static PDFpdf.SaveAs("chart.pdf");
using IronPdf;
// Create renderer for JavaScript-heavy HTML
var renderer = new ChromePdfRenderer();
// Convert d3.js visualization web page to PDF
var pdf = renderer.RenderUrlAsPdf("https://observablehq.com/@d3/chord-diagram");
// Save the interactive chart as static PDF
pdf.SaveAs("chart.pdf");
ImportsIronPdf' Create renderer for JavaScript-heavy HTMLDim renderer As New ChromePdfRenderer()' Convert d3.js visualization web page to PDFDim pdf = renderer.RenderUrlAsPdf("https://observablehq.com/@d3/chord-diagram")' Save the interactive chart as static PDFpdf.SaveAs("chart.pdf")
Imports IronPdf
' Create renderer for JavaScript-heavy HTML
Dim renderer As New ChromePdfRenderer()
' Convert d3.js visualization web page to PDF
Dim pdf = renderer.RenderUrlAsPdf("https://observablehq.com/@d3/chord-diagram")
' Save the interactive chart as static PDF
pdf.SaveAs("chart.pdf")
Zweryfikowane na IronPDF v2026.6.1 · .NET 10 · czerwiec 2026.
CSS Responsywny
Ponieważ responsywne strony internetowe są projektowane do oglądania w przeglądarce, a IronPDF nie otwiera prawdziwego okna przeglądarki w systemie operacyjnym serwera, elementy HTML mogą być renderowane w najmniejszym możliwym rozmiarze. PdfCssMediaType.Print jest zalecana, aby poradzić sobie z tym problemem podczas renderowania całych stron internetowych.
// Configure for optimal responsive design handling in HTML to PDFrenderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
// Configure for optimal responsive design handling in HTML to PDF
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
Konwersja lokalnych plików HTML na PDF zachowuje wszystkie względne zasoby, w tym CSS, obrazy i JavaScript, jakby były otwarte przy użyciu protokołu file://. Metoda ta jest najlepsza do konwersji szablonów lub wstępnie zaprojektowanych stron HTML na dokumenty PDF.
using IronPdf;// Initialize ChromePdfRenderer for HTML file conversionvar renderer = new ChromePdfRenderer();// Convert HTML file to PDF documents// Preserves all relative paths and linked resources in HTMLvar pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html");// Save the HTML file as PDF pdf.SaveAs("Invoice.pdf");// All CSS, JavaScript, and images load correctly in the generated PDF
using IronPdf;
// Initialize ChromePdfRenderer for HTML file conversion
var renderer = new ChromePdfRenderer();
// Convert HTML file to PDF documents
// Preserves all relative paths and linked resources in HTML
var pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html");
// Save the HTML file as PDF
pdf.SaveAs("Invoice.pdf");
// All CSS, JavaScript, and images load correctly in the generated PDF
ImportsIronPdf' Initialize ChromePdfRenderer for HTML file conversionDim renderer As New ChromePdfRenderer()' Convert HTML file to PDF documents' Preserves all relative paths and linked resources in HTMLDim pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html")' Save the HTML file as PDF pdf.SaveAs("Invoice.pdf")' All CSS, JavaScript, and images load correctly in the generated PDF
Imports IronPdf
' Initialize ChromePdfRenderer for HTML file conversion
Dim renderer As New ChromePdfRenderer()
' Convert HTML file to PDF documents
' Preserves all relative paths and linked resources in HTML
Dim pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html")
' Save the HTML file as PDF
pdf.SaveAs("Invoice.pdf")
' All CSS, JavaScript, and images load correctly in the generated PDF
Zweryfikowane na IronPDF v2026.6.1 · .NET 10 · czerwiec 2026.
Wynik
Wskaż RenderHtmlFileAsPdf na szablon faktury HTML, a cały design pliku (logo, tabelka z pozycjami, sumy) zostanie odwzorowany doskonale, bez dodatkowego kodu po Twojej stronie:
Wydajność
Wydajność została ponownie zmierzona przy stałych zmiennych podczas renderowania poprzedniej 3-stronicowej faktury dla Enterprise z pliku na dysku:
Metryka
Wartość
Średni czas renderowania
~502 ms
Pamięć na render
~3,1 MB
Pomiar przeprowadzono na podstawie 5 kolejnych renderowań na tej samej stacji roboczej z 16-rdzeniowym procesorem (Windows 11, .NET 8). Renderowanie oparte na plikach odpowiada renderowaniu ciągów znaków w pamięci z dokładnością do około 3%; odczytanie kodu HTML z dysku nie powoduje żadnego wymiernego obciążenia.
Porady: Zachowaj swoje pliki HTML w osobnym folderze z ich zasobami (CSS, obrazy), aby edytować i testować w przeglądarce przed konwersją pliku HTML na PDF. To zapewnia, że twoje HTML renderuje się perfekcyjnie dla wysokiej jakości dokumentów PDF.
Jeśli twój projekt ASP.NET Core już używa stron Razor, możesz je bezpośrednio przekonwertować na PDF bez przebudowywania HTML. Rozszerzenie Razor IronPDF dodaje metodę RenderRazorToPdf, która pobiera Twoją stronę .cshtml (uzupełnioną o model i układ) i renderuje ją jako dokument PDF w jednym wywołaniu.
> Install-Pakiet IronPdf.Extensions.Razor
Install-Pakiet IronPdf.Extensions.Razor
using IronPdf;using Microsoft.AspNetCore.Mvc;using Microsoft.AspNetCore.Mvc.RazorPages;public class ReportModel : PageModel{ public IActionResultOnGet() { var renderer = new ChromePdfRenderer(); // Render a Razor Page directly to PDF PdfDocument pdf = renderer.RenderRazorToPdf(this);Response.Headers.Add("Content-Disposition", "inline"); return new FileContentResult(pdf.BinaryData, "application/pdf"); }}
using IronPdf;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
public class ReportModel : PageModel
{
public IActionResult OnGet()
{
var renderer = new ChromePdfRenderer();
// Render a Razor Page directly to PDF
PdfDocument pdf = renderer.RenderRazorToPdf(this);
Response.Headers.Add("Content-Disposition", "inline");
return new FileContentResult(pdf.BinaryData, "application/pdf");
}
}
ImportsIronPdfImportsMicrosoft.AspNetCore.MvcImportsMicrosoft.AspNetCore.Mvc.RazorPagesPublic Class ReportModelInheritsPageModel Public Function OnGet() AsIActionResult Dim renderer As New ChromePdfRenderer() ' Render a Razor Page directly to PDF Dim pdf AsPdfDocument = renderer.RenderRazorToPdf(Me) Response.Headers.Add("Content-Disposition", "inline") Return New FileContentResult(pdf.BinaryData, "application/pdf") End FunctionEnd Class
Imports IronPdf
Imports Microsoft.AspNetCore.Mvc
Imports Microsoft.AspNetCore.Mvc.RazorPages
Public Class ReportModel
Inherits PageModel
Public Function OnGet() As IActionResult
Dim renderer As New ChromePdfRenderer()
' Render a Razor Page directly to PDF
Dim pdf As PdfDocument = renderer.RenderRazorToPdf(Me)
Response.Headers.Add("Content-Disposition", "inline")
Return New FileContentResult(pdf.BinaryData, "application/pdf")
End Function
End Class
Zwróć uwagę: RenderRazorToPdf wymaga projektu ASP.NET Core Web App. Nie będzie działać w aplikacjach konsolowych ani bibliotekach klas; silnik widoków Razor musi być dostępny w kanale hostingu.
Zespoły używające wzorca MVC mogą generować PDF-y bezpośrednio z swoich istniejących Widoków i kontrolerów. Zainstaluj pakiet rozszerzeń MVC Core, a następnie wywołaj RenderRazorViewToPdf z Twoją ścieżką widoku i modelem; IronPDF obsługuje kanał renderowania Razor i wypuszcza gotowy PDF.
Jest to szczególnie przydatne dla raportów, faktur i wszelkich stron, gdzie HTML już został zaprojektowany i przetestowany w przeglądarce. Generowany PDF zachowuje pełną treść Widoku, włącznie z stronami układu i widokami cząstkowymi.
> Install-Pakiet IronPdf.Extensions.Mvc.Core
Install-Pakiet IronPdf.Extensions.Mvc.Core
Najpierw zarejestruj usługę IRazorViewRenderer w swoim Program.cs, aby Twoje kontrolery mogły ją wstrzykiwać:
using IronPdf.Extensions.Mvc.Core;var builder = WebApplication.CreateBuilder(args);builder.Services.AddControllersWithViews();// Register the Razor view renderer for IronPDFbuilder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();builder.Services.AddSingleton<IRazorViewRenderer, RazorViewRenderer>();
using IronPdf.Extensions.Mvc.Core;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
// Register the Razor view renderer for IronPDF
builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
builder.Services.AddSingleton<IRazorViewRenderer, RazorViewRenderer>();
ImportsIronPdf.Extensions.Mvc.CoreDim builder = WebApplication.CreateBuilder(args)builder.Services.AddControllersWithViews()' Register the Razor view renderer for IronPDFbuilder.Services.AddSingleton(OfIHttpContextAccessor, HttpContextAccessor)()builder.Services.AddSingleton(OfIRazorViewRenderer, RazorViewRenderer)()
Imports IronPdf.Extensions.Mvc.Core
Dim builder = WebApplication.CreateBuilder(args)
builder.Services.AddControllersWithViews()
' Register the Razor view renderer for IronPDF
builder.Services.AddSingleton(Of IHttpContextAccessor, HttpContextAccessor)()
builder.Services.AddSingleton(Of IRazorViewRenderer, RazorViewRenderer)()
Następnie w działaniu kontrolera wstrzyknij renderer i przekonwertuj dowolny widok na PDF:
using IronPdf;using IronPdf.Extensions.Mvc.Core;using Microsoft.AspNetCore.Mvc;public class ReportController : Controller{ private readonly IRazorViewRenderer _viewRenderService; // Inject the view renderer via constructor publicReportController(IRazorViewRenderer viewRenderService) { _viewRenderService = viewRenderService; } public IActionResultDownload() { var reportModel = new { Title = "Quarterly Report", Total = 1250.00 }; var renderer = new ChromePdfRenderer(); // Render an MVC View with model data to PDF PdfDocument pdf = renderer.RenderRazorViewToPdf( _viewRenderService, "Views/Home/Report.cshtml", reportModel);Response.Headers.Add("Content-Disposition", "inline"); return new FileContentResult(pdf.BinaryData, "application/pdf"); }}
using IronPdf;
using IronPdf.Extensions.Mvc.Core;
using Microsoft.AspNetCore.Mvc;
public class ReportController : Controller
{
private readonly IRazorViewRenderer _viewRenderService;
// Inject the view renderer via constructor
public ReportController(IRazorViewRenderer viewRenderService)
{
_viewRenderService = viewRenderService;
}
public IActionResult Download()
{
var reportModel = new { Title = "Quarterly Report", Total = 1250.00 };
var renderer = new ChromePdfRenderer();
// Render an MVC View with model data to PDF
PdfDocument pdf = renderer.RenderRazorViewToPdf(
_viewRenderService, "Views/Home/Report.cshtml", reportModel);
Response.Headers.Add("Content-Disposition", "inline");
return new FileContentResult(pdf.BinaryData, "application/pdf");
}
}
ImportsIronPdfImportsIronPdf.Extensions.Mvc.CoreImportsMicrosoft.AspNetCore.MvcPublic Class ReportControllerInheritsController PrivateReadOnly _viewRenderService AsIRazorViewRenderer ' Inject the view renderer via constructor Public Sub New(viewRenderService AsIRazorViewRenderer) _viewRenderService = viewRenderService End Sub Public Function Download() AsIActionResult Dim reportModel = New With {.Title = "Quarterly Report", .Total = 1250.0} Dim renderer = New ChromePdfRenderer() ' Render an MVC View with model data to PDF Dim pdf AsPdfDocument = renderer.RenderRazorViewToPdf(_viewRenderService, "Views/Home/Report.cshtml", reportModel) Response.Headers.Add("Content-Disposition", "inline") Return New FileContentResult(pdf.BinaryData, "application/pdf") End FunctionEnd Class
Imports IronPdf
Imports IronPdf.Extensions.Mvc.Core
Imports Microsoft.AspNetCore.Mvc
Public Class ReportController
Inherits Controller
Private ReadOnly _viewRenderService As IRazorViewRenderer
' Inject the view renderer via constructor
Public Sub New(viewRenderService As IRazorViewRenderer)
_viewRenderService = viewRenderService
End Sub
Public Function Download() As IActionResult
Dim reportModel = New With {.Title = "Quarterly Report", .Total = 1250.0}
Dim renderer = New ChromePdfRenderer()
' Render an MVC View with model data to PDF
Dim pdf As PdfDocument = renderer.RenderRazorViewToPdf(_viewRenderService, "Views/Home/Report.cshtml", reportModel)
Response.Headers.Add("Content-Disposition", "inline")
Return New FileContentResult(pdf.BinaryData, "application/pdf")
End Function
End Class
Czy potrzebujesz, aby Twoja dynamiczna strona internetowa została zachowana i przekonwertowana do PDF, zachowując dokładny układ i formatowanie? Nie szukaj dalej niż IronPDF, które szybko konwertuje różnorodne popularne frameworki dynamicznych stron internetowych do PDF.
PDF ze stron ASPX
Oto krótki fragment kodu dotyczący konwersji stron ASPX jako PDF w Active Server Pages.
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using IronPdf;namespace AspxToPdfTutorial{ public partial class Invoice : System.Web.UI.Page { protected voidPage_Load(object sender, EventArgs e) {IronPdf.AspxToPdf.RenderThisPageAsPdf(IronPdf.AspxToPdf.FileBehavior.InBrowser); } }}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using IronPdf;
namespace AspxToPdfTutorial
{
public partial class Invoice : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
IronPdf.AspxToPdf.RenderThisPageAsPdf(IronPdf.AspxToPdf.FileBehavior.InBrowser);
}
}
}
ImportsSystemImportsSystem.Collections.GenericImportsSystem.LinqImportsSystem.WebImportsSystem.Web.UIImportsSystem.Web.UI.WebControlsImportsIronPdfNamespaceAspxToPdfTutorialPartialPublic Class InvoiceInheritsSystem.Web.UI.PageProtected Sub Page_Load(ByVal sender AsObject, ByVal e AsEventArgs)IronPdf.AspxToPdf.RenderThisPageAsPdf(IronPdf.AspxToPdf.FileBehavior.InBrowser) End Sub End ClassEndNamespace
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports IronPdf
Namespace AspxToPdfTutorial
Partial Public Class Invoice
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
IronPdf.AspxToPdf.RenderThisPageAsPdf(IronPdf.AspxToPdf.FileBehavior.InBrowser)
End Sub
End Class
End Namespace
Szczegółowe wyjaśnienie tego fragmentu kodu i eksplorowanie jego dodatkowych funkcji znajdziesz w naszym kompleksowym przewodniku.
XAML do PDF (MAUI)
Dla deweloperów szukających budowy aplikacji międzyplatformowych, .NET MAUI jest popularnym wyborem. IronPDF w pełni obsługuje konwersję XAML do PDF w kilku krokach.
using IronPdf.Extensions.Maui;namespace mauiSample;public partial class MainPage : ContentPage{ publicMainPage() {InitializeComponent(); } private voidPrintToPdf(object sender, EventArgs e) { ChromePdfRenderer renderer = new ChromePdfRenderer(); // Apply HTML header renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter() {HtmlFragment = "<h1>Header</h1>", }; // Render PDF from Maui Page PdfDocument pdf = renderer.RenderContentPageToPdf<MainPage, App>().Result; pdf.SaveAs(@"C:\Users\lyty1\Downloads\contentPageToPdf.pdf"); }}
using IronPdf.Extensions.Maui;
namespace mauiSample;
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
private void PrintToPdf(object sender, EventArgs e)
{
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Apply HTML header
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
HtmlFragment = "<h1>Header</h1>",
};
// Render PDF from Maui Page
PdfDocument pdf = renderer.RenderContentPageToPdf<MainPage, App>().Result;
pdf.SaveAs(@"C:\Users\lyty1\Downloads\contentPageToPdf.pdf");
}
}
ImportsIronPdf.Extensions.MauiNamespace mauiSamplePartialPublic Class MainPageInheritsContentPage Public Sub New()InitializeComponent() End Sub Private Sub PrintToPdf(ByVal sender AsObject, ByVal e AsEventArgs) Dim renderer As New ChromePdfRenderer() ' Apply HTML header renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {.HtmlFragment = "<h1>Header</h1>"} ' Render PDF from Maui Page Dim pdf AsPdfDocument = renderer.RenderContentPageToPdf(OfMainPage, App)().Result pdf.SaveAs("C:\Users\lyty1\Downloads\contentPageToPdf.pdf") End Sub End ClassEndNamespace
Imports IronPdf.Extensions.Maui
Namespace mauiSample
Partial Public Class MainPage
Inherits ContentPage
Public Sub New()
InitializeComponent()
End Sub
Private Sub PrintToPdf(ByVal sender As Object, ByVal e As EventArgs)
Dim renderer As New ChromePdfRenderer()
' Apply HTML header
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {.HtmlFragment = "<h1>Header</h1>"}
' Render PDF from Maui Page
Dim pdf As PdfDocument = renderer.RenderContentPageToPdf(Of MainPage, App)().Result
pdf.SaveAs("C:\Users\lyty1\Downloads\contentPageToPdf.pdf")
End Sub
End Class
End Namespace
Szczegółowe wyjaśnienie tego fragmentu kodu i eksplorowanie jego dodatkowych funkcji znajdziesz w naszym kompleksowym przewodniku.
Generuj raporty PDF
Kiedy chodzi o generowanie raportów PDF, dokładne wymiary i format są kluczowe. W ten sposób, IronPDF pozwala na płynne generowanie PDF w zaledwie kilku krokach.
using IronPdf;ChromePdfRenderer renderer = new ChromePdfRenderer();renderer.RenderHtmlFileAsPdf("report.html").SaveAs("report.pdf");
using IronPdf;
ChromePdfRenderer renderer = new ChromePdfRenderer();
renderer.RenderHtmlFileAsPdf("report.html").SaveAs("report.pdf");
ImportsIronPdfPrivate renderer As New ChromePdfRenderer()renderer.RenderHtmlFileAsPdf("report.html").SaveAs("report.pdf")
Imports IronPdf
Private renderer As New ChromePdfRenderer()
renderer.RenderHtmlFileAsPdf("report.html").SaveAs("report.pdf")
Szczegółowe wyjaśnienie tego fragmentu kodu i eksplorowanie jego dodatkowych funkcji znajdziesz w naszym kompleksowym przewodniku.
Twórz PDF-y na serwerach Blazor
IronPDF obsługuje .NET 6, a ponieważ obejmuje typy projektów, takie jak Blazor, ten fragment kodu dostarcza krótkiego przykładu, jak tworzyć PDF-y na serwerach Blazor.
@code { // Model to bind user input private InputHTMLModel _InputMsgModel = new InputHTMLModel(); private async TaskSubmitHTML() { // Set your IronPDF license keyIronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01"; // Create a renderer to convert HTML to PDF var render = new IronPdf.ChromePdfRenderer(); // Render the HTML input into a PDF document var doc = render.RenderHtmlAsPdf(_InputMsgModel.HTML); var fileName = "iron.pdf"; // Create a stream reference for the PDF content using var streamRef = new DotNetStreamReference(stream: doc.Stream); // Invoke JavaScript function to download the PDF in the browser awaitJS.InvokeVoidAsync("SubmitHTML", fileName, streamRef); } public class InputHTMLModel { public stringHTML { get; set; } = "My new message"; }}
@code {
// Model to bind user input
private InputHTMLModel _InputMsgModel = new InputHTMLModel();
private async Task SubmitHTML()
{
// Set your IronPDF license key
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";
// Create a renderer to convert HTML to PDF
var render = new IronPdf.ChromePdfRenderer();
// Render the HTML input into a PDF document
var doc = render.RenderHtmlAsPdf(_InputMsgModel.HTML);
var fileName = "iron.pdf";
// Create a stream reference for the PDF content
using var streamRef = new DotNetStreamReference(stream: doc.Stream);
// Invoke JavaScript function to download the PDF in the browser
await JS.InvokeVoidAsync("SubmitHTML", fileName, streamRef);
}
public class InputHTMLModel
{
public string HTML { get; set; } = "My new message";
}
}
codeIf True Then ' Model to bind user input privateInputHTMLModel _InputMsgModel = New InputHTMLModel()'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:' private async Task SubmitHTML()' {' ' Set your IronPDF license key' IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";'' ' Create a renderer to convert HTML to PDF' var render = New IronPdf.ChromePdfRenderer();'' ' Render the HTML input into a PDF document' var doc = render.RenderHtmlAsPdf(_InputMsgModel.HTML);'' var fileName = "iron.pdf";'' ' Create a stream reference for the PDF content' var streamRef = New DotNetStreamReference(stream: doc.Stream);'' ' Invoke JavaScript function to download the PDF in the browser' await JS.InvokeVoidAsync("SubmitHTML", fileName, streamRef);' }'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:' public class InputHTMLModel' {' public string HTML' {' get;' set;' } = "My new message";' }End If
code
If True Then
' Model to bind user input
private InputHTMLModel _InputMsgModel = New InputHTMLModel()
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
' private async Task SubmitHTML()
' {
' ' Set your IronPDF license key
' IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";
'
' ' Create a renderer to convert HTML to PDF
' var render = New IronPdf.ChromePdfRenderer();
'
' ' Render the HTML input into a PDF document
' var doc = render.RenderHtmlAsPdf(_InputMsgModel.HTML);
'
' var fileName = "iron.pdf";
'
' ' Create a stream reference for the PDF content
' var streamRef = New DotNetStreamReference(stream: doc.Stream);
'
' ' Invoke JavaScript function to download the PDF in the browser
' await JS.InvokeVoidAsync("SubmitHTML", fileName, streamRef);
' }
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
' public class InputHTMLModel
' {
' public string HTML
' {
' get;
' set;
' } = "My new message";
' }
End If
Szczegółowe wyjaśnienie tego fragmentu kodu i eksplorowanie jego dodatkowych funkcji znajdziesz w naszym kompleksowym przewodniku.
Razor do PDF (serwer Blazor)
Oprócz tworzenia PDF-ów w Blazor Servers, IronPDF obsługuje również generowanie dokumentów PDF z komponentów Razor wewnątrz strony Blazor. Ułatwiając tworzenie plików i stron PDF.
[Parameter]publicIEnumerable<PersonInfo> persons { get; set; }publicDictionary<string, object> Parameters { get; set; } = new Dictionary<string, object>();protected override async TaskOnInitializedAsync(){ persons = new List<PersonInfo> { new PersonInfo { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" }, new PersonInfo { Name = "Bob", Title = "Mr.", Description = "Software Engineer" }, new PersonInfo { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" } };}private async voidPrintToPdf(){ ChromePdfRenderer renderer = new ChromePdfRenderer(); // Apply text footer renderer.RenderingOptions.TextFooter = new TextHeaderFooter() {LeftText = "{date} - {time}",DrawDividerLine = true,RightText = "Page {page} of {total-pages}",Font = IronSoftware.Drawing.FontTypes.Arial,FontSize = 11 };Parameters.Add("persons", persons); // Render razor component to PDF PdfDocument pdf = renderer.RenderRazorComponentToPdf<Person>(Parameters);File.WriteAllBytes("razorComponentToPdf.pdf", pdf.BinaryData);}
[Parameter]
public IEnumerable<PersonInfo> persons { get; set; }
public Dictionary<string, object> Parameters { get; set; } = new Dictionary<string, object>();
protected override async Task OnInitializedAsync()
{
persons = new List<PersonInfo>
{
new PersonInfo { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
new PersonInfo { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
new PersonInfo { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
};
}
private async void PrintToPdf()
{
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Apply text footer
renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
{
LeftText = "{date} - {time}",
DrawDividerLine = true,
RightText = "Page {page} of {total-pages}",
Font = IronSoftware.Drawing.FontTypes.Arial,
FontSize = 11
};
Parameters.Add("persons", persons);
// Render razor component to PDF
PdfDocument pdf = renderer.RenderRazorComponentToPdf<Person>(Parameters);
File.WriteAllBytes("razorComponentToPdf.pdf", pdf.BinaryData);
}
<Parameter>Public Property persons AsIEnumerable(OfPersonInfo)Public Property ParametersAsDictionary(OfString, Object) = New Dictionary(OfString, Object)()ProtectedOverridesAsync Function OnInitializedAsync() AsTask persons = New List(OfPersonInfo) From { New PersonInfoWith {.Name = "Alice", .Title = "Mrs.", .Description = "Software Engineer"}, New PersonInfoWith {.Name = "Bob", .Title = "Mr.", .Description = "Software Engineer"}, New PersonInfoWith {.Name = "Charlie", .Title = "Mr.", .Description = "Software Engineer"} }End FunctionPrivateAsync Sub PrintToPdf() Dim renderer As New ChromePdfRenderer() ' Apply text footer renderer.RenderingOptions.TextFooter = New TextHeaderFooter() With { .LeftText = "{date} - {time}", .DrawDividerLine = True, .RightText = "Page {page} of {total-pages}", .Font = IronSoftware.Drawing.FontTypes.Arial, .FontSize = 11 }Parameters.Add("persons", persons) ' Render razor component to PDF Dim pdf AsPdfDocument = renderer.RenderRazorComponentToPdf(OfPerson)(Parameters)File.WriteAllBytes("razorComponentToPdf.pdf", pdf.BinaryData)End Sub
<Parameter>
Public Property persons As IEnumerable(Of PersonInfo)
Public Property Parameters As Dictionary(Of String, Object) = New Dictionary(Of String, Object)()
Protected Overrides Async Function OnInitializedAsync() As Task
persons = New List(Of PersonInfo) From {
New PersonInfo With {.Name = "Alice", .Title = "Mrs.", .Description = "Software Engineer"},
New PersonInfo With {.Name = "Bob", .Title = "Mr.", .Description = "Software Engineer"},
New PersonInfo With {.Name = "Charlie", .Title = "Mr.", .Description = "Software Engineer"}
}
End Function
Private Async Sub PrintToPdf()
Dim renderer As New ChromePdfRenderer()
' Apply text footer
renderer.RenderingOptions.TextFooter = New TextHeaderFooter() With {
.LeftText = "{date} - {time}",
.DrawDividerLine = True,
.RightText = "Page {page} of {total-pages}",
.Font = IronSoftware.Drawing.FontTypes.Arial,
.FontSize = 11
}
Parameters.Add("persons", persons)
' Render razor component to PDF
Dim pdf As PdfDocument = renderer.RenderRazorComponentToPdf(Of Person)(Parameters)
File.WriteAllBytes("razorComponentToPdf.pdf", pdf.BinaryData)
End Sub
Szczegółowe wyjaśnienie tego fragmentu kodu i eksplorowanie jego dodatkowych funkcji znajdziesz w naszym kompleksowym przewodniku.
CSHTML do PDF
Konwersja CSHTML (Razor) do PDF pozwala generować profesjonalne, gotowe do druku dokumenty bezpośrednio z aplikacji internetowych. Jest to przydatne dla faktur, raportów, umów lub treści dynamicznych. IronPDF wspiera Razor Pages, MVC Core i MVC Framework, a także rendering bez interfejsu, co czyni integrację generowania PDF w aplikacjach .NET bezproblemową, za pomocą zaledwie kilku linijek kodu.
CSHTML do PDF (strony Razor)
using IronPdf.Razor.Pages;public IActionResultOnPostAsync(){ persons = new List<Person> { new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" }, new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" }, new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" } };ViewData["personList"] = persons; ChromePdfRenderer renderer = new ChromePdfRenderer(); // Render Razor Page to PDF document PdfDocument pdf = renderer.RenderRazorToPdf(this);Response.Headers.Add("Content-Disposition", "inline"); returnFile(pdf.BinaryData, "application/pdf", "razorPageToPdf.pdf");}
using IronPdf.Razor.Pages;
public IActionResult OnPostAsync()
{
persons = new List<Person>
{
new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
};
ViewData["personList"] = persons;
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render Razor Page to PDF document
PdfDocument pdf = renderer.RenderRazorToPdf(this);
Response.Headers.Add("Content-Disposition", "inline");
return File(pdf.BinaryData, "application/pdf", "razorPageToPdf.pdf");
}
ImportsIronPdf.Razor.PagesPublic Function OnPostAsync() AsIActionResult persons = New List(OfPerson) From { New PersonWith {.Name = "Alice", .Title = "Mrs.", .Description = "Software Engineer"}, New PersonWith {.Name = "Bob", .Title = "Mr.", .Description = "Software Engineer"}, New PersonWith {.Name = "Charlie", .Title = "Mr.", .Description = "Software Engineer"} }ViewData("personList") = persons Dim renderer As New ChromePdfRenderer() ' Render Razor Page to PDF document Dim pdf AsPdfDocument = renderer.RenderRazorToPdf(Me) Response.Headers.Add("Content-Disposition", "inline") ReturnFile(pdf.BinaryData, "application/pdf", "razorPageToPdf.pdf")End Function
Imports IronPdf.Razor.Pages
Public Function OnPostAsync() As IActionResult
persons = New List(Of Person) From {
New Person With {.Name = "Alice", .Title = "Mrs.", .Description = "Software Engineer"},
New Person With {.Name = "Bob", .Title = "Mr.", .Description = "Software Engineer"},
New Person With {.Name = "Charlie", .Title = "Mr.", .Description = "Software Engineer"}
}
ViewData("personList") = persons
Dim renderer As New ChromePdfRenderer()
' Render Razor Page to PDF document
Dim pdf As PdfDocument = renderer.RenderRazorToPdf(Me)
Response.Headers.Add("Content-Disposition", "inline")
Return File(pdf.BinaryData, "application/pdf", "razorPageToPdf.pdf")
End Function
Szczegółowe wyjaśnienie tego fragmentu kodu i eksplorowanie jego dodatkowych funkcji znajdziesz w naszym kompleksowym przewodniku.
CSHTML do PDF (MVC Core)
public async Task<IActionResult> Persons(){ var persons = new List<Person> { new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" }, new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" }, new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" } }; if (_httpContextAccessor.HttpContext.Request.Method == HttpMethod.Post.Method) { ChromePdfRenderer renderer = new ChromePdfRenderer(); // Render View to PDF document PdfDocument pdf = renderer.RenderRazorViewToPdf(_viewRenderService, "Views/Home/Persons.cshtml", persons);Response.Headers.Add("Content-Disposition", "inline"); // Output PDF document returnFile(pdf.BinaryData, "application/pdf", "viewToPdfMVCCore.pdf"); } returnView(persons);}
public async Task<IActionResult> Persons()
{
var persons = new List<Person>
{
new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
};
if (_httpContextAccessor.HttpContext.Request.Method == HttpMethod.Post.Method)
{
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render View to PDF document
PdfDocument pdf = renderer.RenderRazorViewToPdf(_viewRenderService, "Views/Home/Persons.cshtml", persons);
Response.Headers.Add("Content-Disposition", "inline");
// Output PDF document
return File(pdf.BinaryData, "application/pdf", "viewToPdfMVCCore.pdf");
}
return View(persons);
}
PublicAsync Function Persons() AsTask(OfIActionResult) Dim persons = New List(OfPerson) From { New PersonWith {.Name = "Alice", .Title = "Mrs.", .Description = "Software Engineer"}, New PersonWith {.Name = "Bob", .Title = "Mr.", .Description = "Software Engineer"}, New PersonWith {.Name = "Charlie", .Title = "Mr.", .Description = "Software Engineer"} } If _httpContextAccessor.HttpContext.Request.Method = HttpMethod.Post.MethodThen Dim renderer As New ChromePdfRenderer() ' Render View to PDF document Dim pdf AsPdfDocument = renderer.RenderRazorViewToPdf(_viewRenderService, "Views/Home/Persons.cshtml", persons) Response.Headers.Add("Content-Disposition", "inline") ' Output PDF document ReturnFile(pdf.BinaryData, "application/pdf", "viewToPdfMVCCore.pdf") End If ReturnView(persons)End Function
Public Async Function Persons() As Task(Of IActionResult)
Dim persons = New List(Of Person) From {
New Person With {.Name = "Alice", .Title = "Mrs.", .Description = "Software Engineer"},
New Person With {.Name = "Bob", .Title = "Mr.", .Description = "Software Engineer"},
New Person With {.Name = "Charlie", .Title = "Mr.", .Description = "Software Engineer"}
}
If _httpContextAccessor.HttpContext.Request.Method = HttpMethod.Post.Method Then
Dim renderer As New ChromePdfRenderer()
' Render View to PDF document
Dim pdf As PdfDocument = renderer.RenderRazorViewToPdf(_viewRenderService, "Views/Home/Persons.cshtml", persons)
Response.Headers.Add("Content-Disposition", "inline")
' Output PDF document
Return File(pdf.BinaryData, "application/pdf", "viewToPdfMVCCore.pdf")
End If
Return View(persons)
End Function
Szczegółowe wyjaśnienie tego fragmentu kodu i eksplorowanie jego dodatkowych funkcji znajdziesz w naszym kompleksowym przewodniku.
CSHTML do PDF (MVC Framework)
public ActionResultPersons(){ var persons = new List<Person> { new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" }, new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" }, new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" } }; if (HttpContext.Request.HttpMethod == "POST") { // Provide the path to your view file var viewPath = "~/Views/Home/Persons.cshtml"; ChromePdfRenderer renderer = new ChromePdfRenderer(); // Render Razor view to PDF document PdfDocument pdf = renderer.RenderView(this.HttpContext, viewPath, persons);Response.Headers.Add("Content-Disposition", "inline"); // View the PDF returnFile(pdf.BinaryData, "application/pdf"); } returnView(persons);}
public ActionResult Persons()
{
var persons = new List<Person>
{
new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
};
if (HttpContext.Request.HttpMethod == "POST")
{
// Provide the path to your view file
var viewPath = "~/Views/Home/Persons.cshtml";
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render Razor view to PDF document
PdfDocument pdf = renderer.RenderView(this.HttpContext, viewPath, persons);
Response.Headers.Add("Content-Disposition", "inline");
// View the PDF
return File(pdf.BinaryData, "application/pdf");
}
return View(persons);
}
Public Function Persons() AsActionResult Dim persons = New List(OfPerson) From { New PersonWith {.Name = "Alice", .Title = "Mrs.", .Description = "Software Engineer"}, New PersonWith {.Name = "Bob", .Title = "Mr.", .Description = "Software Engineer"}, New PersonWith {.Name = "Charlie", .Title = "Mr.", .Description = "Software Engineer"} } IfHttpContext.Request.HttpMethod = "POST" Then ' Provide the path to your view file Dim viewPath = "~/Views/Home/Persons.cshtml" Dim renderer As New ChromePdfRenderer() ' Render Razor view to PDF document Dim pdf AsPdfDocument = renderer.RenderView(Me.HttpContext, viewPath, persons) Response.Headers.Add("Content-Disposition", "inline") ' View the PDF ReturnFile(pdf.BinaryData, "application/pdf") End If ReturnView(persons)End Function
Public Function Persons() As ActionResult
Dim persons = New List(Of Person) From {
New Person With {.Name = "Alice", .Title = "Mrs.", .Description = "Software Engineer"},
New Person With {.Name = "Bob", .Title = "Mr.", .Description = "Software Engineer"},
New Person With {.Name = "Charlie", .Title = "Mr.", .Description = "Software Engineer"}
}
If HttpContext.Request.HttpMethod = "POST" Then
' Provide the path to your view file
Dim viewPath = "~/Views/Home/Persons.cshtml"
Dim renderer As New ChromePdfRenderer()
' Render Razor view to PDF document
Dim pdf As PdfDocument = renderer.RenderView(Me.HttpContext, viewPath, persons)
Response.Headers.Add("Content-Disposition", "inline")
' View the PDF
Return File(pdf.BinaryData, "application/pdf")
End If
Return View(persons)
End Function
Szczegółowe wyjaśnienie tego fragmentu kodu i eksplorowanie jego dodatkowych funkcji znajdziesz w naszym kompleksowym przewodniku.
CSHTML do PDF (bez interfejsu)
app.MapGet("/PrintPdf", async () =>{ // Set your IronPDF license keyIronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01"; // Enable detailed logging for troubleshootingIronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All; // Render the Razor view to an HTML string string html = awaitRazorTemplateEngine.RenderAsync("Views/Home/Data.cshtml"); // Create a new instance of ChromePdfRenderer ChromePdfRenderer renderer = new ChromePdfRenderer(); // Render the HTML string as a PDF document PdfDocument pdf = renderer.RenderHtmlAsPdf(html, "./wwwroot"); // Return the PDF file as a response returnResults.File(pdf.BinaryData, "application/pdf", "razorViewToPdf.pdf");});
app.MapGet("/PrintPdf", async () =>
{
// Set your IronPDF license key
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";
// Enable detailed logging for troubleshooting
IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All;
// Render the Razor view to an HTML string
string html = await RazorTemplateEngine.RenderAsync("Views/Home/Data.cshtml");
// Create a new instance of ChromePdfRenderer
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render the HTML string as a PDF document
PdfDocument pdf = renderer.RenderHtmlAsPdf(html, "./wwwroot");
// Return the PDF file as a response
return Results.File(pdf.BinaryData, "application/pdf", "razorViewToPdf.pdf");
});
ImportsIronPdfImportsMicrosoft.AspNetCore.Httpapp.MapGet("/PrintPdf", Async Function() AsTask(OfIResult) ' Set your IronPDF license keyIronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01" ' Enable detailed logging for troubleshootingIronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All ' Render the Razor view to an HTML string Dim html AsString = AwaitRazorTemplateEngine.RenderAsync("Views/Home/Data.cshtml") ' Create a new instance of ChromePdfRenderer Dim renderer As New ChromePdfRenderer() ' Render the HTML string as a PDF document Dim pdf AsPdfDocument = renderer.RenderHtmlAsPdf(html, "./wwwroot") ' Return the PDF file as a response ReturnResults.File(pdf.BinaryData, "application/pdf", "razorViewToPdf.pdf")End Function)
Imports IronPdf
Imports Microsoft.AspNetCore.Http
app.MapGet("/PrintPdf", Async Function() As Task(Of IResult)
' Set your IronPDF license key
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01"
' Enable detailed logging for troubleshooting
IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All
' Render the Razor view to an HTML string
Dim html As String = Await RazorTemplateEngine.RenderAsync("Views/Home/Data.cshtml")
' Create a new instance of ChromePdfRenderer
Dim renderer As New ChromePdfRenderer()
' Render the HTML string as a PDF document
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html, "./wwwroot")
' Return the PDF file as a response
Return Results.File(pdf.BinaryData, "application/pdf", "razorViewToPdf.pdf")
End Function)
Szczegółowe wyjaśnienie tego fragmentu kodu i eksplorowanie jego dodatkowych funkcji znajdziesz w naszym kompleksowym przewodniku.
2. Jak skonfigurować ustawienia HTML na PDF
W zakresie manipulacji dokumentami PDF, IronPDF zapewnia rozległe możliwości dostosowywania przez właściwość ChromePdfRenderer.RenderingOptions dla renderowanych PDF.
Ustawienia
Opis
Przykład
RozmiarPapieru
Ustaw wymiary strony dla istniejących PDF-ów (A4, Letter, Legal, itp.)
PdfPaperSize.A4
OrientacjaPapieru
Ustaw Orientację pionową lub poziomą dla istniejących PDF-ów
PdfPaperOrientation.Landscape
MarginTop/Bottom/Left/Right
Ustaw marginesy stron w milimetrach (domyślnie: 25 mm)
25
CssMediaType
CSS dla Ekranu lub Drukowania dla HTML na PDF
PdfCssMediaType.Print
PrintHtmlBackgrounds
Uwzględnij kolory tła i obrazy (domyślnie: true)
true
EnableJavaScript
Wykonaj JavaScript przed renderowaniem treści HTML
true
WaitFor.RenderDelay
Czas oczekiwania na dynamiczną treść HTML (ms)
500
Zobacz ten fragment kodu dla pełnego przykładu konfiguracji manipulacji dokumentami PDF:
using IronPdf;using IronPdf.Rendering;var renderer = new ChromePdfRenderer();// Apply print-specific CSS rulesrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;// Set custom margins in millimetersrenderer.RenderingOptions.MarginTop = 50;renderer.RenderingOptions.MarginBottom = 50;// Enable background colors and imagesrenderer.RenderingOptions.PrintHtmlBackgrounds = true;// Set paper size and orientationrenderer.RenderingOptions.PaperSize = PdfPaperSize.A4;renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;// Generate PDFs with all settings applied to HTML contentvar htmlContent = "<div style='background-color: #f0f0f0; padding: 20px;'><h1>Styled Content</h1></div>";var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);pdfDocument.SaveAs("styled-output.pdf");
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Apply print-specific CSS rules
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
// Set custom margins in millimeters
renderer.RenderingOptions.MarginTop = 50;
renderer.RenderingOptions.MarginBottom = 50;
// Enable background colors and images
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
// Set paper size and orientation
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
// Generate PDFs with all settings applied to HTML content
var htmlContent = "<div style='background-color: #f0f0f0; padding: 20px;'><h1>Styled Content</h1></div>";
var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
pdfDocument.SaveAs("styled-output.pdf");
ImportsIronPdfImportsIronPdf.RenderingDim renderer As New ChromePdfRenderer()' Apply print-specific CSS rulesrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print' Set custom margins in millimetersrenderer.RenderingOptions.MarginTop = 50renderer.RenderingOptions.MarginBottom = 50' Enable background colors and imagesrenderer.RenderingOptions.PrintHtmlBackgrounds = True' Set paper size and orientationrenderer.RenderingOptions.PaperSize = PdfPaperSize.A4renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape' Generate PDFs with all settings applied to HTML contentDim htmlContent AsString = "<div style='background-color: #f0f0f0; padding: 20px;'><h1>Styled Content</h1></div>"Dim pdfDocument AsPdfDocument = renderer.RenderHtmlAsPdf(htmlContent)pdfDocument.SaveAs("styled-output.pdf")
Imports IronPdf
Imports IronPdf.Rendering
Dim renderer As New ChromePdfRenderer()
' Apply print-specific CSS rules
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
' Set custom margins in millimeters
renderer.RenderingOptions.MarginTop = 50
renderer.RenderingOptions.MarginBottom = 50
' Enable background colors and images
renderer.RenderingOptions.PrintHtmlBackgrounds = True
' Set paper size and orientation
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
' Generate PDFs with all settings applied to HTML content
Dim htmlContent As String = "<div style='background-color: #f0f0f0; padding: 20px;'><h1>Styled Content</h1></div>"
Dim pdfDocument As PdfDocument = renderer.RenderHtmlAsPdf(htmlContent)
pdfDocument.SaveAs("styled-output.pdf")
Porady: Użyj PdfCssMediaType dla czystszych, zoptymalizowanych do druku układów w twoim formacie pliku PDF. Użyj Ekranu, aby dokładnie dopasować to, co użytkownicy widzą w swojej przeglądarce.
Jak ustawić niestandardowe nagłówki HTTP, ciasteczka i dane logowania
Podczas renderowania URL-ów, które wymagają uwierzytelnienia lub konkretnej metadanych żądania, IronPDF pozwala na dołączenie danych logowania, ciasteczek sesyjnych i nagłówków HTTP z żądaniem. To umożliwia renderowanie pulpitów intranetowych, raportów ograniczonych dostępu lub generowanych przez API stron bez potrzeby samodzielnego pobierania HTML.
Dla podstawowej lub NTLM uwierzytelniania ustaw obiekt LoginCredentials na rendererze. Dla dostępu opartego na tokenach lub sesjach przeprowadź ciasteczka i nagłówki przez RenderingOptions przed wywołaniem RenderUrlAsPdf.
using IronPdf;var renderer = new ChromePdfRenderer();// Network authentication (Basic, Digest, NTLM)renderer.LoginCredentials = new ChromeHttpLoginCredentials{NetworkUsername = "user@domain.com",NetworkPassword = "securePassword"};// Session cookies for authenticated pagesrenderer.RenderingOptions.CustomCookies["sessionId"] = "abc123";// Custom HTTP headers (e.g., Bearer tokens, API keys)renderer.RenderingOptions.CustomHttpRequestHeaders["Authorization"] = "Bearer eyJhbGciOi...";var pdf = renderer.RenderUrlAsPdf("https://intranet.company.com/quarterly-report");pdf.SaveAs("quarterly-report.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Network authentication (Basic, Digest, NTLM)
renderer.LoginCredentials = new ChromeHttpLoginCredentials
{
NetworkUsername = "user@domain.com",
NetworkPassword = "securePassword"
};
// Session cookies for authenticated pages
renderer.RenderingOptions.CustomCookies["sessionId"] = "abc123";
// Custom HTTP headers (e.g., Bearer tokens, API keys)
renderer.RenderingOptions.CustomHttpRequestHeaders["Authorization"] = "Bearer eyJhbGciOi...";
var pdf = renderer.RenderUrlAsPdf("https://intranet.company.com/quarterly-report");
pdf.SaveAs("quarterly-report.pdf");
ImportsIronPdfDim renderer As New ChromePdfRenderer()' Network authentication (Basic, Digest, NTLM)renderer.LoginCredentials = New ChromeHttpLoginCredentialsWith { .NetworkUsername = "user@domain.com", .NetworkPassword = "securePassword"}' Session cookies for authenticated pagesrenderer.RenderingOptions.CustomCookies("sessionId") = "abc123"' Custom HTTP headers (e.g., Bearer tokens, API keys)renderer.RenderingOptions.CustomHttpRequestHeaders("Authorization") = "Bearer eyJhbGciOi..."Dim pdf = renderer.RenderUrlAsPdf("https://intranet.company.com/quarterly-report")pdf.SaveAs("quarterly-report.pdf")
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' Network authentication (Basic, Digest, NTLM)
renderer.LoginCredentials = New ChromeHttpLoginCredentials With {
.NetworkUsername = "user@domain.com",
.NetworkPassword = "securePassword"
}
' Session cookies for authenticated pages
renderer.RenderingOptions.CustomCookies("sessionId") = "abc123"
' Custom HTTP headers (e.g., Bearer tokens, API keys)
renderer.RenderingOptions.CustomHttpRequestHeaders("Authorization") = "Bearer eyJhbGciOi..."
Dim pdf = renderer.RenderUrlAsPdf("https://intranet.company.com/quarterly-report")
pdf.SaveAs("quarterly-report.pdf")
Podczas renderowania HTML ładującego zasoby zewnętrzne za firmowym proxy, przekaż adres proxy jako trzeci parametr na RenderHtmlAsPdf(). To jest parametr metody, a nie właściwość na ChromePdfRenderOptions, więc jest ustawiany dla każdego wywołania rendera, a nie instancji renderera.
Dla proxy z uwierzytelnianiem, osadź dane uwierzytelniające bezpośrednio w URL używając formatu http://user:pass@host:port. Zakoduj specjalne znaki w hasłach za pomocą Uri.EscapeDataString().
using IronPdf;var renderer = new ChromePdfRenderer();// Proxy is the third parameter, not a render optionvar pdf = renderer.RenderHtmlAsPdf( "<h1>Report</h1><link rel='stylesheet' href='https://cdn.example.com/styles.css'>", baseUrlOrPath: null, proxy: "http://proxy.corp.local:8080");pdf.SaveAs("proxied-report.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Proxy is the third parameter, not a render option
var pdf = renderer.RenderHtmlAsPdf(
"<h1>Report</h1><link rel='stylesheet' href='https://cdn.example.com/styles.css'>",
baseUrlOrPath: null,
proxy: "http://proxy.corp.local:8080"
);
pdf.SaveAs("proxied-report.pdf");
ImportsIronPdfDim renderer As New ChromePdfRenderer()' Proxy is the third parameter, not a render optionDim pdf = renderer.RenderHtmlAsPdf( "<h1>Report</h1><link rel='stylesheet' href='https://cdn.example.com/styles.css'>", baseUrlOrPath:=Nothing, proxy:="http://proxy.corp.local:8080")pdf.SaveAs("proxied-report.pdf")
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' Proxy is the third parameter, not a render option
Dim pdf = renderer.RenderHtmlAsPdf(
"<h1>Report</h1><link rel='stylesheet' href='https://cdn.example.com/styles.css'>",
baseUrlOrPath:=Nothing,
proxy:="http://proxy.corp.local:8080"
)
pdf.SaveAs("proxied-report.pdf")
Zauważ, że RenderUrlAsPdf() nie akceptuje parametru proxy. Aby renderować aktywny adres URL za proxy, najpierw pobierz HTML za pomocą HttpClient skonfigurowanego z WebProxy, następnie przekaż go do RenderHtmlAsPdf() z parametrem proxy dla załadowania zasobów.
3. Jak używać zaawansowanych funkcji generowania i bezpieczeństwa PDF
Odblokuj możliwości na poziomie Enterprise dla konwersji HTML na PDF z zaawansowanym szablonowaniem, operacjami asynchronicznymi i funkcjami bezpieczeństwa. Te metody manipulacji PDF umożliwiają tworzenie dokumentów PDF na dużą skalę, ochronę poufnych plików PDF oraz zapewnienie autentyczności dokumentu podczas konwersji HTML na profesjonalny format PDF.
Jak generować szablon HTML dla wsadowego tworzenia PDF
Podstawowe wsadowe tworzenie PDF
Tworzenie wsadowego PDF jest kluczowe dla efektywnego generowania wielu spersonalizowanych dokumentów PDF. Dla podstawowych scenariuszy metoda String.Format w C# działa najlepiej do prostych manipulacji PDF.
// Simple HTML templating with String.Formatstring htmlTemplate = String.Format("<h1>Hello {0}!</h1>", "World");// Results in HTML content: <h1>Hello World!</h1>
// Simple HTML templating with String.Format
string htmlTemplate = String.Format("<h1>Hello {0}!</h1>", "World");
// Results in HTML content: <h1>Hello World!</h1>
' Simple HTML templating with String.FormatDim htmlTemplate AsString = String.Format("<h1>Hello {0}!</h1>", "World")' Results in HTML content: <h1>Hello World!</h1>
' Simple HTML templating with String.Format
Dim htmlTemplate As String = String.Format("<h1>Hello {0}!</h1>", "World")
' Results in HTML content: <h1>Hello World!</h1>
Dla dłuższych szablonów, kiedy potrzebujesz generować dokumenty PDF, użyj zamiany symboli zastępczych w treści HTML:
using IronPdf;// Define reusable HTML template for PDF filesvar htmlTemplate = "<p>Dear [[NAME]],</p><p>Thank you for your order.</p>";// Customer names for batch PDF conversion processingvar names = new[] { "John", "James", "Jenny" };// Create personalized PDF documents for each customervar renderer = new ChromePdfRenderer();foreach (var name in names){ // Replace placeholder with actual data in HTML string var htmlInstance = htmlTemplate.Replace("[[NAME]]", name); // Generate personalized PDF document from HTML content var pdf = renderer.RenderHtmlAsPdf(htmlInstance); // Save with customer-specific filename as PDF files pdf.SaveAs($"{name}-invoice.pdf");}
using IronPdf;
// Define reusable HTML template for PDF files
var htmlTemplate = "<p>Dear [[NAME]],</p><p>Thank you for your order.</p>";
// Customer names for batch PDF conversion processing
var names = new[] { "John", "James", "Jenny" };
// Create personalized PDF documents for each customer
var renderer = new ChromePdfRenderer();
foreach (var name in names)
{
// Replace placeholder with actual data in HTML string
var htmlInstance = htmlTemplate.Replace("[[NAME]]", name);
// Generate personalized PDF document from HTML content
var pdf = renderer.RenderHtmlAsPdf(htmlInstance);
// Save with customer-specific filename as PDF files
pdf.SaveAs($"{name}-invoice.pdf");
}
ImportsIronPdf' Define reusable HTML template for PDF filesDim htmlTemplate AsString = "<p>Dear [[NAME]],</p><p>Thank you for your order.</p>"' Customer names for batch PDF conversion processingDim names AsString() = {"John", "James", "Jenny"}' Create personalized PDF documents for each customerDim renderer As New ChromePdfRenderer()For Each name In names ' Replace placeholder with actual data in HTML string Dim htmlInstance AsString = htmlTemplate.Replace("[[NAME]]", name) ' Generate personalized PDF document from HTML content Dim pdf = renderer.RenderHtmlAsPdf(htmlInstance) ' Save with customer-specific filename as PDF files pdf.SaveAs($"{name}-invoice.pdf")Next
Imports IronPdf
' Define reusable HTML template for PDF files
Dim htmlTemplate As String = "<p>Dear [[NAME]],</p><p>Thank you for your order.</p>"
' Customer names for batch PDF conversion processing
Dim names As String() = {"John", "James", "Jenny"}
' Create personalized PDF documents for each customer
Dim renderer As New ChromePdfRenderer()
For Each name In names
' Replace placeholder with actual data in HTML string
Dim htmlInstance As String = htmlTemplate.Replace("[[NAME]]", name)
' Generate personalized PDF document from HTML content
Dim pdf = renderer.RenderHtmlAsPdf(htmlInstance)
' Save with customer-specific filename as PDF files
pdf.SaveAs($"{name}-invoice.pdf")
Next
Szablonowanie HTML do PDF z Handlebars.NET
Dla złożonych szablonów z pętli i warunkach, kiedy konwertujesz HTML na PDF, użyj zaawansowanego szablonowania z Handlebars.NET do generowania plików PDF z dynamiczną zawartością HTML.
# First, install Handlebars.NET for HTML to PDF templatingPM > Install-Pakiet Handlebars.NET
# First, install Handlebars.NET for HTML to PDF templating
PM > Install-Pakiet Handlebars.NET
SHELL
using HandlebarsDotNet;using IronPdf;// Define Handlebars template with placeholders for HTML contentvar source = @"<div class=""entry""> <h1>{{title}}</h1> <div class=""body""> {{body}} </div> </div>";// Compile template for reuse in PDF conversionvar template = Handlebars.Compile(source);// Create data object (can be database records) for HTML to PDF directlyvar data = new { title = "Monthly Report", body = "Sales increased by 15% this month."};// Merge template with data to create HTML contentvar htmlResult = template(data);// Convert templated HTML to PDF using the PDF convertervar renderer = new ChromePdfRenderer();var pdf = renderer.RenderHtmlAsPdf(htmlResult);pdf.SaveAs("monthly-report.pdf");
using HandlebarsDotNet;
using IronPdf;
// Define Handlebars template with placeholders for HTML content
var source =
@"<div class=""entry"">
<h1>{{title}}</h1>
<div class=""body"">
{{body}}
</div>
</div>";
// Compile template for reuse in PDF conversion
var template = Handlebars.Compile(source);
// Create data object (can be database records) for HTML to PDF directly
var data = new {
title = "Monthly Report",
body = "Sales increased by 15% this month."
};
// Merge template with data to create HTML content
var htmlResult = template(data);
// Convert templated HTML to PDF using the PDF converter
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlResult);
pdf.SaveAs("monthly-report.pdf");
ImportsHandlebarsDotNetImportsIronPdf' Define Handlebars template with placeholders for HTML contentDim source AsString = "<div class=""entry""> <h1>{{title}}</h1> <div class=""body""> {{body}} </div> </div>"' Compile template for reuse in PDF conversionDim template = Handlebars.Compile(source)' Create data object (can be database records) for HTML to PDF directlyDim data = New With { .title = "Monthly Report", .body = "Sales increased by 15% this month."}' Merge template with data to create HTML contentDim htmlResult = template(data)' Convert templated HTML to PDF using the PDF converterDim renderer = New ChromePdfRenderer()Dim pdf = renderer.RenderHtmlAsPdf(htmlResult)pdf.SaveAs("monthly-report.pdf")
Imports HandlebarsDotNet
Imports IronPdf
' Define Handlebars template with placeholders for HTML content
Dim source As String =
"<div class=""entry"">
<h1>{{title}}</h1>
<div class=""body"">
{{body}}
</div>
</div>"
' Compile template for reuse in PDF conversion
Dim template = Handlebars.Compile(source)
' Create data object (can be database records) for HTML to PDF directly
Dim data = New With {
.title = "Monthly Report",
.body = "Sales increased by 15% this month."
}
' Merge template with data to create HTML content
Dim htmlResult = template(data)
' Convert templated HTML to PDF using the PDF converter
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlResult)
pdf.SaveAs("monthly-report.pdf")
Zarządzanie paginacją w generowanych dokumentach PDF zapewnia profesjonalne, czytelne układy podczas konwersji fragmentów HTML. Użyj CSS, aby kontrolować, gdzie strony się załamują w plikach PDF.
IronPDF dostarcza wydajność na poziomie przedsiębiorstwa z pełnym wsparciem dla asynchronicznego i wielowątkowego dla twoich potrzeb konwersji HTML na PDF, kiedy potrzebujesz generować pliki PDF na dużą skalę.
using IronPdf;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;public class PdfGenerationService{ // Async method for non-blocking PDF generation from HTML content public async Task<byte[]> GeneratePdfAsync(string html) { var renderer = new ChromePdfRenderer(); // Async HTML to PDF conversion preserves thread pool var pdf = await renderer.RenderHtmlAsPdfAsync(html); // Return PDF files as byte array for web responses return pdf.BinaryData; } // Concurrent batch PDF generation for multiple HTML strings public async TaskGenerateMultiplePdfsAsync(List<string> htmlSzablony) { var renderer = new ChromePdfRenderer(); // Create parallel conversion tasks to generate PDF documents var tasks = htmlSzablony.Select(html => renderer.RenderHtmlAsPdfAsync(html) ); // Await all PDF conversions simultaneously var pdfs = awaitTask.WhenAll(tasks); // Save generated PDF files from HTML content for (int i = 0; i < pdfs.Length; i++) { pdfs[i].SaveAs($"document-{i}.pdf"); } }}
using IronPdf;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
public class PdfGenerationService
{
// Async method for non-blocking PDF generation from HTML content
public async Task<byte[]> GeneratePdfAsync(string html)
{
var renderer = new ChromePdfRenderer();
// Async HTML to PDF conversion preserves thread pool
var pdf = await renderer.RenderHtmlAsPdfAsync(html);
// Return PDF files as byte array for web responses
return pdf.BinaryData;
}
// Concurrent batch PDF generation for multiple HTML strings
public async Task GenerateMultiplePdfsAsync(List<string> htmlSzablony)
{
var renderer = new ChromePdfRenderer();
// Create parallel conversion tasks to generate PDF documents
var tasks = htmlSzablony.Select(html =>
renderer.RenderHtmlAsPdfAsync(html)
);
// Await all PDF conversions simultaneously
var pdfs = await Task.WhenAll(tasks);
// Save generated PDF files from HTML content
for (int i = 0; i < pdfs.Length; i++)
{
pdfs[i].SaveAs($"document-{i}.pdf");
}
}
}
C#
Zweryfikowane na IronPDF v2026.6.1 · .NET 10 · czerwiec 2026.
Porady: Wskazówki dotyczące optymalizacji wydajności konwersji HTML na PDF
Używaj systemów 64-bitowych dla optymalnej wydajności generowania PDF.
Zapewnij odpowiednie zasoby serwera, gdy generujesz dokumenty PDF (unikaj słabyćh darmowych poziomów)
Daj wystarczająco RenderDelay dla złożonego JavaScriptu w treści HTML.
Ponownie wykorzystuj instancje ChromePdfRenderer kiedy to możliwe.
Wykorzystaj ostatnie poprawki pamięci dla operacji asynchronicznych / w partiach, aby zmniejszyć zużycie zasobów; testuj dla zmniejszonych rozmiarów plików z powtarzającymi się niestandardowymi nagłówkami/stopkami.
Zabezpieczaj poufne generowane dokumenty PDF hasłami i uprawnieniami podczas konwersji treści HTML na chroniony format PDF.
using IronPdf;var renderer = new ChromePdfRenderer();// Convert HTML to PDF with securityvar pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Report</h1>");// Configure security settings for PDF filespdf.SecuritySettings.UserPassword = "user123"; // Password to open PDF documentspdf.SecuritySettings.OwnerPassword = "owner456"; // Password to modify PDF files// Set granular permissions for PDF formatpdf.SecuritySettings.AllowUserCopyPasteContent = false;pdf.SecuritySettings.AllowUserAnnotations = false;pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.PrintLowQuality;// Apply strong encryption to PDF documentspdf.SecuritySettings.EncryptionAlgorithm = PdfEncryptionAlgorithm.AES256;pdf.SaveAs("secure-document.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Convert HTML to PDF with security
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Report</h1>");
// Configure security settings for PDF files
pdf.SecuritySettings.UserPassword = "user123"; // Password to open PDF documents
pdf.SecuritySettings.OwnerPassword = "owner456"; // Password to modify PDF files
// Set granular permissions for PDF format
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.PrintLowQuality;
// Apply strong encryption to PDF documents
pdf.SecuritySettings.EncryptionAlgorithm = PdfEncryptionAlgorithm.AES256;
pdf.SaveAs("secure-document.pdf");
ImportsIronPdfDim renderer As New ChromePdfRenderer()' Convert HTML to PDF with securityDim pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Report</h1>")' Configure security settings for PDF filespdf.SecuritySettings.UserPassword = "user123" ' Password to open PDF documentspdf.SecuritySettings.OwnerPassword = "owner456" ' Password to modify PDF files' Set granular permissions for PDF formatpdf.SecuritySettings.AllowUserCopyPasteContent = Falsepdf.SecuritySettings.AllowUserAnnotations = Falsepdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.PrintLowQuality' Apply strong encryption to PDF documentspdf.SecuritySettings.EncryptionAlgorithm = PdfEncryptionAlgorithm.AES256pdf.SaveAs("secure-document.pdf")
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' Convert HTML to PDF with security
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Report</h1>")
' Configure security settings for PDF files
pdf.SecuritySettings.UserPassword = "user123" ' Password to open PDF documents
pdf.SecuritySettings.OwnerPassword = "owner456" ' Password to modify PDF files
' Set granular permissions for PDF format
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserAnnotations = False
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.PrintLowQuality
' Apply strong encryption to PDF documents
pdf.SecuritySettings.EncryptionAlgorithm = PdfEncryptionAlgorithm.AES256
pdf.SaveAs("secure-document.pdf")
using IronPdf;using IronPdf.Signing;var renderer = new ChromePdfRenderer();// Generate PDF from HTML pagevar pdf = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1>");// Create digital signature with certificate for PDF filesvar signature = new PdfSignature("certificate.pfx", "password"){SigningContact = "legal@company.com",SigningLocation = "New York, NY",SigningReason = "Contract Approval"};// Apply signature to PDF documentspdf.Sign(signature);pdf.SaveAs("signed-contract.pdf");
using IronPdf;
using IronPdf.Signing;
var renderer = new ChromePdfRenderer();
// Generate PDF from HTML page
var pdf = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1>");
// Create digital signature with certificate for PDF files
var signature = new PdfSignature("certificate.pfx", "password")
{
SigningContact = "legal@company.com",
SigningLocation = "New York, NY",
SigningReason = "Contract Approval"
};
// Apply signature to PDF documents
pdf.Sign(signature);
pdf.SaveAs("signed-contract.pdf");
C#
Zweryfikowane na IronPDF v2026.6.1 · .NET 10 · czerwiec 2026.
Jak konwertować formularze HTML na wypełnialne PDFy
Aby przekonwertować standardowe elementy formularza HTML na interaktywne, wypełnialne pola formularza PDF, włącz opcję renderowania CreatePdfFormsFromHtml. To zachowuje pola tekstowe, pola wyboru, radio buttony i menu rozwijane jako edytowalne pola w generowanym dokumencie PDF.
using IronPdf;var renderer = new ChromePdfRenderer();// Enable HTML form to PDF form conversionrenderer.RenderingOptions.CreatePdfFormsFromHtml = true;string htmlForm = @" <h2>Employee Onboarding Form</h2> <form> <label>Full Name:</label> <input type='text' name='fullName' value='' /><br/> <label>Department:</label> <select name='department'> <option value='engineering'>Engineering</option> <option value='marketing'>Marketing</option> <option value='sales'>Sales</option> </select><br/> <label>Agree to Terms:</label> <input type='checkbox' name='agreeTerms' /> </form>";var pdf = renderer.RenderHtmlAsPdf(htmlForm);pdf.SaveAs("onboarding-form.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Enable HTML form to PDF form conversion
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;
string htmlForm = @"
<h2>Employee Onboarding Form</h2>
<form>
<label>Full Name:</label>
<input type='text' name='fullName' value='' /><br/>
<label>Department:</label>
<select name='department'>
<option value='engineering'>Engineering</option>
<option value='marketing'>Marketing</option>
<option value='sales'>Sales</option>
</select><br/>
<label>Agree to Terms:</label>
<input type='checkbox' name='agreeTerms' />
</form>";
var pdf = renderer.RenderHtmlAsPdf(htmlForm);
pdf.SaveAs("onboarding-form.pdf");
ImportsIronPdfDim renderer As New ChromePdfRenderer()' Enable HTML form to PDF form conversionrenderer.RenderingOptions.CreatePdfFormsFromHtml = TrueDim htmlForm AsString = " <h2>Employee Onboarding Form</h2> <form> <label>Full Name:</label> <input type='text' name='fullName' value='' /><br/> <label>Department:</label> <select name='department'> <option value='engineering'>Engineering</option> <option value='marketing'>Marketing</option> <option value='sales'>Sales</option> </select><br/> <label>Agree to Terms:</label> <input type='checkbox' name='agreeTerms' /> </form>"Dim pdf = renderer.RenderHtmlAsPdf(htmlForm)pdf.SaveAs("onboarding-form.pdf")
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' Enable HTML form to PDF form conversion
renderer.RenderingOptions.CreatePdfFormsFromHtml = True
Dim htmlForm As String = "
<h2>Employee Onboarding Form</h2>
<form>
<label>Full Name:</label>
<input type='text' name='fullName' value='' /><br/>
<label>Department:</label>
<select name='department'>
<option value='engineering'>Engineering</option>
<option value='marketing'>Marketing</option>
<option value='sales'>Sales</option>
</select><br/>
<label>Agree to Terms:</label>
<input type='checkbox' name='agreeTerms' />
</form>"
Dim pdf = renderer.RenderHtmlAsPdf(htmlForm)
pdf.SaveAs("onboarding-form.pdf")
Ostrzeżenie: Każde pole formularza w Twoim HTML musi mieć unikalny atrybut name. Duplikaty nazw spowodują, że pola będą dzielić tę samą wartość w generowanym PDF, co prowadzi do niespodziewanych zachowań, gdy użytkownicy wypełniają formularz.
Aby renderować konkretną sekcję strony, a nie cały dokument, odizoluj docelowy element przed renderowaniem. Najbardziej bezpośrednie podejście używa opcji renderowania JavaScript do zastąpienia treści dokumentu zawartością docelowego elementu, połączonego z WaitFor.HtmlQuerySelector() aby upewnić się, że element istnieje przed ekstrakcją. Fragment poniżej zachowuje document.head, więc arkusze stylów i czcionki są przenoszone; bez tego kroku, reguły CSS opierające się na selektorach przodków byłyby utracone w wyodrębnionym PDF.
Dla scenariuszy po stronie serwera, gdzie masz dostęp do surowego HTML, wyodrębnij docelowy fragment za pomocą parsera takiego jak AngleSharp i przekaż go do RenderHtmlAsPdf(), bez potrzeby wykonywania JavaScriptu.
using IronPdf;// Full page HTML containing the target elementstring fullPageHtml = @"<html><body> <header><h1>Acme Corp Invoice</h1></header> <div id='invoice-summary'> <h2>Invoice #12345</h2> <p>Total: $1,250.00</p> </div> <footer>Confidential</footer></body></html>";var renderer = new ChromePdfRenderer();renderer.RenderingOptions.EnableJavaScript = true;// Replace the body with only the target elementrenderer.RenderingOptions.Javascript = @" var el = document.querySelector('#invoice-summary'); if (el) { var head = document.head.innerHTML; document.body.innerHTML = el.outerHTML; document.head.innerHTML = head; }";// Wait for the target element before JS executesrenderer.RenderingOptions.WaitFor.HtmlQuerySelector("#invoice-summary", 10000);var pdf = renderer.RenderHtmlAsPdf(fullPageHtml);pdf.SaveAs("invoice-summary.pdf");
using IronPdf;
// Full page HTML containing the target element
string fullPageHtml = @"
<html>
<body>
<header><h1>Acme Corp Invoice</h1></header>
<div id='invoice-summary'>
<h2>Invoice #12345</h2>
<p>Total: $1,250.00</p>
</div>
<footer>Confidential</footer>
</body>
</html>";
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
// Replace the body with only the target element
renderer.RenderingOptions.Javascript = @"
var el = document.querySelector('#invoice-summary');
if (el) {
var head = document.head.innerHTML;
document.body.innerHTML = el.outerHTML;
document.head.innerHTML = head;
}
";
// Wait for the target element before JS executes
renderer.RenderingOptions.WaitFor.HtmlQuerySelector("#invoice-summary", 10000);
var pdf = renderer.RenderHtmlAsPdf(fullPageHtml);
pdf.SaveAs("invoice-summary.pdf");
ImportsIronPdf' Full page HTML containing the target elementDim fullPageHtml AsString = "<html><body> <header><h1>Acme Corp Invoice</h1></header> <div id='invoice-summary'> <h2>Invoice #12345</h2> <p>Total: $1,250.00</p> </div> <footer>Confidential</footer></body></html>"Dim renderer As New ChromePdfRenderer()renderer.RenderingOptions.EnableJavaScript = True' Replace the body with only the target elementrenderer.RenderingOptions.Javascript = " var el = document.querySelector('#invoice-summary'); if (el) { var head = document.head.innerHTML; document.body.innerHTML = el.outerHTML; document.head.innerHTML = head; }"' Wait for the target element before JS executesrenderer.RenderingOptions.WaitFor.HtmlQuerySelector("#invoice-summary", 10000)Dim pdf = renderer.RenderHtmlAsPdf(fullPageHtml)pdf.SaveAs("invoice-summary.pdf")
Imports IronPdf
' Full page HTML containing the target element
Dim fullPageHtml As String = "
<html>
<body>
<header><h1>Acme Corp Invoice</h1></header>
<div id='invoice-summary'>
<h2>Invoice #12345</h2>
<p>Total: $1,250.00</p>
</div>
<footer>Confidential</footer>
</body>
</html>"
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.EnableJavaScript = True
' Replace the body with only the target element
renderer.RenderingOptions.Javascript = "
var el = document.querySelector('#invoice-summary');
if (el) {
var head = document.head.innerHTML;
document.body.innerHTML = el.outerHTML;
document.head.innerHTML = head;
}
"
' Wait for the target element before JS executes
renderer.RenderingOptions.WaitFor.HtmlQuerySelector("#invoice-summary", 10000)
Dim pdf = renderer.RenderHtmlAsPdf(fullPageHtml)
pdf.SaveAs("invoice-summary.pdf")
Istnieją trzy mechanizmy do renderowania stron za uwierzytelnianiem: dane logowania sieciowego, niestandardowe ciasteczka i nagłówki żądań HTTP. To pokrywa najczęstsze scenariusze uwierzytelniania podczas konwersji chronionych treści webowych na PDF.
Dane logowania
Użyj ChromeHttpLoginCredentials dla podstawowego, 'digest' lub NTLM uwierzytelniania przy konwertowaniu chronionych adresów URL na PDF.
using IronPdf;var renderer = new ChromePdfRenderer();// Configure network authenticationrenderer.LoginCredentials = new ChromeHttpLoginCredentials{NetworkUsername = "user@domain.com",NetworkPassword = "securePassword",AuthenticationType = ChromeHttpLoginCredentials.AuthType.Basic};var pdf = renderer.RenderUrlAsPdf("https://intranet.company.com/reports");pdf.SaveAs("authenticated-report.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Configure network authentication
renderer.LoginCredentials = new ChromeHttpLoginCredentials
{
NetworkUsername = "user@domain.com",
NetworkPassword = "securePassword",
AuthenticationType = ChromeHttpLoginCredentials.AuthType.Basic
};
var pdf = renderer.RenderUrlAsPdf("https://intranet.company.com/reports");
pdf.SaveAs("authenticated-report.pdf");
ImportsIronPdfDim renderer As New ChromePdfRenderer()' Configure network authenticationrenderer.LoginCredentials = New ChromeHttpLoginCredentialsWith { .NetworkUsername = "user@domain.com", .NetworkPassword = "securePassword", .AuthenticationType = ChromeHttpLoginCredentials.AuthType.Basic}Dim pdf = renderer.RenderUrlAsPdf("https://intranet.company.com/reports")pdf.SaveAs("authenticated-report.pdf")
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' Configure network authentication
renderer.LoginCredentials = New ChromeHttpLoginCredentials With {
.NetworkUsername = "user@domain.com",
.NetworkPassword = "securePassword",
.AuthenticationType = ChromeHttpLoginCredentials.AuthType.Basic
}
Dim pdf = renderer.RenderUrlAsPdf("https://intranet.company.com/reports")
pdf.SaveAs("authenticated-report.pdf")
Ciasteczka i nagłówki HTTP
Dla uwierzytelnienia oparte na tokenach lub sesjach, dołącz niestandardowe ciasteczka i nagłówki HTTP bezpośrednio do żądania renderowania.
using IronPdf;var renderer = new ChromePdfRenderer();// Add session cookiesrenderer.RenderingOptions.CustomCookies["sessionId"] = "abc123token";renderer.RenderingOptions.CustomCookies["authToken"] = "bearer-xyz";// Add custom HTTP headers (e.g., API key or Bearer token)renderer.RenderingOptions.HttpRequestHeaders["Authorization"] = "Bearer eyJhbGciOi...";var pdf = renderer.RenderUrlAsPdf("https://app.example.com/dashboard");pdf.SaveAs("dashboard.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Add session cookies
renderer.RenderingOptions.CustomCookies["sessionId"] = "abc123token";
renderer.RenderingOptions.CustomCookies["authToken"] = "bearer-xyz";
// Add custom HTTP headers (e.g., API key or Bearer token)
renderer.RenderingOptions.HttpRequestHeaders["Authorization"] = "Bearer eyJhbGciOi...";
var pdf = renderer.RenderUrlAsPdf("https://app.example.com/dashboard");
pdf.SaveAs("dashboard.pdf");
C#
Porady: Dla logowań opartych na formularzach HTML (POST nazwa użytkownika/hasło), rozważ użycie HttpClient do pierwotnej autoryzacji, a następnie przekaż uzyskane ciasteczka do słownika CustomCookies, by renderować chronioną stronę.
Aby generować PDF-y za pomocą łączenia fragmentów HTML, można je scalić. To tworzy raporty wielosekcyjne lub łączy treści z różnych źródeł:
var renderer = new ChromePdfRenderer();PdfDocument part1 = renderer.RenderHtmlAsPdf("<h1>Section 1</h1><p>First section content</p>");PdfDocument part2 = renderer.RenderHtmlAsPdf("<h1>Section 2</h1><p>Second section content</p>");var merged = PdfDocument.Merge(part1, part2);merged.SaveAs("Merged.pdf");// Alternative approach: copy specific pagesvar combinedDoc = new PdfDocument();combinedDoc.CopyPage(part1, 0); // Copy first pagecombinedDoc.CopyPage(part2, 0); // Copy first pagecombinedDoc.SaveAs("Combined.pdf");
var renderer = new ChromePdfRenderer();
PdfDocument part1 = renderer.RenderHtmlAsPdf("<h1>Section 1</h1><p>First section content</p>");
PdfDocument part2 = renderer.RenderHtmlAsPdf("<h1>Section 2</h1><p>Second section content</p>");
var merged = PdfDocument.Merge(part1, part2);
merged.SaveAs("Merged.pdf");
// Alternative approach: copy specific pages
var combinedDoc = new PdfDocument();
combinedDoc.CopyPage(part1, 0); // Copy first page
combinedDoc.CopyPage(part2, 0); // Copy first page
combinedDoc.SaveAs("Combined.pdf");
Dim renderer = New ChromePdfRenderer()Dim part1 AsPdfDocument = renderer.RenderHtmlAsPdf("<h1>Section 1</h1><p>First section content</p>")Dim part2 AsPdfDocument = renderer.RenderHtmlAsPdf("<h1>Section 2</h1><p>Second section content</p>")Dim merged = PdfDocument.Merge(part1, part2)merged.SaveAs("Merged.pdf")' Alternative approach: copy specific pagesDim combinedDoc = New PdfDocument()combinedDoc.CopyPage(part1, 0) ' Copy first pagecombinedDoc.CopyPage(part2, 0) ' Copy first pagecombinedDoc.SaveAs("Combined.pdf")
Dim renderer = New ChromePdfRenderer()
Dim part1 As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Section 1</h1><p>First section content</p>")
Dim part2 As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Section 2</h1><p>Second section content</p>")
Dim merged = PdfDocument.Merge(part1, part2)
merged.SaveAs("Merged.pdf")
' Alternative approach: copy specific pages
Dim combinedDoc = New PdfDocument()
combinedDoc.CopyPage(part1, 0) ' Copy first page
combinedDoc.CopyPage(part2, 0) ' Copy first page
combinedDoc.SaveAs("Combined.pdf")
To pomaga przy tworzeniu raportów wielosekcyjnych z różnych fragmentów HTML. Możesz także dodać zakładki w celu poprawy nawigacji.
Jak przekonwertować HTML na PDF w API webowych?
W ASP.NET Web API generuj i zwracaj PDF-y bez zapisywania na dysku za pomocą MemoryStream. Ten wzorzec jest idealny dla aplikacji Blazor i usług RESTful:
[HttpGet("download")]public IActionResultGetPdf(){ var renderer = new ChromePdfRenderer(); string html = "<h1>Web Report</h1><p>Generated dynamically.</p>"; var pdf = renderer.RenderHtmlAsPdf(html); var bytes = pdf.BinaryData; // Optional: Add metadata pdf.MetaData.Author = "API Service"; pdf.MetaData.CreationDate = DateTime.Now; returnFile(bytes, "application/pdf", "report.pdf");}
[HttpGet("download")]
public IActionResult GetPdf()
{
var renderer = new ChromePdfRenderer();
string html = "<h1>Web Report</h1><p>Generated dynamically.</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
var bytes = pdf.BinaryData;
// Optional: Add metadata
pdf.MetaData.Author = "API Service";
pdf.MetaData.CreationDate = DateTime.Now;
return File(bytes, "application/pdf", "report.pdf");
}
<HttpGet("download")>Public Function GetPdf() AsIActionResult Dim renderer = New ChromePdfRenderer() Dim html AsString = "<h1>Web Report</h1><p>Generated dynamically.</p>" Dim pdf = renderer.RenderHtmlAsPdf(html) Dim bytes = pdf.BinaryData ' Optional: Add metadata pdf.MetaData.Author = "API Service" pdf.MetaData.CreationDate = DateTime.Now ReturnFile(bytes, "application/pdf", "report.pdf")End Function
<HttpGet("download")>
Public Function GetPdf() As IActionResult
Dim renderer = New ChromePdfRenderer()
Dim html As String = "<h1>Web Report</h1><p>Generated dynamically.</p>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
Dim bytes = pdf.BinaryData
' Optional: Add metadata
pdf.MetaData.Author = "API Service"
pdf.MetaData.CreationDate = DateTime.Now
Return File(bytes, "application/pdf", "report.pdf")
End Function
Ten wzorzec działa świetnie dla generacji PDF po stronie serwera w aplikacjach webowych .NET 10. Możesz zintegrować się z widokami CSHTML dla aplikacji MVC.
Jak dodawać nagłówki, znaki wodne i zabezpieczenia?
Dodawanie profesjonalnych nagłówków i stopek
Nagłówki i stopki zawierające numery stron, daty lub elementy brandingowe sprawiają, że dokumenty wielostronicowe są znacznie bardziej czytelne i profesjonalne. IronPDF przetwarza je jako fragmenty HTML, dzięki czemu można używać pełnego stylu CSS, w tym obrazów i kolorów marki:
using IronPdf;var renderer = new ChromePdfRenderer();renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter{MaxHeight = 50,HtmlFragment = "<div style='text-align:center;font-size:12px;'>Annual Report 2025 -- Confidential</div>",BaseUrl = new Uri(@"file:///C:/assets/")};renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter{MaxHeight = 30,HtmlFragment = "<div style='text-align:center;font-size:10px;'>Page {page} of {total-pages}</div>",DrawDividerLine = true};renderer.RenderingOptions.MarginTop = 60;renderer.RenderingOptions.MarginBottom = 40;var pdf = renderer.RenderHtmlAsPdf("<h1>Report Content</h1><p>Body text here.</p>");pdf.SaveAs("report-with-headers.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
MaxHeight = 50,
HtmlFragment = "<div style='text-align:center;font-size:12px;'>Annual Report 2025 -- Confidential</div>",
BaseUrl = new Uri(@"file:///C:/assets/")
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
MaxHeight = 30,
HtmlFragment = "<div style='text-align:center;font-size:10px;'>Page {page} of {total-pages}</div>",
DrawDividerLine = true
};
renderer.RenderingOptions.MarginTop = 60;
renderer.RenderingOptions.MarginBottom = 40;
var pdf = renderer.RenderHtmlAsPdf("<h1>Report Content</h1><p>Body text here.</p>");
pdf.SaveAs("report-with-headers.pdf");
ImportsIronPdfDim renderer As New ChromePdfRenderer()renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooterWith { .MaxHeight = 50, .HtmlFragment = "<div style='text-align:center;font-size:12px;'>Annual Report 2025 -- Confidential</div>", .BaseUrl = New Uri("file:///C:/assets/")}renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooterWith { .MaxHeight = 30, .HtmlFragment = "<div style='text-align:center;font-size:10px;'>Page {page} of {total-pages}</div>", .DrawDividerLine = True}renderer.RenderingOptions.MarginTop = 60renderer.RenderingOptions.MarginBottom = 40Dim pdf = renderer.RenderHtmlAsPdf("<h1>Report Content</h1><p>Body text here.</p>")pdf.SaveAs("report-with-headers.pdf")
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
.MaxHeight = 50,
.HtmlFragment = "<div style='text-align:center;font-size:12px;'>Annual Report 2025 -- Confidential</div>",
.BaseUrl = New Uri("file:///C:/assets/")
}
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
.MaxHeight = 30,
.HtmlFragment = "<div style='text-align:center;font-size:10px;'>Page {page} of {total-pages}</div>",
.DrawDividerLine = True
}
renderer.RenderingOptions.MarginTop = 60
renderer.RenderingOptions.MarginBottom = 40
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Report Content</h1><p>Body text here.</p>")
pdf.SaveAs("report-with-headers.pdf")
Elementy zastepcze jak {page} i {total-pages} sa automatycznie zastepowane podczas renderowania. Zapoznaj sie z samouczkiem hdrów i stopki dotyczacym dynamicznej iniekcji dat, umieszczania logo i naprzemiennego stylu stron.
Stosowanie znaków wodnych, szyfrowania i podpisów cyfrowych
Znaki wodne chronią dokumenty robocze i poufne raporty. Ochrona hasłem i ustawienia uprawnień ograniczają krąg osób, które mogą drukować, kopiować lub edytować plik PDF. Podpisy cyfrowe zapewniają weryfikowalną warstwę autentyczności dla umów i dokumentów podlegających regulacjom. Możesz połączyć wszystkie trzy w jednym przepływie pracy:
using IronPdf;using System.Security.Cryptography.X509Certificates;var renderer = new ChromePdfRenderer();var pdf = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1><p>Terms and conditions.</p>");// Watermarkpdf.ApplyWatermark( "<div style='font-size:72px;color:red;opacity:0.3;'>DRAFT</div>", rotation: 45, opacity: 30);// Encryption and permissionspdf.SecuritySettings.UserPassword = "user123";pdf.SecuritySettings.OwnerPassword = "owner456";pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint;pdf.SecuritySettings.AllowUserCopyPasteContent = false;// Digital signaturevar cert = X509CertificateLoader.LoadPkcs12FromFile("certificate.pfx", "password");var signature = new PdfSignature(cert){SigningContact = "Jane Smith",SigningLocation = "New York, NY",SigningReason = "Contract Approval"};pdf.Sign(signature);pdf.SaveAsRevision("signed-contract.pdf");
using IronPdf;
using System.Security.Cryptography.X509Certificates;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1><p>Terms and conditions.</p>");
// Watermark
pdf.ApplyWatermark(
"<div style='font-size:72px;color:red;opacity:0.3;'>DRAFT</div>",
rotation: 45,
opacity: 30
);
// Encryption and permissions
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
// Digital signature
var cert = X509CertificateLoader.LoadPkcs12FromFile("certificate.pfx", "password");
var signature = new PdfSignature(cert)
{
SigningContact = "Jane Smith",
SigningLocation = "New York, NY",
SigningReason = "Contract Approval"
};
pdf.Sign(signature);
pdf.SaveAsRevision("signed-contract.pdf");
ImportsIronPdfImportsSystem.Security.Cryptography.X509CertificatesDim renderer As New ChromePdfRenderer()Dim pdf = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1><p>Terms and conditions.</p>")' Watermarkpdf.ApplyWatermark( "<div style='font-size:72px;color:red;opacity:0.3;'>DRAFT</div>", rotation:=45, opacity:=30)' Encryption and permissionspdf.SecuritySettings.UserPassword = "user123"pdf.SecuritySettings.OwnerPassword = "owner456"pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrintpdf.SecuritySettings.AllowUserCopyPasteContent = False' Digital signatureDim cert = X509CertificateLoader.LoadPkcs12FromFile("certificate.pfx", "password")Dim signature As New PdfSignature(cert) With { .SigningContact = "Jane Smith", .SigningLocation = "New York, NY", .SigningReason = "Contract Approval"}pdf.Sign(signature)pdf.SaveAsRevision("signed-contract.pdf")
Imports IronPdf
Imports System.Security.Cryptography.X509Certificates
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1><p>Terms and conditions.</p>")
' Watermark
pdf.ApplyWatermark(
"<div style='font-size:72px;color:red;opacity:0.3;'>DRAFT</div>",
rotation:=45,
opacity:=30
)
' Encryption and permissions
pdf.SecuritySettings.UserPassword = "user123"
pdf.SecuritySettings.OwnerPassword = "owner456"
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint
pdf.SecuritySettings.AllowUserCopyPasteContent = False
' Digital signature
Dim cert = X509CertificateLoader.LoadPkcs12FromFile("certificate.pfx", "password")
Dim signature As New PdfSignature(cert) With {
.SigningContact = "Jane Smith",
.SigningLocation = "New York, NY",
.SigningReason = "Contract Approval"
}
pdf.Sign(signature)
pdf.SaveAsRevision("signed-contract.pdf")
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.
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.
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.
4. Jak wdrożyć HTML na PDF na platformach chmurowych
Wdrażanie konwersji HTML na PDF w środowiskach chmurowych wymaga specyficznej konfiguracji dla renderowania bezgłowego, tymczasowych ścieżek plików i przydziału zasobów. Aby zadawaliśmy kluczowe zagadnienia dotyczące wdrożeń w popularnych platformach chmurowych i w kontenerach z IronPDF.
Platforma
Min Zasoby
Pakiet
AutoKonfiguracja
Tymczasowa Ścieżka
Kluczowy Problem
Usługa aplikacji Azure
Poziom B1 (Podstawowy)
IronPdf.Linux
true
/tmp
Bezpłatne/Współdzielone poziomy nie działają (brak GPU, mało pamięci)
Azure Functions (Windows)
Poziom B1
IronPdf
true
/tmp
Odznacz "Uruchom z pliku pakietu"
AWS Lambda
512 MB / 60s timeout
IronPdf.Linux
true
/tmp (wymagane)
Domyślny system plików jest tylko do odczytu
Docker (Ubuntu/Debian)
Zależne od obrazu
IronPdf.Linux
false
Domyślny obraz
Ustaw false (Dockerfile zarządza zależnościami)
Jak wdrożyć na Azure
Podczas wdrażania na Azure Functions lub Usłudze App, wyłącz akcelerację GPU i zapewnij, że twoja warstwa hostingowa dostarcza wystarczającą pamięć dla renderowania opartego na Chrome. Dodaj te ustawienia podczas uruchamiania aplikacji, przed wszelkimi wywołaniami renderowania.
Piaskownice Azure działają bezgłowo bez dostępu do GPU, a poziomy darmowe/współdzielone (F1, D1) brakuje zasobów wymaganych przez Chrome. Celuj w Poziom B1 (Podstawowy) lub wyższy.
using IronPdf;// Azure sandboxes block GPU access, always disableIronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;// Required on non-GUI Linux systemsIronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;var renderer = new ChromePdfRenderer();var pdf = renderer.RenderHtmlAsPdf("<h1>Azure PDF Report</h1>");pdf.SaveAs("azure-report.pdf");
using IronPdf;
// Azure sandboxes block GPU access, always disable
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
// Required on non-GUI Linux systems
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Azure PDF Report</h1>");
pdf.SaveAs("azure-report.pdf");
ImportsIronPdf' Azure sandboxes block GPU access, always disableIronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled' Required on non-GUI Linux systemsIronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = TrueDim renderer As New ChromePdfRenderer()Dim pdf = renderer.RenderHtmlAsPdf("<h1>Azure PDF Report</h1>")pdf.SaveAs("azure-report.pdf")
Imports IronPdf
' Azure sandboxes block GPU access, always disable
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled
' Required on non-GUI Linux systems
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = True
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Azure PDF Report</h1>")
pdf.SaveAs("azure-report.pdf")
Uwaga: Usługa App Azure Darmowa i Współdzielona (F1, D1) nie ma wystarczających zasobów dla renderowania PDF z Chrome. Użyj przynajmniej poziomu B1 (Podstawowy) lub wyższego, aby uniknąć błędów braku pamięci i timeoutów procesów.
AWS Lambda wymaga wdrożenia opartego na Dockerze dla renderowania PDF opartego na Chrome. Domyślny system plików Lambda jest tylko do odczytu, więc wszystkie tymczasowe i ścieżki wdrożenia muszą wskazywać na /tmp.
Skonfiguruj te ustawienia na górze obsługiwacza funkcji, przed jakimikolwiek wywołaniami renderowania.
using Amazon.Lambda.Core;using IronPdf;public class PdfFunction{ public stringFunctionHandler(string input, ILambdaContext context) { // Lambda's only writable directory var tmpPath = "/tmp/";IronPdf.Installation.TempFolderPath = tmpPath;IronPdf.Installation.CustomDeploymentDirectory = tmpPath;IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled; // Let IronPDF install Chrome dependencies on first cold startIronPdf.Installation.LinuxAndDockerDependenciesAutoKonfiguracja = true; context.Logger.LogLine("Rendering PDF..."); var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(input); // Save to /tmp before uploading to S3 or returning var outputPath = $"{tmpPath}output.pdf"; pdf.SaveAs(outputPath); return outputPath; }}
using Amazon.Lambda.Core;
using IronPdf;
public class PdfFunction
{
public string FunctionHandler(string input, ILambdaContext context)
{
// Lambda's only writable directory
var tmpPath = "/tmp/";
IronPdf.Installation.TempFolderPath = tmpPath;
IronPdf.Installation.CustomDeploymentDirectory = tmpPath;
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
// Let IronPDF install Chrome dependencies on first cold start
IronPdf.Installation.LinuxAndDockerDependenciesAutoKonfiguracja = true;
context.Logger.LogLine("Rendering PDF...");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(input);
// Save to /tmp before uploading to S3 or returning
var outputPath = $"{tmpPath}output.pdf";
pdf.SaveAs(outputPath);
return outputPath;
}
}
C#
Zwróć uwagę: Konfiguruj swoją funkcję Lambda z co najmniej 512 MB pamięci i minimum 60-sekundowym czasem wywołania. Renderowanie oparte na Chrome jest intensywne pod względem pamięci, a zimne starty wymagają dodatkowego czasu na inicjalizację wbudowanego silnika przeglądarki.
Dla wdrożeń Dockera użyj pakietu NuGet IronPdf.Linux, aby zmniejszyć rozmiar obrazu i uniknąć pobierania zasobów podczas wykonywania. Ten pakiet zawiera wcześniej skompilowane binaria natywne dla Linuksa, zoptymalizowane dla środowisk kontenerowych.
Ustaw LinuxAndDockerDependenciesAutoKonfiguracja = false, gdy Twój Dockerfile już instaluje współdzielone zależności biblioteki Chrome za pomocą apt-get. Automatyczna instalacja w czasie wykonywania jest w tym przypadku zbędna i może powodować błędy uprawnień lub dłuższe zimne starty.
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /app
COPY . .
RUN dotnet publish -c Release -o /out
FROM mcr.microsoft.com/dotnet/aspnet:10.0
# Install Chrome dependencies for PDF rendering
RUN apt-get update && apt-get install -y \
libglib2.0-0 libnss3 libatk1.0-0 libatk-bridge2.0-0 \
libcups2 libdrm2 libxkbcommon0 libxcomposite1 \
libxdamage1 libxrandr2 libgbm1 libpango-1.0-0 \
libcairo2 libasound2 libxshmfence1 && \
rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY --from=build /out .
ENTRYPOINT ["dotnet", "MyApp.dll"]
Text
using IronPdf;// Dependencies handled by Dockerfile apt-get, disable runtime installIronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = false;// No GPU in containersIronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;var renderer = new ChromePdfRenderer();var pdf = renderer.RenderHtmlAsPdf("<h1>Dockerized PDF</h1>");pdf.SaveAs("output.pdf");
using IronPdf;
// Dependencies handled by Dockerfile apt-get, disable runtime install
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = false;
// No GPU in containers
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Dockerized PDF</h1>");
pdf.SaveAs("output.pdf");
ImportsIronPdf' Dependencies handled by Dockerfile apt-get, disable runtime installIronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = False' No GPU in containersIronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.DisabledDim renderer As New ChromePdfRenderer()Dim pdf = renderer.RenderHtmlAsPdf("<h1>Dockerized PDF</h1>")pdf.SaveAs("output.pdf")
Imports IronPdf
' Dependencies handled by Dockerfile apt-get, disable runtime install
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = False
' No GPU in containers
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Dockerized PDF</h1>")
pdf.SaveAs("output.pdf")
Zweryfikowane na IronPDF v2026.6.1 · .NET 10 · czerwiec 2026.
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
IronPdf.License.LicenseKey = "YourLicenseKey";ChromePdfRenderer renderer = new ChromePdfRenderer();// Set rendering optionsrenderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;renderer.RenderingOptions.PaperOrientation = IronPdf.Rendering.PdfPaperOrientation.Portrait;renderer.RenderHtmlFileAsPdf(@"testFile.html").SaveAs("GeneratedFile.pdf");
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");
ImportsIronPdfLicense.LicenseKey = "YourLicenseKey"Dim renderer As New ChromePdfRenderer()' Set rendering optionsrenderer.RenderingOptions.PaperSize = Rendering.PdfPaperSize.A4renderer.RenderingOptions.PaperOrientation = Rendering.PdfPaperOrientation.Portraitrenderer.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")
ChromePdfRenderer jest bezpieczny dla wątków; jedna instancja może obsługiwać dziesiątki ulewających zadań bez zakleszczeń.
Parallel.ForEach nasyca każdy rdzeń procesora; typowe serwery osiągają wzrost przepustowości o 4-6× w porównaniu z jednowątkowymi pętlami.
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:
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.
5. Porównanie IronPDF z innymi bibliotekami PDF dla .NET
IronPDF jest preferowanym rozwiązaniem dla wielu zespołów, jeśli chodzi o generowanie plików PDF w C# dzięki solidnemu silnikowi renderowania opartemu na Chromium, intuicyjnemu API i częstym ulepszeniom produktu. Porównajmy IronPDF z innymi konwerterami PDF, aby znaleźć najlepsze rozwiązanie dla Twoich potrzeb generowania PDF.
Bezplatne i otwarte alternatywy
Niektóre narzędzia, które mogą wziąć pod uwagę:
PuppeteerSharp: wersja portu Puppeteer na platformę .NET na licencji MIT, która steruje bezgłowym Chrome'a.
Playwright dla .NET: biblioteka automatyzacji Microsoftu na licencji Apache-2.0, również oparta na Chromium.
wkhtmltopdf: długoterminowa samodzielna binarna konwersja HTML do PDF.
Natywne drogi przeglądarki: drukowanie do PDF bezpośrednio z bezgłowej przeglądarki lub sterownika drukarki systemu operacyjnego.
Warto najpierw zwrócić uwagę na rozróżnienie: PuppeteerSharp i Playwright są ramkami automatyzacji przeglądarki, a nie bibliotekami PDF. Ekspozycja wywołania drukowania do PDF na bazie prawdziwego Chromium, więc wierność renderowania jest doskonała, ale szczegóły PDF, takie jak nagłówki i stopki, szyfrowanie, podpisy i PDF/A, wraz z cyklem życia przeglądarki, pozostają do zrealizowania przez ciebie: wysyłanie i aktualizowanie binarium Chromium, zarządzanie współbieżnością i odzyskiwanie po awarii, oraz budowanie struktury dokumentu ręcznie. Playwright dodaje warunek warty poznania wcześnie: jego PdfAsync działa tylko w bezgłowym Chromie (nie w Firefox ani WebKit), więc wdrożenia muszą zapewniać bezgłowego Chrome, co ma znaczenie w kontenerach i rozwiązaniach bezserwerowych.
wkhtmltopdf znowu zajmuje inne miejsce. Projekt został zarchiwizowany w 2024 roku, a jego ostatnie wydanie (0.12.6, 2020) działa na ~2012 Qt WebKit silniku, który nie otrzymuje dalszych łatek bezpieczeństwa, w tym krytyczna niezałatana porada dotyczącą SSRF (CVE-2022-35583); pozostaje użyteczny dla prostych statycznych dokumentów na zaufanym wejściu, ale mniej dla jawnego wyjścia. Natywne drogi przeglądarek nie wymagają w ogóle biblioteki, kosztem jakiejkolwiek rodzimój biblioteki PDF .NET ani faktycznej kontroli nad automatyzacją po stronie serwera.
Dla prototypów, narzędzi wewnętrznych i pracy bez budżetu, są to legalne wybory. Poniższe porównanie obejmuje funkcję po funkcji bibliotek komercyjnych.
Szybka macierz decyzyjna: IronPDF versus inne konwertery PDF dla .NET
Rozwiązanie
Kiedy używać
Najlepsze dla
IronPDF
Konwersja nowoczesnych stron internetowych/HTML do PDF z dokładnym wizualnym podobieństwem.
Aplikacje Enterprise wymagające niezawodnego silnika renderowania HTML, dynamicznych treści i profesjonalnego wsparcia.
wkhtmltopdf
Prosta konwersja HTML w aplikacjach niekrytycznych, gdzie przestarzałe renderowanie jest akceptowalne.
Podstawowe generowanie dokumentów z dziedzicznym HTML/CSS.
Syncfusion
Jeśli już zainwestowano w ekosystem Syncfusion lub uprawnione do bezpłatnej licencji dla społeczności.
Organizacje używające wielu komponentów Syncfusion.
Aspose.PDF
Skomplikowana manipulacja PDF, gdy jakość renderowania HTML jest mniej istotna.
Porównanie prawdziwego życia HTML do PDF: Renderowanie strony głównej Reddita
Aby ocenić jakość wyjściowego PDF, przetestowaliśmy te biblioteki na stronie głównej Reddita zawierającej dynamiczne treści webowe, nowoczesne CSS i elementy HTML JavaScript. Ta strona służy jako idealny przypadek testowy do generowania wyjściowego PDF.
IronPDF dostarcza pixel-perfect wyniki, zachowując całą dynamiczną zawartość webową, stylizację nowoczesnych czcionek webowych i elementy interaktywne dokładnie tak, jak są wyświetlane w Chrome, wszystko w zaledwie kilku liniach kodu.
Syncfusion
Syncfusion wyrenderowało PDF z większością brakujących sekcji i stylizacji, szczególnie dynamicznej zawartości. Początkowo zablokowany przez zabezpieczenia Reddita. Osiągnięcie lepszych wyników wymaga obszernego dostosowania wiersza poleceń, ale wyjściowy wciąż jest niekompletny.
Aspose.PDF
Aspose.PDF wymagał ręcznego pobrania HTML na początku (brak obsługi bezpośredniego URL). Po konwersji wyjściowy brakował właściwego formatowania i prawie wszystkich sekcji zawartości, czyniąc go nieodpowiednim dla nowoczesnego webu z dynamiczną zawartością.
wkhtmltopdf
wkhtmltopdf zakończył szybko, ale wyprodukował czystą, statyczną stronę z brakującą istotną zawartością, jak aktualizacje na żywo, elementy dynamiczne i interaktywne sekcje. To pokazuje niekompatybilność wkhtmltopdf z nowoczesnymi stronami opartymi na JavaScript.
Wnioski dotyczące wydajności i jakości wyjściowego PDF
.NET deweloperzy potrzebujący niezawodnego konwertera HTML do PDF, wybierają IronPDF ze względu na minimalny kod, łatwe w użyciu API i częste ulepszenia produktu.
W prawdziwym teście na treści webowej dostarczył najszybsze, najbardziej dokładne wyniki, podczas gdy Syncfusion pozostawało w tyle, Aspose wymagał dodatkowych kroków, a wkhtmltopdf brakowało nowoczesnych stylizacji. IronPDF oferuje najlepszą równowagę między szybkością, dokładnością i prostotą dla dzisiejszych procesów konwersji HTML do PDF.
Zwróć uwagę: Aspose, Syncfusion i wkhtmltopdf są znakami towarowymi swoich odpowiednich właścicieli. Ta strona nie jest z nimi powiązana ani nie jest przez nie zatwierdzona. Wszystkie nazwy, logotypy i marki należą do ich właścicieli, a porównania są oparte na ogólnodostępnych informacjach w momencie pisania.
Podsumowanie
Ta instrukcja obejmowała wszystko, co potrzebne do konwersji HTML do PDF w .NET: od podstawowej konwersji ciągu do zaawansowanych funkcji, takich jak przetwarzanie asynchroniczne, cyfrowe podpisy i generowanie wsadowe. Demonstrowaliśmy trzy metody konwersji, niezbędne konfiguracje, zaawansowane funkcje i ustawienia bezpieczeństwa oraz porównaliśmy IronPDF z innymi bibliotekami poprzez testy w realnym świecie generowania dokumentów dynamicznych.
Podczas gdy konkurenci mieli problemy z nowoczesnymi stronami lub wymagały skomplikowanych obejść, IronPDF dostarczył nieskazitelne wyniki z minimalnym kodem i potężnym silnikiem renderowania.
Gotowy, aby uprościć swoje procesy PDF i doświadczyć wszechstronnej generacji PDF w zaledwie kilku liniach kodu? Zainstaluj IronPDF przez NuGet Pakiet Manager (lub wybierz Zarządzaj pakietem NuGet w Visual Studio) i skonwertuj swój pierwszy HTML do PDF już dziś.
Możesz konwertować HTML na PDF w C#, korzystając z biblioteki renderującej w Chrome, która zamienia HTML, CSS3 i JavaScript na pliki PDF o idealnej rozdzielczości. Narzędzia takie jak IronPDF pozwalają na renderowanie z adresów URL, ciągów HTML lub plików, obsługując jednocześnie nagłówki, uwierzytelnianie i ustawienia drukowania.
Jaka jest najlepsza biblioteka do konwersji HTML na PDF dla platformy .NET?
Najlepsza biblioteka powinna obsługiwać dokładne renderowanie w przeglądarce Chrome, wdrażanie na wielu platformach oraz funkcje dla przedsiębiorstw. IronPDF spełnia wszystkie te wymagania — działa w systemach Windows, Linux, macOS i Docker, zapewniając obsługę zabezpieczeń, podpisów, zgodności z przepisami oraz skalowalnych aplikacji .NET.
Jakie są darmowe opcje HTML do PDF dla .NET?
Otwarte źródła jak wkhtmltopdf, PuppeteerSharp i Playwright konwertują HTML do PDF bez kosztów, ale zamieniają wygodę na utrzymanie — starsze silniki renderujące, dołączone binaria przeglądarki lub ręczna konfiguracja serwera. IronPDF jest komercyjny, z darmowym 30-dniowym okresem próbnym, który oferuje pełną funkcjonalność i brak znaków wodnych podczas rozwoju; licencje produkcyjne zaczynają się od 999 $. Zobacz cennik →
Jak mogę przekonwertować ciągi znaków HTML do formatu PDF przy użyciu języka C#?
Aby przekonwertować ciągi HTML na PDF, użyj klasy ChromePdfRenderer i jej metody RenderHtmlAsPdf. Przekaż swój ciąg HTML do tej metody, a następnie zapisz plik PDF za pomocą SaveAs.
Jakie kroki należy wykonać, aby przekonwertować adres URL strony internetowej na dokument PDF w języku C#?
Możesz przekonwertować adres URL strony internetowej bezpośrednio do formatu PDF, korzystając z metody RenderUrlAsPdf, która pozwala zachować styl, obrazy i elementy interaktywne, takie jak formularze i hiperłącza.
Jak przekonwertować plik HTML na PDF w C#?
Użyj ChromePdfRenderer.RenderHtmlFileAsPdf("path/to/file.html"), aby przekonwertować lokalne pliki HTML do formatu PDF. IronPDF automatycznie rozpoznaje wszystkie względne ścieżki zasobów (obrazy, CSS, JS).
Jak przekonwertować strony ASP.NET Razor Pages lub widoki MVC do formatu PDF?
IronPDF udostępnia dedykowane pakiety rozszerzeń — IronPdf.Extensions.Razor dla Razor Pages oraz IronPdf.Extensions.Mvc.Core dla widoków MVC. Użyj RenderRazorToPdf lub RenderRazorViewToPdf z wstrzykiwaniem zależności, aby konwertować widoki bezpośrednio do formatu PDF z kontrolerów. Zobacz przewodnik Razor →
Jak zapewnić prawidłowe renderowanie treści JavaScript w pliku PDF?
Włącz renderowanie JavaScript, ustawiając RenderingOptions.EnableJavaScript = true, i dodaj opóźnienie renderowania za pomocą RenderingOptions.WaitFor.RenderDelay, aby zapewnić pełne załadowanie treści dynamicznych przed konwersją. Zobacz przewodnik WaitFor →
Dlaczego mój wynik HTML do PDF jest pusty lub brakuje zawartości?
Pusty lub częściowy PDF prawie zawsze oznacza, że strona nie została wykończona podczas tworzenia zrzutu lub jej zasoby nie zostały załadowane. Dla treści dynamicznych lub napędzanych JavaScript, ustaw RenderingOptions.EnableJavaScript = true i dodaj WaitFor.RenderDelay (lub WaitFor.HtmlQuerySelector), aby Chrome zakończył najpierw malowanie. Jeśli lokalne obrazy, CSS lub czcionki brakuje, podaj BaseUrlPath, aby względne ścieżki zostały poprawnie rozpoznane. Zobacz przewodnik WaitFor →
Jaka jest najlepsza metoda dodawania nagłówków i stopek do pliku PDF w języku C#?
Użyj klasy TextHeaderFooter do prostych nagłówków i stopek tekstowych lub klasy HtmlHeaderFooter do bardziej złożonej zawartości HTML. Możesz dołączyć dynamiczne symbole zastępcze, takie jak {page}, {total-pages} i {date}, w celu automatycznego generowania treści. Zobacz przewodnik po nagłówkach i stopkach →
Jak zarządzać podziałami stron w pliku PDF w C# .NET?
Kontroluj podziały stron w plikach PDF, używając właściwości CSS, takich jak page-break-after: always i page-break-inside: avoid w bloku CSS typu PRINT. Zobacz przewodnik po podziałach stron →
Jakie opcje są dostępne w zakresie ustawiania rozmiaru i orientacji papieru w plikach PDF?
Rozmiar papieru ustawia się za pomocą opcji RenderingOptions.PaperSize (dostępne opcje to A4, Letter, Legal itp.), a orientację za pomocą opcji RenderingOptions.PaperOrientation (portretowa lub krajobrazówa). Obsługiwane są również niestandardowe rozmiary w milimetrach lub całach. Zobacz przewodnik po rozmiarach papieru →
Czy mogę konwertować uwierzytelnione strony internetowe do formatu PDF?
Tak. IronPDF obsługuje pliki cookie, niestandardowe nagłówki HTTP oraz uwierzytelnianie oparte na formularzach. Pliki cookie można ustawić za pomocą ChromePdfRenderer.RenderingOptions.CustomCookies lub przekazać nagłówki uwierzytelniające w celu uwierzytelniania opartego na tokenach. Obsługiwane jest również uwierzytelnianie Windows NTLM i Kerberos. Zobacz przewodnik dotyczący plików cookie →
Czy w języku C# mogę utworzyć wiele plików PDF z jednego szablonu HTML?
Tak, utwórz szablony HTML z symbolami zastępczymi, a następnie użyj funkcji zamiany ciągów znaków lub bibliotek szablonów, takich jak Handlebars.NET. Zastąp symbole zastępcze rzeczywistymi wartościami w danych z pętli i wygeneruj pliki PDF za pomocą RenderHtmlAsPdf.
Czy można zabezpieczyć wygenerowane pliki PDF hasłem?
Tak, można użyć właściwości SecuritySettings do ustawienia haseł użytkownika i właściciela, skonfigurowania uprawnień, takich jak drukowanie i kopiowanie, oraz zastosowania szyfrowania AES256 za pomocą SecuritySettings.EncryptionAlgorithm. Zobacz przewodnik po szyfrowaniu →
Czy mogę generować dokumenty zgodne ze standardem PDF/A na podstawie kodu HTML?
Tak. IronPDF obsługuje standardy PDF/A-1b, PDF/A-2b, PDF/A-3b i PDF/UA dotyczące archiwizacji i zgodności z wymogąmi dostępności, których nie oferuje większość konwerterów HTML na PDF. Zobacz przewodnik po PDF/A →
Jak mogę zoptymalizować wydajność generowania dużej ilości plików PDF?
Zoptymalizuj wydajność, używając metod asynchronicznych, takich jak RenderHtmlAsPdfAsync, do operacji nieblokujących. Ponownie wykorzystuj instancje ChromePdfRenderer, przetwarzaj wiele plików PDF jednocześnie za pomocą Task.WhenAll i upewnij się, że masz odpowiednie zasoby serwera w systemie 64-bitowym. Zobacz przewodnik po asynchroniczności →
Jak mogę połączyć wiele plików PDF lub dołączyć stronę tytułową do mojego dokumentu?
Użyj statycznej metody PdfDocument.Merge, aby połączyć wiele plików PDF. Wygeneruj stronę tytułową osobno i połącz ją z głównym dokumentem, aby utworzyć kompleksowy plik PDF. Zobacz przewodnik po scałaniu →
Czy mogę wdrożyć IronPDF na platformie Azure, AWS lub w środowisku Docker?
Zgodność z .NET 10: Czy IronPDF od razu obsługuje .NET 10?
Tak — IronPDF jest w pełni kompatybilny z .NET 10. Zgodnie z informacjami zawartymi w notatkach dotyczących wydania IronPDF, biblioteka jest gotowa do użycia w projektach .NET 10 od pierwszego dnia, bez konieczności dodatkowej konfiguracji. Niezależnie od tego, czy korzystasz z aplikacji internetowych, konsolowych, desktopowych czy mikrousług, IronPDF działa „od razu po uruchomieniu” z .NET 10.
Czy korzystanie z IronPDF jest darmowe?
IronPDF oferuje darmowy 30-dniowy okres próbny z pełną funkcjonalnością i bez znaków wodnych na etapie rozwoju. Użycie produkcyjne wymaga komercyjnej licencji zaczynającej się od 999 $. Dostępne są poziomy: Lite, Plus, Professional i Enterprise. Zobacz cennik →
Jak jakość renderowania tej biblioteki wypada w porównaniu z innymi opcjami, takimi jak wkhtmltopdf?
Biblioteka ta wykorzystuje nowoczesny silnik renderujący Chrome do tworzenia plików PDF o idealnej rozdzielczości, w przeciwieństwie do przestarzałego silnika WebKit stosowanego w wkhtmltopdf. Nie wymaga ona plików wykonywalnych na serwerze, obsługuje pełną funkcjonalność JavaScript/CSS3, jest regularnie aktualizowana i oferuje profesjonalne wsparcie techniczne.
Dlaczego warto wybrać tę bibliotekę zamiast PDFSharp do konwersji HTML na PDF?
PDFSharp nie posiada wbudowanej funkcji konwersji HTML do PDF, co wymaga stosowania skomplikowanych rozwiązań zastępczych. Ta biblioteka oferuje bezpośrednią konwersję HTML/URL/plików za pomocą API wysokiego poziomu, obsługę nowoczesnych technologii internetowych oraz regularne aktualizacje wraz z profesjonalnym wsparciem. Zobacz porównanie PDFSharp →
Dlaczego jest to lepszy wybór niż iTextSharp do konwersji HTML?
Darmowa wersja iTextSharp nie obsługuje natywnej konwersji HTML do PDF i ma skomplikowany interfejs API niskiego poziomu. Ta biblioteka zapewnia płynną konwersję HTML dzięki intuicyjnemu interfejsowi API, pełnej obsłudze CSS3/JavaScript i braku ograniczeń licencyjnych AGPL. Zobacz porównanie iTextSharp →
Jak jakość renderowania tej biblioteki wypada w porównaniu z Aspose.PDF?
Ta biblioteka generuje pliki PDF o jakości Chrome z idealną rozdzielczością, podczas gdy Aspose.PDF często pomija stylizację i treści dynamiczne. Aspose wymaga ręcznego pobierania kodu HTML w celu konwersji adresów URL, ale ta biblioteka konwertuje adresy URL bezpośrednio z najwyższą dokładnością. Zobacz porównanie z Aspose →
Dlaczego warto wybrać tę bibliotekę zamiast Syncfusion PDF?
Chociaż Syncfusion jest wydajny, zoptymalizowany silnik Chrome tej biblioteki działa szybciej i skuteczniej obsługuje treści dynamiczne. Oferuje prostsze API oraz dodatkowe funkcje, takie jak OCR i generowanie kodów kreskowych. Zobacz porównanie z Syncfusion →
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ącą ponad 50 osób, obsługującą NASA, Teslę i światowe agencje rządowe.