# HTML do PDF w C# .NET
Jako twórcy IronPDF, wiemy, jak ważne jest, aby konwersja HTML do PDF dawała dokładne, wysokiej jakości wyniki, które spełniają oczekiwania klientów. Ten samouczek C# poprowadzi Cię przez budowę konwertera HTML do PDF dla Twoich aplikacji, projektów i stron internetowych. Opracujemy konwerter HTML do PDF w C#, a dokumenty PDF wygenerowane przez IronPDF będą idealnie odwzorowane w stosunku do PDF-ów generowanych przez przeglądarkę Google Chrome.
```cs
:title=Get started making PDFs now!
IronPdf.ChromePdfRenderer
.StaticRenderHtmlAsPdf("<p>Hello World</p>")
.SaveAs("pixelperfect.pdf");
```
<hr class="separator" />
<p class="main-content__segment-title">Przegląd</p>
<div class="hsg-featured-snippet">
<h2>Jak przekonwertować HTML do PDF w C#</h2>
<img class="featured-snippet__image featured-snippet__image--float-right featured-snippet__image--html-pdf" src="/static-assets/pdf/images/html-to-pdf-converter-in-csharp.png" alt="Jak przekonwertować HTML do PDF w C#" />
<ol>
<li><a class="js-modal-open" data-modal-id="trial-license-after-download" href="https://nuget.org/packages/IronPdf/">Pobierz i zainstaluj bibliotekę HTML do PDF w C#</a></li>
<li><a href="#anchor-create-a-pdf-with-an-html-string-in-c-net">Utwórz PDF z ciągu HTML</a></li>
<li><a href="#anchor-create-a-pdf-with-an-html-string-in-c-net">Użyj metody RenderHtmlAsPdf, aby przekonwertować ciąg HTML na PDF</a></li>
<li><a href="#anchor-export-a-pdf-using-existing-url">Eksportuj PDF używając istniejącego URL</a></li>
<li><a href="#anchor-generate-a-pdf-from-a-html-page">Generuj PDF z strony HTML</a></li>
<li><a href="#anchor-add-custom-headers-and-footers">Dodaj niestandardowe nagłówki i stopki</a></li>
<li>Wywołaj SaveAs, aby zapisać plik PDF na komputerze</li>
<li><a href="#anchor-c-html-to-pdf-conversion-settings">Więcej</a></li>
</ol>
</div>
<br class="main-article__clear-both" />
## Konwerter HTML do PDF dla C# i VB.NET
Tworzenie plików PDF programowo w .NET może być frustrującym zadaniem. Format pliku dokumentu PDF został zaprojektowany bardziej dla drukarek niż dla programistów. A C# nie ma wielu odpowiednich bibliotek ani funkcji do generowania PDF wbudowanych, wiele bibliotek wymaga dodatkowej konfiguracji i powoduje dalszą frustrację, gdy wymagają wielu linii kodu do wykonania prostego zadania.
Narzędzie do konwersji HTML do PDF w C#, które będziemy używać w tym samouczku, to IronPDF od Iron Software, bardzo popularna biblioteka do generowania i edytowania PDF w C#. Ta biblioteka ma pełną funkcjonalność edycji i generowania PDF, działa od razu po instalacji, robi dokładnie to, czego potrzebujesz w najmniejszej liczbie linii, i ma [znakomitą dokumentację swoich 50+ funkcji](/features/). IronPDF wyróżnia się tym, że obsługuje **.NET 10, .NET 9, .NET 8, .NET 7, .NET 6 i .NET 5**, .NET Core, .NET Standard i .NET Framework na Windows, macOS, Linux, Docker, Azure i AWS.
Z C# i IronPDF, logika "<a href="/how-to/create-new-pdfs/">generowania dokumentu PDF</a>" lub "<a href="/examples/using-html-to-create-a-pdf/">konwersji HTML do PDF</a>" jest prosta. Dzięki zaawansowanemu rendererowi Chrome w IronPDF, większość lub całość projektu i układu dokumentu PDF będzie używać istniejących zasobów HTML.
Ta metoda dynamicznego generowania PDF w .NET z HTML5 działa równie dobrze w aplikacjach konsolowych, aplikacjach Windows Forms, WPF, jak również na stronach internetowych i w MVC.
**IronPDF obsługuje również debugowanie HTML z Chrome dla idealnych PDF-ów. Samouczek dotyczący konfiguracji można znaleźć <a href="/how-to/pixel-perfect-html-to-pdf/">tutaj</a>.**
IronPDF jest dostępny w kilku językach, zarówno wewnątrz, jak i poza ekosystemem .NET.
- [Przewodnik F#](/get-started/fsharp-pdf-library-html-to-pdf/)
- [Przewodnik VB.NET](/get-started/vb-net-pdf/)
- [Python](/python/tutorials/html-to-pdf/)
- [Java](/java/tutorials/html-to-pdf/)
- [Node.js](/nodejs/tutorials/html-to-pdf/)
IronPDF jest darmowy do celów rozwojowych; klucz licencyjny jest potrzebny do wdrożenia na żywo i usunięcia znaku wodnego wersji próbnej. Możesz [kupić licencję tutaj](/licensing/) lub zarejestrować się na <a class='js-modal-open' data-modal-id='trial-license'>darmowy 30-dniowy klucz próbny tutaj</a>.
<hr class="separator" />
<p class="main-content__segment-title">Krok 1</p>
## Pobierz i zainstaluj bibliotekę HTML do PDF w C#
### Visual Studio - Menedżer pakietów NuGet
W Visual Studio kliknij prawym przyciskiem myszy na swoim projekcie w eksploratorze rozwiązań i wybierz "Zarządzaj pakietami NuGet...". Stamtąd po prostu wyszukaj IronPDF i zainstaluj najnowszą wersję do swojego rozwiązania... kliknij OK na wszelkie okna dialogowe, które się pojawią. To zadziała równie dobrze w projektach VB.NET.
```shell
:ProductInstall
```
### IronPDF na stronie NuGet
Aby uzyskać pełny przegląd funkcji, kompatybilności i pobrań IronPDF, sprawdź IronPDF na oficjalnej stronie NuGet: <a class="js-modal-open" href="https://www.nuget.org/packages/IronPdf" target="_blank" data-modal-id="trial-license-after-download">https://www.nuget.org/packages/IronPdf</a>
### Instalacja przez DLL
Inną opcją jest zainstalowanie bezpośrednio pliku DLL IronPDF. IronPDF można pobrać i ręcznie zainstalować do projektu lub GAC z <a class="js-modal-open" href="/packages/IronPdf.zip" data-modal-id="trial-license-after-download">https://ironpdf.com/packages/IronPdf.zip</a>
<hr class="separator" />
<p class="main-content__segment-title">Jak to zrobić - Samouczki</p>
## Utwórz PDF z ciągu HTML w C# .NET
**Jak: Przekonwertować ciąg HTML na PDF?** Jest to bardzo efektywna i satysfakcjonująca umiejętność, aby *utworzyć nowy plik PDF w C#*.
Możemy po prostu użyć metody [ChromePdfRenderer.RenderHtmlAsPdf](/object-reference/api/IronPdf.ChromePdfRenderer.html), aby zamienić dowolny ciąg HTML (HTML5) na PDF. **Renderowanie HTML do PDF w C#** jest realizowane przez w pełni funkcjonalną wersję silnika Google Chromium, która jest dostarczana z pakietem NuGet IronPDF.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-1.cs
```
`RenderHtmlAsPdf` w pełni obsługuje HTML5, CSS3, JavaScript i obrazy. Jeśli te zasoby znajdują się na dysku twardym, możemy chcieć ustawić drugi parametr `RenderHtmlAsPdf` na katalog zawierający zasoby. Ta metoda zwraca obiekt **PdfDocument**, który jest klasą używaną do przechowywania informacji o PDF.
### IronPDF wyrenderuje Twój HTML dokładnie tak, jak wygląda w Chrome
Mamy pełny samouczek poświęcony umożliwieniu Ci skonfigurowania Chrome do pełnego debugowania HTML, aby upewnić się, że zmiany, które tam widzisz podczas edytowania HTML, CSS i JavaScript, są idealnie takie same jak wyjściowy PDF z IronPDF, gdy zdecydujesz się na renderowanie. Proszę znaleźć samouczek tutaj: [Jak debugować HTML w Chrome, aby tworzyć idealne PDF-y](/how-to/pixel-perfect-html-to-pdf/).
**Ścieżka bazowa URL** (argument `BaseUrlOrPath`):
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-2.cs
```
Wszystkie odwołane arkusze stylów CSS, obrazy i pliki JavaScript będą względne do tej ścieżki bazowej i mogą być utrzymywane w schludnej i logicznej strukturze. Możesz również, oczywiście, zdecydować się na odwoływanie się do obrazów, arkuszy stylów i zasobów online, w tym czcionek internetowych, takich jak Google Fonts, a nawet jQuery.
<hr class="separator" />
## Eksportuj PDF używając istniejącego URL | URL do PDF
Renderowanie istniejących URL jako PDF-ów w C# jest bardzo efektywne i intuicyjne. Pozwala to również zespołom na podział pracy nad projektowaniem PDF i renderowaniem PDF na zapleczu między różnymi zespołami.
Zrenderujmy stronę z Wikipedia.com w poniższym przykładzie:
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-3.cs
```
Zauważysz, że hiperłącza, a nawet formularze HTML są zachowane w PDF wygenerowanym przez nasz kod C#.
Podczas renderowania istniejących stron internetowych mamy kilka sztuczek, które możemy zastosować:
### CSS do druku i ekranu
Typy mediów CSS pozwalają stronie na posiadanie oddzielnych stylów dla druku i ekranu. Możemy poinstruować IronPDF, aby renderował CSS "Print", który jest często prostszy. Domyślnie będą renderowane style CSS "Screen", które odpowiadają temu, co widzisz w przeglądarce.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-4.cs
```
Główny artykuł: [Porównanie HTML do PDF z idealnym odwzorowaniem](/how-to/pixel-perfect-html-to-pdf/#decide-to-use-css-media-type-print-or-screen).
### JavaScript
IronPDF obsługuje JavaScript, jQuery, a nawet AJAX. Możemy potrzebować poinstruować [IronPDF, aby **czekał** na zakończenie działania JS lub ajax](/how-to/javascript-to-pdf/) przed renderowaniem migawki naszej strony internetowej.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-5.cs
```
Możemy zademonstrować obsługę JavaScript, renderując stronę dokumentacji diagramu akordowego [d3.js](https://d3js.org/d3-chord), której wykresy są rysowane przez JavaScript po załadowaniu strony:
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-6.cs
```
### CSS responsywny
HTML do PDF z użyciem responsywnego CSS w .NET! [Responsywne strony internetowe](/how-to/html-to-pdf-responsive-css/) są zaprojektowane do przeglądania w przeglądarce. IronPDF nie otwiera rzeczywistego okna przeglądarki w systemie operacyjnym serwera. Bez widoku przeglądarki, responsywne układy mogą wracać do najwęższego punktu przerwania.
Zalecamy używanie typów mediów **Print** CSS, aby poradzić sobie z tym problemem. CSS do druku nie powinien być normalnie responsywny.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-7.cs
```
<hr class="separator" />
## Generuj PDF z strony HTML
Możemy również renderować dowolną stronę HTML do PDF na naszym dysku twardym. Wszystkie względne zasoby, takie jak CSS, obrazy i js, będą renderowane tak, jakby plik został otwarty za pomocą protokołu **file://**.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-8.cs
```
Ta metoda ma tę zaletę, że pozwala programiście na przetestowanie zawartości HTML w przeglądarce podczas tworzenia. Zalecamy Chrome, ponieważ jest to przeglądarka internetowa, na której oparty jest silnik renderujący IronPDF.
Aby przekonwertować [XML na PDF, możesz użyć szablonów XSLT, aby wydrukować zawartość XML do PDF](/how-to/xml-to-pdf/).
<hr class="separator" />
## Dodaj niestandardowe nagłówki i stopki
Nagłówki i stopki można dodawać do PDF-ów podczas ich renderowania lub do istniejących plików PDF za pomocą IronPDF.
Z IronPDF, nagłówki i stopki mogą zawierać proste treści tekstowe za pomocą klasy *`TextHeaderFooter`* - lub z obrazami i bogatą treścią HTML za pomocą klasy *`HtmlHeaderFooter`*.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-9.cs
```
Poznaj wszystkie opcje renderowania w następującym artykule: [Jak używać opcji renderowania](/how-to/rendering-options/).
### Nagłówki i stopki HTML
Klasa `HtmlHeaderFooter` pozwala na generowanie bogatych nagłówków i stopek za pomocą treści HTML5, które mogą nawet zawierać obrazy i arkusze stylów.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-10.cs
```
### Dynamiczne dane w nagłówkach i stopkach PDF
Możemy "scalić" treść do tekstu, a nawet HTML nagłówków i stopek, używając symboli zastępczych, takich jak:
- `{page}` dla bieżącego numeru strony
- `{total-pages}` dla całkowitej liczby stron w PDF
- `{url}` dla URL renderowanego PDF, jeśli został zrenderowany ze strony internetowej
- `{date}` dla dzisiejszej daty
- `{time}` dla bieżącego czasu
- `{html-title}` dla `<title>` renderowanego dokumentu HTML
- `{pdf-title}` dla tytułu dokumentu, który może być ustawiony za pomocą ChromePdfRenderOptions
<hr class="separator" />
## Ustawienia konwersji HTML do PDF w C#
Istnieje wiele niuansów dotyczących tego, jak nasi użytkownicy i klienci mogą oczekiwać, że treść PDF będzie renderowana.
Klasa `ChromePdfRenderer` zawiera właściwość **RenderingOptions**, która może być używana do ustawiania tych opcji.
Na przykład możemy chcieć wybrać, aby akceptować tylko dyrektywy CSS3 w stylu "`print`":
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-11.cs
```
Możemy również chcieć zmienić rozmiar marginesów drukowania, aby stworzyć więcej białej przestrzeni na stronie, aby zrobić miejsce na duże nagłówki lub stopki, a nawet ustawić zerowe marginesy do komercyjnego drukowania broszur lub plakatów:
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-12.cs
```
Możemy chcieć włączyć lub wyłączyć obrazy tła z elementów HTML:
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-13.cs
```
Możliwe jest również ustawienie naszych wyjściowych PDF-ów, aby były renderowane na dowolnym wirtualnym rozmiarze papieru - w tym w rozmiarach portretowych i krajobrazowych, a nawet niestandardowych rozmiarach, które mogą być ustawione w milimetrach lub calach.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-14.cs
```
Poznaj wszystkie opcje renderowania w następującym artykule: "[Jak używać opcji renderowania](/how-to/rendering-options/)."
<hr class="separator" />
## Zastosuj szablonowanie HTML
Szablonowanie lub "tworzenie wsadowe" PDF-ów jest powszechnym wymaganiem dla programistów internetowych i stron internetowych.
Zamiast szablonowania samego dokumentu PDF, z IronPDF możemy szablonować nasz HTML, używając istniejących, dobrze sprawdzonych technologii. Gdy szablon HTML jest połączony z danymi z ciągu zapytania lub bazy danych, kończymy z dynamicznie generowanym dokumentem PDF.
W najprostszym przypadku, użycie metody C# String.Format jest skuteczne dla podstawowego przykładu.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-15.cs
```
Jeśli plik HTML jest dłuższy, często możemy używać dowolnych symboli zastępczych, takich jak `[[NAME]]` i zastępować je później rzeczywistymi danymi.
Poniższy przykład utworzy 3 PDF-y, każdy spersonalizowany dla użytkownika.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-16.cs
```
### Zaawansowane szablonowanie z Handlebars.NET
Zaawansowaną metodą łączenia danych C# z HTML do generowania PDF jest użycie języka szablonów Handlebars.
Handlebars umożliwia tworzenie dynamicznego HTML z obiektów C# i instancji klas, w tym rekordów bazy danych. Handlebars jest szczególnie skuteczny tam, gdzie zapytanie może zwrócić nieznaną liczbę wierszy, na przykład przy generowaniu faktury.
Najpierw musimy dodać dodatkowy pakiet NuGet do naszego projektu: [https://www.nuget.org/packages/Handlebars.NET/](https://www.nuget.org/packages/Handlebars.NET/)
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-17.cs
```
Aby wyrenderować ten HTML, możemy po prostu użyć metody `RenderHtmlAsPdf`.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-18.cs
```
Możesz dowiedzieć się więcej o języku szablonów Handlebars i jego implementacji w C# z [GitHub](https://github.com/Handlebars-Net/Handlebars.Net).
### Dodaj podziały stron za pomocą HTML5
Powszechnym wymaganiem w dokumencie PDF jest paginacja. Programiści muszą kontrolować, gdzie strony PDF zaczynają się i kończą, aby uzyskać czysty, czytelny układ.
Najłatwiejszym sposobem na to jest mniej znany trik CSS, który wprowadzi podział strony do dowolnego drukowanego dokumentu HTML.
```html
<div style='page-break-after: always;'> </div>
```
Dostarczony HTML działa, ale nie jest najlepszą praktyką. Zalecamy dostosowanie atrybutu media jak w poniższym przykładzie. Taki schludny i uporządkowany sposób układania treści HTML na wielu stronach. Ponieważ IronPDF renderuje z typem mediów `screen` domyślnie, arkusz stylów `media="print"` jest stosowany tylko wtedy, gdy `RenderingOptions.CssMediaType` jest ustawiony na `PdfCssMediaType.Print` (zobacz [Ustawienia konwersji](#anchor-c-html-to-pdf-conversion-settings) powyżej).
```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>This is Page 1</h1>
</div>
<div class="page">
<h1>This is Page 2</h1>
</div>
<div class="page">
<h1>This is Page 3</h1>
</div>
</body>
</html>
```
Jak to zrobić, zawiera więcej [wskazówek i trików z podziałami stron](/how-to/html-to-pdf-page-breaks/).
<hr class="separator" />
## Dołącz stronę tytułową do PDF
IronPDF ułatwia łączenie dokumentów PDF. Najczęstszym zastosowaniem tej techniki jest dodanie strony tytułowej lub tylnej do istniejącego zrenderowanego dokumentu PDF.
Aby to zrobić, najpierw renderujemy stronę tytułową, a następnie używamy statycznej metody `PdfDocument.Merge()`, aby połączyć oba dokumenty.
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-19.cs
```
Pełny przykład kodu można znaleźć tutaj: [Przykład kodu strony tytułowej PDF](/examples/pdf-cover-page/).
<hr class="separator" />
## Dodaj znak wodny
Ostateczną funkcją [C# PDF](/use-case/csharp-pdf/), którą obsługuje IronPDF, jest dodanie znaku wodnego do dokumentów. Może to być używane do dodania notatki na każdej stronie, że dokument jest "poufny" lub "próbka".
```csharp
:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf-20.cs
```
Pełny przykład kodu można znaleźć tutaj: [Przykład kodu znakowania wodnego PDF](/examples/pdf-watermarking/).
<hr class="separator" />
## Pobierz kod źródłowy C#
Pełny **darmowy konwerter HTML do PDF w C# Kod źródłowy** dla tego samouczka jest dostępny do pobrania jako spakowany plik projektu Visual Studio 2022. Użyje on swojego silnika renderującego do generowania obiektów dokumentów PDF w C#.
[Pobierz ten samouczek jako projekt Visual Studio](/tutorials/html-to-pdf/downloads/CSharp-Html-To-Pdf-Tutorial.zip)
Darmowe pobranie zawiera wszystko, czego potrzebujesz, aby utworzyć PDF z HTML - w tym działające przykłady kodu C# PDF:
1. Konwersja ciągu HTML na PDF za pomocą C#
2. Plik HTML do PDF w C# (obsługujący CSS, JavaScript i obrazy)
3. HTML do PDF w C# używając URL ("URL do PDF")
4. Przykłady edycji i ustawień PDF w C#
5. Renderowanie wykresów JavaScript canvas, takich jak d3.js, do PDF
6. Biblioteka PDF dla C#
### Odwołanie do klasy
Programiści mogą być również zainteresowani odwołaniem do klasy `IronPdf.PdfDocument`:
[https://ironpdf.com/object-reference/api/IronPdf.PdfDocument.html](https://ironpdf.com/object-reference/api/IronPdf.PdfDocument.html)
Ten model obiektowy pokazuje, jak dokumenty PDF mogą być:
- Szyfrowane i chronione hasłem
- Edytowane lub 'stemplowane' nową treścią HTML
- Wzbogacane o obrazy na pierwszym planie i w tle
- Łączone, dołączane, przycinane i dzielone na poziomie strony lub dokumentu
- Parsowane w celu wyodrębnienia tekstu i obrazów, lub przetwarzane OCR za pomocą pakietu IronOCR
<hr class="separator" />
## Blazor HTML do PDF
Dodanie funkcji HTML do PDF do serwera Blazor jest łatwe, wystarczy:
1. Utwórz nowy projekt serwera Blazor lub użyj istniejącego
2. Dodaj bibliotekę IronPDF do swojego projektu za pomocą NuGet
3. Dodaj nowy komponent Razor lub użyj istniejącego
4. Dodaj `InputTextArea` i połącz go z IronPDF
5. Pozwól IronPDF zająć się resztą i wdroż
Aby uzyskać więcej informacji, przejdź do [pełnego przewodnika krok po kroku](/how-to/blazor-tutorial/) dotyczącego [konwersji HTML do PDF w aplikacjach Blazor](/how-to/blazor-tutorial/).
<img src="/static-assets/pdf/tutorials/blazor-tutorial/blazor-tutorial-3.webp" alt="PDF wygenerowany z strony serwera Blazor za pomocą IronPDF" />
<hr class="separator" />
## Porównanie z innymi bibliotekami PDF
IronPDF to potężna i pełna funkcji biblioteka PDF dostosowana do nowoczesnych programistów .NET. Dzięki natywnej konwersji HTML do PDF napędzanej zaawansowanym silnikiem Chromium, intuicyjnemu API i regularnym aktualizacjom, upraszcza rozwój, zapewniając jednocześnie wysokiej jakości wyniki. Przyjrzyjmy się bliżej, jak wypada w porównaniu z innymi narzędziami:
### PDFSharp
- **Podstawowe funkcje**: PDFsharp to biblioteka open-source (MIT) do tworzenia i edytowania dokumentów PDF w kodzie zarządzanym. Nie ma silnika renderującego HTML, więc konwersja treści internetowych do PDF wymaga oddzielnego renderera zewnętrznego.
- **Nowoczesne standardy**: IronPDF wykorzystuje nowoczesne technologie internetowe, w tym HTML, CSS i JavaScript, dzięki swojemu silnikowi opartemu na Chromium, zapewniając, że PDF-y zachowują współczesny wygląd i styl.
- **Wsparcie i aktualizacje**: PDFsharp jest open source i wydaje wersję co kilka miesięcy, z komercyjnym wsparciem sprzedawanym oddzielnie przez jego opiekuna. IronPDF wydaje miesięczne aktualizacje i poprawki bezpieczeństwa, a każda licencja obejmuje profesjonalne wsparcie inżynieryjne, co ma znaczenie dla aplikacji korporacyjnych.
### wkhtmltopdf
- **Łatwość integracji**: wkhtmltopdf to narzędzie wiersza poleceń z biblioteką C; nie ma oficjalnego pakietu .NET, więc używanie go z .NET oznacza uruchamianie natywnego pliku binarnego (lub wywoływanie go przez zewnętrzny wrapper, taki jak DinkToPdf) i dostarczanie tego pliku binarnego dla każdej platformy, na którą wdrażasz.
- **Technologia renderowania**: wkhtmltopdf renderuje za pomocą QtWebKit, forka WebKit, który Qt zdeprecjonował w 2015 roku i usunął w Qt 5.6, więc nowoczesne funkcje JavaScript i CSS nie są obsługiwane, zwłaszcza na dynamicznych, bogatych w treść stronach internetowych. Silnik Chromium IronPDF renderuje aktualne standardy internetowe.
- **Ciągły rozwój**: ostatnia wersja wkhtmltopdf to 0.12.6 z czerwca 2020 roku, a jego repozytorium GitHub zostało zarchiwizowane w styczniu 2023 roku, więc nie ma wsparcia od dostawcy. IronPDF nadal się rozwija, z miesięcznymi aktualizacjami i dedykowaną obsługą klienta.
### iTextSharp
- **Renderowanie HTML do PDF**: iText konwertuje HTML za pomocą swojego oddzielnego dodatku pdfHTML, silnika układu CSS, a nie przeglądarki, a linia iTextSharp 5 jest teraz utrzymywana tylko w zakresie poprawek bezpieczeństwa. IronPDF renderuje HTML z wbudowanym silnikiem Chromium w pakiecie podstawowym, bez potrzeby dodatków.
- **Doświadczenie programisty**: API iText działa na poziomie obiektów PDF i elementów układu, co jest potężne, ale oznacza więcej kodu dla codziennych zadań. IronPDF oferuje czyste i intuicyjne API C#, upraszczając kodowanie i przyspieszając dostarczanie projektów.
- **Utrzymanie i wsparcie**: Darmowe użycie iText jest objęte licencją AGPL, a wsparcie dostawcy jest zarezerwowane dla licencji komercyjnych, a iTextSharp 5.x jest na końcu życia, z wyjątkiem poprawek bezpieczeństwa. IronPDF obejmuje profesjonalne wsparcie i miesięczne aktualizacje z każdą licencją.
### Aspose.PDF
- **Jakość konwersji**: Aspose.PDF konwertuje HTML za pomocą własnego silnika układu, a nie przeglądarki. Jego dokumentacja konwertuje stronę internetową, najpierw pobierając HTML za pomocą `HttpClient` do strumienia i przekazując go do `Document` z `HtmlLoadOptions`, zamiast renderować bezpośrednio z URL. W naszym teście r/nfl poniżej, wynik był prawie pusty: logo społeczności, jeden nagłówek i kilka pustych pól. Silnik Chromium IronPDF renderuje URL bezpośrednio, w tym JavaScript.
- **Użyteczność API**: API Aspose.PDF może być rozbudowane, podczas gdy IronPDF koncentruje się na doświadczeniu przyjaznym dla programisty, które minimalizuje czas konfiguracji i zwiększa produktywność.
- **Wierność wyjściowa**: Ponieważ IronPDF renderuje z Chromium, PDF odpowiada temu, co Chrome pokazuje dla tego samego HTML, co sprawia, że projektowanie i debugowanie są przewidywalne dla generowania PDF-ów na dużą skalę.
### Syncfusion PDF
- **Złożoność API**: Syncfusion PDF to zdolna biblioteka z większą powierzchnią API do nauki. IronPDF, przeciwnie, zapewnia prosty API do szybkiej integracji.
- **Silnik renderujący**: Konwerter HTML Syncfusion teraz używa silnika Chromium Blink; jego starsze silniki WebKit i Internet Explorer zostały oznaczone jako przestarzałe w Essential Studio 2022 Volume 3. W naszym teście r/nfl poniżej, wynik Syncfusion zachował główny kanał, ale pominął panele nawigacyjne i społecznościowe, podczas gdy silnik Chromium IronPDF zrenderował całą stronę.
- **Poza konwersją**: Pakiet IronPDF obejmuje również podpisy cyfrowe, adnotacje, wypełnianie formularzy i stemplowanie kodów kreskowych, więc ta sama biblioteka obsługuje resztę przepływu pracy z dokumentami.
### Porównanie renderowania
Aby porównać jakość konwersji HTML do PDF tych bibliotek, użyliśmy strony społeczności Reddit, r/nfl, która zawiera dynamiczną treść, aktualizacje na żywo, nowoczesny CSS i elementy oparte na JavaScript:
`https://www.reddit.com/r/nfl/`

Oto wyniki z jednego uruchomienia z domyślnymi ustawieniami każdej biblioteki. Syncfusion i Aspose.PDF działały jako wersje ewaluacyjne, dlatego ich wynik zawiera znaki wodne ewaluacyjne (*kliknij każdy obraz, aby go powiększyć*):
<div class="competitors-section__wrapper">
<div class="competitors__card half">
<p class="competitors__header">IronPDF</p>
<img
class="competitors__image img-popup"
src="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-2.webp"
alt="Wynik konwersji IronPDF strony Reddit r/nfl z HTML do PDF"
data-fullsize="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-2.webp" />
<small><strong>Dobrze sformatowany i wizualnie dokładny PDF, zachowujący dynamiczną treść i nowoczesne stylizacje.</strong></small>
</div>
<div class="competitors__card half">
<p class="competitors__header">SyncFusion</p>
<img
class="competitors__image img-popup"
src="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-3.webp"
alt="Wynik konwersji Syncfusion strony Reddit r/nfl z HTML do PDF"
data-fullsize="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-3.webp" />
<small><strong>Przekonwertowano z wersją próbną. Główny kanał, treść postów i stylizacja przeszły w wąskim układzie jednokolumnowym, ale lewa nawigacja i prawy panel społecznościowy zostały pominięte.</strong></small>
</div>
</div>
<div class="competitors-section__wrapper">
<div class="competitors__card half">
<p class="competitors__header">Aspose.PDF</p>
<img
class="competitors__image img-popup"
src="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-4.webp"
alt="Wynik konwersji Aspose.PDF strony Reddit r/nfl z HTML do PDF"
data-fullsize="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-4.webp" />
<small><strong>Wersja ewaluacyjna; wymagała pobrania HTML najpierw (Aspose.PDF ładuje HTML ze strumienia, a nie z URL). Wynik był prawie pusty: logo społeczności, jeden nagłówek i kilka pustych pól.</strong></small>
</div>
<div class="competitors__card half">
<p class="competitors__header">Wkhtmltopdf</p>
<img
class="competitors__image img-popup"
src="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-5.webp"
alt="Wynik konwersji wkhtmltopdf strony Reddit r/nfl z HTML do PDF"
data-fullsize="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-5.webp" />
<small><strong>wkhtmltopdf zakończył konwersję, ale wynik to tekst i obrazy strony bez jej układu, stylizacji, dynamicznych elementów czy interaktywności. To sprawia, że wkhtmltopdf jest nieodpowiedni dla nowoczesnych, dynamicznych stron internetowych.</strong></small>
</div>
</div>
[{i:(PDFsharp nie ma silnika renderującego HTML, a iText konwertuje HTML tylko przez swój oddzielny dodatek pdfHTML, więc żaden z nich nie został uwzględniony w tym teście renderowania przeglądarki.)}]
### Wniosek
Dla programistów .NET poszukujących nowoczesnego i niezawodnego rozwiązania PDF, IronPDF jest mocnym wyborem. Jego konwersja HTML do PDF oparta na Chromium, łatwość użycia, regularne aktualizacje i szeroki zestaw funkcji czynią go najlepszym wyborem. Niezależnie od tego, czy pracujesz nad małym projektem, czy dużą aplikacją korporacyjną, IronPDF zwiększa produktywność, unikając ryzyka związanego z przestarzałymi lub nieobsługiwanymi bibliotekami. Zaprojektowany do zastosowań komercyjnych, IronPDF utrzymuje Twoje projekty na utrzymywanej i wspieranej bibliotece.
W naszym teście z rzeczywistą dynamiczną stroną internetową, IronPDF wyprodukował najbardziej kompletną i dokładną renderowanie. Syncfusion pominął panele nawigacyjne i społecznościowe. Aspose.PDF wymagał najpierw pobrania HTML i nadal renderował prawie żadną część strony. wkhtmltopdf wyprodukował tekst i obrazy bez stylizacji strony, co jest słabym dopasowaniem do nowoczesnych stron.
Dla nowoczesnych przepływów pracy HTML do PDF, ta kombinacja dokładności renderowania i małego, czytelnego API to to, co wyróżnia IronPDF.
**Doświadcz pełnego zestawu funkcji IronPDF, który z łatwością konwertuje dynamiczny, ciężki CSS HTML do PDF. Wypróbuj teraz z naszą [darmową wersją próbną](trial-license).**
<hr class="separator" />
## Obejrzyj wideo z samouczkiem HTML do PDF w C#
<a name="video"></a>
Z dokumentem PDF możesz odwiedzić następujący link, aby dowiedzieć się, jak [ustawić Chrome, aby otwierał PDF-y w przeglądarce zamiast je pobierać](https://support.google.com/chrome/answer/114662).
!!!--LIBRARY_GET_STARTED_WITH_PRODUCT_TRIAL_EXTENDED_BLOCK--!!!
Jako twórcy IronPDF, wiemy, jak ważne jest, aby konwersja HTML do PDF dawała dokładne, wysokiej jakości wyniki, które spełniają oczekiwania klientów. Ten samouczek C# poprowadzi Cię przez budowę konwertera HTML do PDF dla Twoich aplikacji, projektów i stron internetowych. Opracujemy konwerter HTML do PDF w C#, a dokumenty PDF wygenerowane przez IronPDF będą idealnie odwzorowane w stosunku do PDF-ów generowanych przez przeglądarkę Google Chrome.
Tworzenie plików PDF programowo w .NET może być frustrującym zadaniem. Format pliku dokumentu PDF został zaprojektowany bardziej dla drukarek niż dla programistów. A C# nie ma wielu odpowiednich bibliotek ani funkcji do generowania PDF wbudowanych, wiele bibliotek wymaga dodatkowej konfiguracji i powoduje dalszą frustrację, gdy wymagają wielu linii kodu do wykonania prostego zadania.
Narzędzie do konwersji HTML do PDF w C#, które będziemy używać w tym samouczku, to IronPDF od Iron Software, bardzo popularna biblioteka do generowania i edytowania PDF w C#. Ta biblioteka ma pełną funkcjonalność edycji i generowania PDF, działa od razu po instalacji, robi dokładnie to, czego potrzebujesz w najmniejszej liczbie linii, i ma znakomitą dokumentację swoich 50+ funkcji. IronPDF wyróżnia się tym, że obsługuje .NET 10, .NET 9, .NET 8, .NET 7, .NET 6 i .NET 5, .NET Core, .NET Standard i .NET Framework na Windows, macOS, Linux, Docker, Azure i AWS.
Z C# i IronPDF, logika "generowania dokumentu PDF" lub "konwersji HTML do PDF" jest prosta. Dzięki zaawansowanemu rendererowi Chrome w IronPDF, większość lub całość projektu i układu dokumentu PDF będzie używać istniejących zasobów HTML.
Ta metoda dynamicznego generowania PDF w .NET z HTML5 działa równie dobrze w aplikacjach konsolowych, aplikacjach Windows Forms, WPF, jak również na stronach internetowych i w MVC.
IronPDF obsługuje również debugowanie HTML z Chrome dla idealnych PDF-ów. Samouczek dotyczący konfiguracji można znaleźć tutaj.
IronPDF jest dostępny w kilku językach, zarówno wewnątrz, jak i poza ekosystemem .NET.
IronPDF jest darmowy do celów rozwojowych; klucz licencyjny jest potrzebny do wdrożenia na żywo i usunięcia znaku wodnego wersji próbnej. Możesz kupić licencję tutaj lub zarejestrować się na darmowy 30-dniowy klucz próbny tutaj.
Krok 1
Pobierz i zainstaluj bibliotekę HTML do PDF w C#
Visual Studio - Menedżer pakietów NuGet
W Visual Studio kliknij prawym przyciskiem myszy na swoim projekcie w eksploratorze rozwiązań i wybierz "Zarządzaj pakietami NuGet...". Stamtąd po prostu wyszukaj IronPDF i zainstaluj najnowszą wersję do swojego rozwiązania... kliknij OK na wszelkie okna dialogowe, które się pojawią. To zadziała równie dobrze w projektach VB.NET.
PM > Install-Package IronPdf
Install-Package IronPdf
IronPDF na stronie NuGet
Aby uzyskać pełny przegląd funkcji, kompatybilności i pobrań IronPDF, sprawdź IronPDF na oficjalnej stronie NuGet: https://www.nuget.org/packages/IronPdf
Instalacja przez DLL
Inną opcją jest zainstalowanie bezpośrednio pliku DLL IronPDF. IronPDF można pobrać i ręcznie zainstalować do projektu lub GAC z https://ironpdf.com/packages/IronPdf.zip
Jak to zrobić - Samouczki
Utwórz PDF z ciągu HTML w C# .NET
Jak: Przekonwertować ciąg HTML na PDF? Jest to bardzo efektywna i satysfakcjonująca umiejętność, aby utworzyć nowy plik PDF w C#.
Możemy po prostu użyć metody ChromePdfRenderer.RenderHtmlAsPdf, aby zamienić dowolny ciąg HTML (HTML5) na PDF. Renderowanie HTML do PDF w C# jest realizowane przez w pełni funkcjonalną wersję silnika Google Chromium, która jest dostarczana z pakietem NuGet IronPDF.
using IronPdf;// ChromePdfRenderer turns HTML into a PDF using IronPDF's embedded Chrome enginevar renderer = new ChromePdfRenderer();// Render an HTML string. The result is a PdfDocument held in memoryvar pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>");// Write the PDF to diskpdf.SaveAs("pixel-perfect.pdf");
using IronPdf;
// ChromePdfRenderer turns HTML into a PDF using IronPDF's embedded Chrome engine
var renderer = new ChromePdfRenderer();
// Render an HTML string. The result is a PdfDocument held in memory
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>");
// Write the PDF to disk
pdf.SaveAs("pixel-perfect.pdf");
ImportsIronPdf' ChromePdfRenderer turns HTML into a PDF using IronPDF's embedded Chrome engineDim renderer = New ChromePdfRenderer()' Render an HTML string. The result is a PdfDocument held in memoryDim pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>")' Write the PDF to diskpdf.SaveAs("pixel-perfect.pdf")
Imports IronPdf
' ChromePdfRenderer turns HTML into a PDF using IronPDF's embedded Chrome engine
Dim renderer = New ChromePdfRenderer()
' Render an HTML string. The result is a PdfDocument held in memory
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>")
' Write the PDF to disk
pdf.SaveAs("pixel-perfect.pdf")
RenderHtmlAsPdf w pełni obsługuje HTML5, CSS3, JavaScript i obrazy. Jeśli te zasoby znajdują się na dysku twardym, możemy chcieć ustawić drugi parametr RenderHtmlAsPdf na katalog zawierający zasoby. Ta metoda zwraca obiekt PdfDocument, który jest klasą używaną do przechowywania informacji o PDF.
IronPDF wyrenderuje Twój HTML dokładnie tak, jak wygląda w Chrome
Mamy pełny samouczek poświęcony umożliwieniu Ci skonfigurowania Chrome do pełnego debugowania HTML, aby upewnić się, że zmiany, które tam widzisz podczas edytowania HTML, CSS i JavaScript, są idealnie takie same jak wyjściowy PDF z IronPDF, gdy zdecydujesz się na renderowanie. Proszę znaleźć samouczek tutaj: Jak debugować HTML w Chrome, aby tworzyć idealne PDF-y.
Ścieżka bazowa URL (argument BaseUrlOrPath):
using IronPdf;var renderer = new ChromePdfRenderer();// The second argument is the base path. Relative URLs in the HTML (the image// below, but also stylesheets, scripts and fonts) are resolved against it.var pdf = renderer.RenderHtmlAsPdf("<img src='image1.png'/>", @"C:\MyProject\Assets\");pdf.SaveAs(@"C:\MyProject\Assets\output.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// The second argument is the base path. Relative URLs in the HTML (the image
// below, but also stylesheets, scripts and fonts) are resolved against it.
var pdf = renderer.RenderHtmlAsPdf("<img src='image1.png'/>", @"C:\MyProject\Assets\");
pdf.SaveAs(@"C:\MyProject\Assets\output.pdf");
Dim renderer = New ChromePdfRenderer()' The second argument is the base path. Relative URLs in the HTML (the image' below, but also stylesheets, scripts and fonts) are resolved against it.Dim pdf = renderer.RenderHtmlAsPdf("<img src='image1.png'/>", "C:\MyProject\Assets\")pdf.SaveAs("C:\MyProject\Assets\output.pdf")
Dim renderer = New ChromePdfRenderer()
' The second argument is the base path. Relative URLs in the HTML (the image
' below, but also stylesheets, scripts and fonts) are resolved against it.
Dim pdf = renderer.RenderHtmlAsPdf("<img src='image1.png'/>", "C:\MyProject\Assets\")
pdf.SaveAs("C:\MyProject\Assets\output.pdf")
Wszystkie odwołane arkusze stylów CSS, obrazy i pliki JavaScript będą względne do tej ścieżki bazowej i mogą być utrzymywane w schludnej i logicznej strukturze. Możesz również, oczywiście, zdecydować się na odwoływanie się do obrazów, arkuszy stylów i zasobów online, w tym czcionek internetowych, takich jak Google Fonts, a nawet jQuery.
Eksportuj PDF używając istniejącego URL | URL do PDF
Renderowanie istniejących URL jako PDF-ów w C# jest bardzo efektywne i intuicyjne. Pozwala to również zespołom na podział pracy nad projektowaniem PDF i renderowaniem PDF na zapleczu między różnymi zespołami.
Zrenderujmy stronę z Wikipedia.com w poniższym przykładzie:
using IronPdf;var renderer = new ChromePdfRenderer();// Render a live web page straight from its URLvar pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF");// The PDF is written next to the executablepdf.SaveAs("wikipedia.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Render a live web page straight from its URL
var pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF");
// The PDF is written next to the executable
pdf.SaveAs("wikipedia.pdf");
ImportsIronPdfDim renderer = New ChromePdfRenderer()' Render a live web page straight from its URLDim pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF")' The PDF is written next to the executablepdf.SaveAs("wikipedia.pdf")
Imports IronPdf
Dim renderer = New ChromePdfRenderer()
' Render a live web page straight from its URL
Dim pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF")
' The PDF is written next to the executable
pdf.SaveAs("wikipedia.pdf")
Zauważysz, że hiperłącza, a nawet formularze HTML są zachowane w PDF wygenerowanym przez nasz kod C#.
Podczas renderowania istniejących stron internetowych mamy kilka sztuczek, które możemy zastosować:
CSS do druku i ekranu
Typy mediów CSS pozwalają stronie na posiadanie oddzielnych stylów dla druku i ekranu. Możemy poinstruować IronPDF, aby renderował CSS "Print", który jest często prostszy. Domyślnie będą renderowane style CSS "Screen", które odpowiadają temu, co widzisz w przeglądarce.
using IronPdf;using IronPdf.Rendering;var renderer = new ChromePdfRenderer();// Choose which CSS media type the page is rendered with.// Screen (the default) renders the page as a browser displays it;// Print applies the page's @media print rules instead.// renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen;renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Choose which CSS media type the page is rendered with.
// Screen (the default) renders the page as a browser displays it;
// Print applies the page's @media print rules instead.
// renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen;
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
ImportsIronPdfImportsIronPdf.RenderingDim renderer = New ChromePdfRenderer()' Choose which CSS media type the page is rendered with.' Screen (the default) renders the page as a browser displays it;' Print applies the page's @media print rules instead.' renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screenrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
Imports IronPdf
Imports IronPdf.Rendering
Dim renderer = New ChromePdfRenderer()
' Choose which CSS media type the page is rendered with.
' Screen (the default) renders the page as a browser displays it;
' Print applies the page's @media print rules instead.
' renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
using IronPdf;var renderer = new ChromePdfRenderer();// Let the page's JavaScript run before the snapshot is takenrenderer.RenderingOptions.EnableJavaScript = true;// Give scripts and AJAX calls 500 milliseconds to finish before rendering.// For event-driven pages, WaitFor.NetworkIdle() or WaitFor.JavaScript() wait// for a signal instead of a fixed delay.renderer.RenderingOptions.WaitFor.RenderDelay(500);
using IronPdf;
var renderer = new ChromePdfRenderer();
// Let the page's JavaScript run before the snapshot is taken
renderer.RenderingOptions.EnableJavaScript = true;
// Give scripts and AJAX calls 500 milliseconds to finish before rendering.
// For event-driven pages, WaitFor.NetworkIdle() or WaitFor.JavaScript() wait
// for a signal instead of a fixed delay.
renderer.RenderingOptions.WaitFor.RenderDelay(500);
Dim renderer = New ChromePdfRenderer()' Let the page's JavaScript run before the snapshot is takenrenderer.RenderingOptions.EnableJavaScript = True' Give scripts and AJAX calls 500 milliseconds to finish before rendering.' For event-driven pages, WaitFor.NetworkIdle() or WaitFor.JavaScript() wait' for a signal instead of a fixed delay.renderer.RenderingOptions.WaitFor.RenderDelay(500)
Dim renderer = New ChromePdfRenderer()
' Let the page's JavaScript run before the snapshot is taken
renderer.RenderingOptions.EnableJavaScript = True
' Give scripts and AJAX calls 500 milliseconds to finish before rendering.
' For event-driven pages, WaitFor.NetworkIdle() or WaitFor.JavaScript() wait
' for a signal instead of a fixed delay.
renderer.RenderingOptions.WaitFor.RenderDelay(500)
Możemy zademonstrować obsługę JavaScript, renderując stronę dokumentacji diagramu akordowego d3.js, której wykresy są rysowane przez JavaScript po załadowaniu strony:
using IronPdf;var renderer = new ChromePdfRenderer();// The chart is drawn by JavaScript, so let it run and give it a moment to finishrenderer.RenderingOptions.EnableJavaScript = true;renderer.RenderingOptions.WaitFor.RenderDelay(500);// Render the d3.js chord-diagram documentation page, whose charts are drawn by JavaScriptvar pdf = renderer.RenderUrlAsPdf("https://d3js.org/d3-chord");pdf.SaveAs("chart.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// The chart is drawn by JavaScript, so let it run and give it a moment to finish
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay(500);
// Render the d3.js chord-diagram documentation page, whose charts are drawn by JavaScript
var pdf = renderer.RenderUrlAsPdf("https://d3js.org/d3-chord");
pdf.SaveAs("chart.pdf");
ImportsIronPdfDim renderer = New ChromePdfRenderer()' The chart is drawn by JavaScript, so let it run and give it a moment to finishrenderer.RenderingOptions.EnableJavaScript = Truerenderer.RenderingOptions.WaitFor.RenderDelay(500)' Render the d3.js chord-diagram documentation page, whose charts are drawn by JavaScriptDim pdf = renderer.RenderUrlAsPdf("https://d3js.org/d3-chord")pdf.SaveAs("chart.pdf")
Imports IronPdf
Dim renderer = New ChromePdfRenderer()
' The chart is drawn by JavaScript, so let it run and give it a moment to finish
renderer.RenderingOptions.EnableJavaScript = True
renderer.RenderingOptions.WaitFor.RenderDelay(500)
' Render the d3.js chord-diagram documentation page, whose charts are drawn by JavaScript
Dim pdf = renderer.RenderUrlAsPdf("https://d3js.org/d3-chord")
pdf.SaveAs("chart.pdf")
CSS responsywny
HTML do PDF z użyciem responsywnego CSS w .NET! Responsywne strony internetowe są zaprojektowane do przeglądania w przeglądarce. IronPDF nie otwiera rzeczywistego okna przeglądarki w systemie operacyjnym serwera. Bez widoku przeglądarki, responsywne układy mogą wracać do najwęższego punktu przerwania.
Zalecamy używanie typów mediów Print CSS, aby poradzić sobie z tym problemem. CSS do druku nie powinien być normalnie responsywny.
using IronPdf;using IronPdf.Rendering;var renderer = new ChromePdfRenderer();// Responsive layouts are designed for a browser viewport, so render the page's// print stylesheet instead of its screen stylesheetrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Responsive layouts are designed for a browser viewport, so render the page's
// print stylesheet instead of its screen stylesheet
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
ImportsIronPdfImportsIronPdf.RenderingDim renderer As New ChromePdfRenderer()' Responsive layouts are designed for a browser viewport, so render the page's' print stylesheet instead of its screen stylesheetrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
Imports IronPdf
Imports IronPdf.Rendering
Dim renderer As New ChromePdfRenderer()
' Responsive layouts are designed for a browser viewport, so render the page's
' print stylesheet instead of its screen stylesheet
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
Generuj PDF z strony HTML
Możemy również renderować dowolną stronę HTML do PDF na naszym dysku twardym. Wszystkie względne zasoby, takie jak CSS, obrazy i js, będą renderowane tak, jakby plik został otwarty za pomocą protokołu file://.
using IronPdf;var renderer = new ChromePdfRenderer();// Render an HTML file from disk. Relative CSS, image and script paths// resolve against the file's own folder, as if opened with file://var pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html");pdf.SaveAs("Invoice.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Render an HTML file from disk. Relative CSS, image and script paths
// resolve against the file's own folder, as if opened with file://
var pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html");
pdf.SaveAs("Invoice.pdf");
Dim renderer = New ChromePdfRenderer()' Render an HTML file from disk. Relative CSS, image and script paths' resolve against the file's own folder, as if opened with file://Dim pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html")pdf.SaveAs("Invoice.pdf")
Dim renderer = New ChromePdfRenderer()
' Render an HTML file from disk. Relative CSS, image and script paths
' resolve against the file's own folder, as if opened with file://
Dim pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html")
pdf.SaveAs("Invoice.pdf")
Ta metoda ma tę zaletę, że pozwala programiście na przetestowanie zawartości HTML w przeglądarce podczas tworzenia. Zalecamy Chrome, ponieważ jest to przeglądarka internetowa, na której oparty jest silnik renderujący IronPDF.
Nagłówki i stopki można dodawać do PDF-ów podczas ich renderowania lub do istniejących plików PDF za pomocą IronPDF.
Z IronPDF, nagłówki i stopki mogą zawierać proste treści tekstowe za pomocą klasy TextHeaderFooter - lub z obrazami i bogatą treścią HTML za pomocą klasy HtmlHeaderFooter.
using IronPdf;using IronPdf.Rendering;// Create a PDF from an existing HTML file with rendering options set up frontvar renderer = new ChromePdfRenderer{RenderingOptions = new ChromePdfRenderOptions { // Margins are in millimetersMarginTop = 50,MarginBottom = 50, // Render the page's print stylesheetCssMediaType = PdfCssMediaType.Print, // Plain-text header: the document title, centered, above a divider lineTextHeader = new TextHeaderFooter {CenterText = "{pdf-title}",DrawDividerLine = true,FontSize = 16 }, // Plain-text footer: date and time on the left, page numbers on the rightTextFooter = new TextHeaderFooter {LeftText = "{date} {time}",RightText = "Page {page} of {total-pages}",DrawDividerLine = true,FontSize = 14 } }};var pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html");pdf.SaveAs("Invoice.pdf");// Open the result in the default PDF viewerSystem.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo{FileName = "Invoice.pdf",UseShellExecute = true});
using IronPdf;
using IronPdf.Rendering;
// Create a PDF from an existing HTML file with rendering options set up front
var renderer = new ChromePdfRenderer
{
RenderingOptions = new ChromePdfRenderOptions
{
// Margins are in millimeters
MarginTop = 50,
MarginBottom = 50,
// Render the page's print stylesheet
CssMediaType = PdfCssMediaType.Print,
// Plain-text header: the document title, centered, above a divider line
TextHeader = new TextHeaderFooter
{
CenterText = "{pdf-title}",
DrawDividerLine = true,
FontSize = 16
},
// Plain-text footer: date and time on the left, page numbers on the right
TextFooter = new TextHeaderFooter
{
LeftText = "{date} {time}",
RightText = "Page {page} of {total-pages}",
DrawDividerLine = true,
FontSize = 14
}
}
};
var pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html");
pdf.SaveAs("Invoice.pdf");
// Open the result in the default PDF viewer
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo
{
FileName = "Invoice.pdf",
UseShellExecute = true
});
ImportsIronPdfImportsIronPdf.Rendering' Create a PDF from an existing HTML file with rendering options set up frontDim renderer = New ChromePdfRendererWith { .RenderingOptions = New ChromePdfRenderOptionsWith { ' Margins are in millimeters .MarginTop = 50, .MarginBottom = 50, ' Render the page's print stylesheet .CssMediaType = PdfCssMediaType.Print, ' Plain-text header: the document title, centered, above a divider line .TextHeader = New TextHeaderFooterWith { .CenterText = "{pdf-title}", .DrawDividerLine = True, .FontSize = 16 }, ' Plain-text footer: date and time on the left, page numbers on the right .TextFooter = New TextHeaderFooterWith { .LeftText = "{date} {time}", .RightText = "Page {page} of {total-pages}", .DrawDividerLine = True, .FontSize = 14 } }}Dim pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html")pdf.SaveAs("Invoice.pdf")' Open the result in the default PDF viewerSystem.Diagnostics.Process.Start(New System.Diagnostics.ProcessStartInfoWith { .FileName = "Invoice.pdf", .UseShellExecute = True})
Imports IronPdf
Imports IronPdf.Rendering
' Create a PDF from an existing HTML file with rendering options set up front
Dim renderer = New ChromePdfRenderer With {
.RenderingOptions = New ChromePdfRenderOptions With {
' Margins are in millimeters
.MarginTop = 50,
.MarginBottom = 50,
' Render the page's print stylesheet
.CssMediaType = PdfCssMediaType.Print,
' Plain-text header: the document title, centered, above a divider line
.TextHeader = New TextHeaderFooter With {
.CenterText = "{pdf-title}",
.DrawDividerLine = True,
.FontSize = 16
},
' Plain-text footer: date and time on the left, page numbers on the right
.TextFooter = New TextHeaderFooter With {
.LeftText = "{date} {time}",
.RightText = "Page {page} of {total-pages}",
.DrawDividerLine = True,
.FontSize = 14
}
}
}
Dim pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html")
pdf.SaveAs("Invoice.pdf")
' Open the result in the default PDF viewer
System.Diagnostics.Process.Start(New System.Diagnostics.ProcessStartInfo With {
.FileName = "Invoice.pdf",
.UseShellExecute = True
})
Klasa HtmlHeaderFooter pozwala na generowanie bogatych nagłówków i stopek za pomocą treści HTML5, które mogą nawet zawierać obrazy i arkusze stylów.
using IronPdf;var renderer = new ChromePdfRenderer();// An HTML footer can carry markup, styles and images.// {page} and {total-pages} are filled in for every page.renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter{HtmlFragment = "<div style='text-align:right'><em style='color:pink'>page {page} of {total-pages}</em></div>"};
using IronPdf;
var renderer = new ChromePdfRenderer();
// An HTML footer can carry markup, styles and images.
// {page} and {total-pages} are filled in for every page.
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align:right'><em style='color:pink'>page {page} of {total-pages}</em></div>"
};
Dim renderer = New ChromePdfRenderer()' An HTML footer can carry markup, styles and images.' {page} and {total-pages} are filled in for every page.renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooterWith { .HtmlFragment = "<div style='text-align:right'><em style='color:pink'>page {page} of {total-pages}</em></div>"}
Dim renderer = New ChromePdfRenderer()
' An HTML footer can carry markup, styles and images.
' {page} and {total-pages} are filled in for every page.
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
.HtmlFragment = "<div style='text-align:right'><em style='color:pink'>page {page} of {total-pages}</em></div>"
}
Dynamiczne dane w nagłówkach i stopkach PDF
Możemy "scalić" treść do tekstu, a nawet HTML nagłówków i stopek, używając symboli zastępczych, takich jak:
{page} dla bieżącego numeru strony
{total-pages} dla całkowitej liczby stron w PDF
{url} dla URL renderowanego PDF, jeśli został zrenderowany ze strony internetowej
{date} dla dzisiejszej daty
{time} dla bieżącego czasu
{html-title} dla <title> renderowanego dokumentu HTML
{pdf-title} dla tytułu dokumentu, który może być ustawiony za pomocą ChromePdfRenderOptions
Ustawienia konwersji HTML do PDF w C#
Istnieje wiele niuansów dotyczących tego, jak nasi użytkownicy i klienci mogą oczekiwać, że treść PDF będzie renderowana.
Klasa ChromePdfRenderer zawiera właściwość RenderingOptions, która może być używana do ustawiania tych opcji.
Na przykład możemy chcieć wybrać, aby akceptować tylko dyrektywy CSS3 w stylu "print":
using IronPdf;using IronPdf.Rendering;var renderer = new ChromePdfRenderer();// Render the page's @media print CSS rather than its screen stylesrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;renderer.RenderHtmlAsPdf("<html><body><h1>Hello, World!</h1></body></html>").SaveAs("Output.pdf");
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Render the page's @media print CSS rather than its screen styles
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
renderer.RenderHtmlAsPdf("<html><body><h1>Hello, World!</h1></body></html>").SaveAs("Output.pdf");
ImportsIronPdfImportsIronPdf.RenderingDim renderer = New ChromePdfRenderer()' Render the page's @media print CSS rather than its screen stylesrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Printrenderer.RenderHtmlAsPdf("<html><body><h1>Hello, World!</h1></body></html>").SaveAs("Output.pdf")
Imports IronPdf
Imports IronPdf.Rendering
Dim renderer = New ChromePdfRenderer()
' Render the page's @media print CSS rather than its screen styles
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
renderer.RenderHtmlAsPdf("<html><body><h1>Hello, World!</h1></body></html>").SaveAs("Output.pdf")
Możemy również chcieć zmienić rozmiar marginesów drukowania, aby stworzyć więcej białej przestrzeni na stronie, aby zrobić miejsce na duże nagłówki lub stopki, a nawet ustawić zerowe marginesy do komercyjnego drukowania broszur lub plakatów:
using IronPdf;var renderer = new ChromePdfRenderer();// Page margins in millimeters. Larger margins leave room for headers and// footers; set them to 0 for edge-to-edge brochures and posters.renderer.RenderingOptions.MarginTop = 50;renderer.RenderingOptions.MarginBottom = 50;renderer.RenderingOptions.MarginLeft = 20;renderer.RenderingOptions.MarginRight = 20;
using IronPdf;
var renderer = new ChromePdfRenderer();
// Page margins in millimeters. Larger margins leave room for headers and
// footers; set them to 0 for edge-to-edge brochures and posters.
renderer.RenderingOptions.MarginTop = 50;
renderer.RenderingOptions.MarginBottom = 50;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
ImportsIronPdfDim renderer = New ChromePdfRenderer()' Page margins in millimeters. Larger margins leave room for headers and' footers; set them to 0 for edge-to-edge brochures and posters.renderer.RenderingOptions.MarginTop = 50renderer.RenderingOptions.MarginBottom = 50renderer.RenderingOptions.MarginLeft = 20renderer.RenderingOptions.MarginRight = 20
Imports IronPdf
Dim renderer = New ChromePdfRenderer()
' Page margins in millimeters. Larger margins leave room for headers and
' footers; set them to 0 for edge-to-edge brochures and posters.
renderer.RenderingOptions.MarginTop = 50
renderer.RenderingOptions.MarginBottom = 50
renderer.RenderingOptions.MarginLeft = 20
renderer.RenderingOptions.MarginRight = 20
Możemy chcieć włączyć lub wyłączyć obrazy tła z elementów HTML:
using IronPdf;var renderer = new ChromePdfRenderer();// Include CSS background colors and images in the PDF (set false to drop them)renderer.RenderingOptions.PrintHtmlBackgrounds = true;var pdf = renderer.RenderHtmlAsPdf("<h1 style='background:#eee'>Hello, PDF!</h1>");pdf.SaveAs("output.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Include CSS background colors and images in the PDF (set false to drop them)
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
var pdf = renderer.RenderHtmlAsPdf("<h1 style='background:#eee'>Hello, PDF!</h1>");
pdf.SaveAs("output.pdf");
ImportsIronPdfDim renderer = New ChromePdfRenderer()' Include CSS background colors and images in the PDF (set false to drop them)renderer.RenderingOptions.PrintHtmlBackgrounds = TrueDim pdf = renderer.RenderHtmlAsPdf("<h1 style='background:#eee'>Hello, PDF!</h1>")pdf.SaveAs("output.pdf")
Imports IronPdf
Dim renderer = New ChromePdfRenderer()
' Include CSS background colors and images in the PDF (set false to drop them)
renderer.RenderingOptions.PrintHtmlBackgrounds = True
Dim pdf = renderer.RenderHtmlAsPdf("<h1 style='background:#eee'>Hello, PDF!</h1>")
pdf.SaveAs("output.pdf")
Możliwe jest również ustawienie naszych wyjściowych PDF-ów, aby były renderowane na dowolnym wirtualnym rozmiarze papieru - w tym w rozmiarach portretowych i krajobrazowych, a nawet niestandardowych rozmiarach, które mogą być ustawione w milimetrach lub calach.
using IronPdf;using IronPdf.Rendering;var renderer = new ChromePdfRenderer();// Standard paper sizes and orientationrenderer.RenderingOptions.PaperSize = PdfPaperSize.A4;renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;// Or a custom size, in millimeters or inches// renderer.RenderingOptions.SetCustomPaperSizeinMilimeters(210, 297);// renderer.RenderingOptions.SetCustomPaperSizeInInches(8.5, 11);
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Standard paper sizes and orientation
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
// Or a custom size, in millimeters or inches
// renderer.RenderingOptions.SetCustomPaperSizeinMilimeters(210, 297);
// renderer.RenderingOptions.SetCustomPaperSizeInInches(8.5, 11);
ImportsIronPdfImportsIronPdf.RenderingDim renderer = New ChromePdfRenderer()' Standard paper sizes and orientationrenderer.RenderingOptions.PaperSize = PdfPaperSize.A4renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape' Or a custom size, in millimeters or inches' renderer.RenderingOptions.SetCustomPaperSizeinMilimeters(210, 297)' renderer.RenderingOptions.SetCustomPaperSizeInInches(8.5, 11)
Imports IronPdf
Imports IronPdf.Rendering
Dim renderer = New ChromePdfRenderer()
' Standard paper sizes and orientation
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
' Or a custom size, in millimeters or inches
' renderer.RenderingOptions.SetCustomPaperSizeinMilimeters(210, 297)
' renderer.RenderingOptions.SetCustomPaperSizeInInches(8.5, 11)
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.
Szablonowanie lub "tworzenie wsadowe" PDF-ów jest powszechnym wymaganiem dla programistów internetowych i stron internetowych.
Zamiast szablonowania samego dokumentu PDF, z IronPDF możemy szablonować nasz HTML, używając istniejących, dobrze sprawdzonych technologii. Gdy szablon HTML jest połączony z danymi z ciągu zapytania lub bazy danych, kończymy z dynamicznie generowanym dokumentem PDF.
W najprostszym przypadku, użycie metody C# String.Format jest skuteczne dla podstawowego przykładu.
using IronPdf;var renderer = new ChromePdfRenderer();// Insert a value into an HTML template with string.Formatstring html = string.Format("<h1>Hello {0}!</h1>", "World");var pdf = renderer.RenderHtmlAsPdf(html);pdf.SaveAs("Hello.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Insert a value into an HTML template with string.Format
string html = string.Format("<h1>Hello {0}!</h1>", "World");
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("Hello.pdf");
Dim renderer As New ChromePdfRenderer()' Insert a value into an HTML template with string.FormatDim html AsString = String.Format("<h1>Hello {0}!</h1>", "World")Dim pdf = renderer.RenderHtmlAsPdf(html)pdf.SaveAs("Hello.pdf")
Dim renderer As New ChromePdfRenderer()
' Insert a value into an HTML template with string.Format
Dim html As String = String.Format("<h1>Hello {0}!</h1>", "World")
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("Hello.pdf")
Jeśli plik HTML jest dłuższy, często możemy używać dowolnych symboli zastępczych, takich jak [[NAME]] i zastępować je później rzeczywistymi danymi.
Poniższy przykład utworzy 3 PDF-y, każdy spersonalizowany dla użytkownika.
using IronPdf;var renderer = new ChromePdfRenderer();// A template with a placeholder to replacevar htmlTemplate = "<p>[[NAME]]</p>";var names = new[] { "John", "James", "Jenny" };// One personalized PDF per nameforeach (var name in names){ var htmlInstance = htmlTemplate.Replace("[[NAME]]", name); var pdf = renderer.RenderHtmlAsPdf(htmlInstance); pdf.SaveAs(name + ".pdf");}
using IronPdf;
var renderer = new ChromePdfRenderer();
// A template with a placeholder to replace
var htmlTemplate = "<p>[[NAME]]</p>";
var names = new[] { "John", "James", "Jenny" };
// One personalized PDF per name
foreach (var name in names)
{
var htmlInstance = htmlTemplate.Replace("[[NAME]]", name);
var pdf = renderer.RenderHtmlAsPdf(htmlInstance);
pdf.SaveAs(name + ".pdf");
}
ImportsIronPdfDim renderer = New ChromePdfRenderer()' A template with a placeholder to replaceDim htmlTemplate = "<p>[[NAME]]</p>"Dim names = New String() {"John", "James", "Jenny"}' One personalized PDF per nameFor Each name In names Dim htmlInstance = htmlTemplate.Replace("[[NAME]]", name) Dim pdf = renderer.RenderHtmlAsPdf(htmlInstance) pdf.SaveAs(name & ".pdf")Next
Imports IronPdf
Dim renderer = New ChromePdfRenderer()
' A template with a placeholder to replace
Dim htmlTemplate = "<p>[[NAME]]</p>"
Dim names = New String() {"John", "James", "Jenny"}
' One personalized PDF per name
For Each name In names
Dim htmlInstance = htmlTemplate.Replace("[[NAME]]", name)
Dim pdf = renderer.RenderHtmlAsPdf(htmlInstance)
pdf.SaveAs(name & ".pdf")
Next
Zaawansowane szablonowanie z Handlebars.NET
Zaawansowaną metodą łączenia danych C# z HTML do generowania PDF jest użycie języka szablonów Handlebars.
Handlebars umożliwia tworzenie dynamicznego HTML z obiektów C# i instancji klas, w tym rekordów bazy danych. Handlebars jest szczególnie skuteczny tam, gdzie zapytanie może zwrócić nieznaną liczbę wierszy, na przykład przy generowaniu faktury.
using HandlebarsDotNet;// A Handlebars template with two placeholdersvar source = @"<div class=""entry""> <h1>{{title}}</h1> <div class=""body""> {{body}} </div> </div>";// Compile it once, then fill it with any object that has matching propertiesvar template = Handlebars.Compile(source);var data = new { title = "My new post", body = "This is my first post!" };string html = template(data);// html now contains://// <div class="entry">// <h1>My new post</h1>// <div class="body">// This is my first post!// </div>// </div>
using HandlebarsDotNet;
// A Handlebars template with two placeholders
var source =
@"<div class=""entry"">
<h1>{{title}}</h1>
<div class=""body"">
{{body}}
</div>
</div>";
// Compile it once, then fill it with any object that has matching properties
var template = Handlebars.Compile(source);
var data = new { title = "My new post", body = "This is my first post!" };
string html = template(data);
// html now contains:
//
// <div class="entry">
// <h1>My new post</h1>
// <div class="body">
// This is my first post!
// </div>
// </div>
ImportsHandlebarsDotNet' A Handlebars template with two placeholdersDim source = "<div class=""entry""> <h1>{{title}}</h1> <div class=""body""> {{body}} </div> </div>"' Compile it once, then fill it with any object that has matching propertiesDim template = Handlebars.Compile(source)Dim data = New With {.title = "My new post", .body = "This is my first post!"}Dim html AsString = template(data)' html now contains:'' <div class="entry">' <h1>My new post</h1>' <div class="body">' This is my first post!' </div>' </div>
Imports HandlebarsDotNet
' A Handlebars template with two placeholders
Dim source = "<div class=""entry"">
<h1>{{title}}</h1>
<div class=""body"">
{{body}}
</div>
</div>"
' Compile it once, then fill it with any object that has matching properties
Dim template = Handlebars.Compile(source)
Dim data = New With {.title = "My new post", .body = "This is my first post!"}
Dim html As String = template(data)
' html now contains:
'
' <div class="entry">
' <h1>My new post</h1>
' <div class="body">
' This is my first post!
' </div>
' </div>
Aby wyrenderować ten HTML, możemy po prostu użyć metody RenderHtmlAsPdf.
using HandlebarsDotNet;using IronPdf;// Fill the Handlebars template, then render the resulting HTMLvar template = Handlebars.Compile("<h1>{{title}}</h1><p>{{body}}</p>");string html = template(new { title = "My new post", body = "This is my first post!" });var renderer = new ChromePdfRenderer();var pdf = renderer.RenderHtmlAsPdf(html);pdf.SaveAs("Handlebars.pdf");
using HandlebarsDotNet;
using IronPdf;
// Fill the Handlebars template, then render the resulting HTML
var template = Handlebars.Compile("<h1>{{title}}</h1><p>{{body}}</p>");
string html = template(new { title = "My new post", body = "This is my first post!" });
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("Handlebars.pdf");
ImportsHandlebarsDotNetImportsIronPdf' Fill the Handlebars template, then render the resulting HTMLDim template = Handlebars.Compile("<h1>{{title}}</h1><p>{{body}}</p>")Dim html AsString = template(New With {.title = "My new post", .body = "This is my first post!"})Dim renderer = New ChromePdfRenderer()Dim pdf = renderer.RenderHtmlAsPdf(html)pdf.SaveAs("Handlebars.pdf")
Imports HandlebarsDotNet
Imports IronPdf
' Fill the Handlebars template, then render the resulting HTML
Dim template = Handlebars.Compile("<h1>{{title}}</h1><p>{{body}}</p>")
Dim html As String = template(New With {.title = "My new post", .body = "This is my first post!"})
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("Handlebars.pdf")
Możesz dowiedzieć się więcej o języku szablonów Handlebars i jego implementacji w C# z GitHub.
Dodaj podziały stron za pomocą HTML5
Powszechnym wymaganiem w dokumencie PDF jest paginacja. Programiści muszą kontrolować, gdzie strony PDF zaczynają się i kończą, aby uzyskać czysty, czytelny układ.
Najłatwiejszym sposobem na to jest mniej znany trik CSS, który wprowadzi podział strony do dowolnego drukowanego dokumentu HTML.
Dostarczony HTML działa, ale nie jest najlepszą praktyką. Zalecamy dostosowanie atrybutu media jak w poniższym przykładzie. Taki schludny i uporządkowany sposób układania treści HTML na wielu stronach. Ponieważ IronPDF renderuje z typem mediów screen domyślnie, arkusz stylów media="print" jest stosowany tylko wtedy, gdy RenderingOptions.CssMediaType jest ustawiony na PdfCssMediaType.Print (zobacz Ustawienia konwersji powyżej).
IronPDF ułatwia łączenie dokumentów PDF. Najczęstszym zastosowaniem tej techniki jest dodanie strony tytułowej lub tylnej do istniejącego zrenderowanego dokumentu PDF.
Aby to zrobić, najpierw renderujemy stronę tytułową, a następnie używamy statycznej metody PdfDocument.Merge(), aby połączyć oba dokumenty.
using IronPdf;var renderer = new ChromePdfRenderer();// The document body, rendered from a web pagevar pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf/");// Prepend an existing PDF as the cover page. Merge returns a new document.var cover = PdfDocument.FromFile("CoverPage.pdf");var pdfMerged = PdfDocument.Merge(cover, pdf);pdfMerged.SaveAs("Combined.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// The document body, rendered from a web page
var pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf/");
// Prepend an existing PDF as the cover page. Merge returns a new document.
var cover = PdfDocument.FromFile("CoverPage.pdf");
var pdfMerged = PdfDocument.Merge(cover, pdf);
pdfMerged.SaveAs("Combined.pdf");
ImportsIronPdfDim renderer = New ChromePdfRenderer()' The document body, rendered from a web pageDim pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf/")' Prepend an existing PDF as the cover page. Merge returns a new document.Dim cover = PdfDocument.FromFile("CoverPage.pdf")Dim pdfMerged = PdfDocument.Merge(cover, pdf)pdfMerged.SaveAs("Combined.pdf")
Imports IronPdf
Dim renderer = New ChromePdfRenderer()
' The document body, rendered from a web page
Dim pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf/")
' Prepend an existing PDF as the cover page. Merge returns a new document.
Dim cover = PdfDocument.FromFile("CoverPage.pdf")
Dim pdfMerged = PdfDocument.Merge(cover, pdf)
pdfMerged.SaveAs("Combined.pdf")
Ostateczną funkcją C# PDF, którą obsługuje IronPDF, jest dodanie znaku wodnego do dokumentów. Może to być używane do dodania notatki na każdej stronie, że dokument jest "poufny" lub "próbka".
using IronPdf;using IronPdf.Editing;var renderer = new ChromePdfRenderer();var pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf");// Stamp every page with a red "SAMPLE" in the middle, rotated 30 degrees at 50% opacity.// The watermark is HTML, so any markup, styling or image can be used.pdf.ApplyWatermark( "<h2 style='color:red; font-size:50px'>SAMPLE</h2>", rotation: 30, opacity: 50, verticalAlignment: VerticalAlignment.Middle, horizontalAlignment: HorizontalAlignment.Center);pdf.SaveAs(@"C:\Path\To\Watermarked.pdf");
using IronPdf;
using IronPdf.Editing;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf");
// Stamp every page with a red "SAMPLE" in the middle, rotated 30 degrees at 50% opacity.
// The watermark is HTML, so any markup, styling or image can be used.
pdf.ApplyWatermark(
"<h2 style='color:red; font-size:50px'>SAMPLE</h2>",
rotation: 30,
opacity: 50,
verticalAlignment: VerticalAlignment.Middle,
horizontalAlignment: HorizontalAlignment.Center);
pdf.SaveAs(@"C:\Path\To\Watermarked.pdf");
ImportsIronPdfImportsIronPdf.EditingDim renderer = New ChromePdfRenderer()Dim pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf")' Stamp every page with a red "SAMPLE" in the middle, rotated 30 degrees at 50% opacity.' The watermark is HTML, so any markup, styling or image can be used.pdf.ApplyWatermark("<h2 style='color:red; font-size:50px'>SAMPLE</h2>", rotation:=30, opacity:=50, verticalAlignment:=VerticalAlignment.Middle, horizontalAlignment:=HorizontalAlignment.Center)pdf.SaveAs("C:\Path\To\Watermarked.pdf")
Imports IronPdf
Imports IronPdf.Editing
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf")
' Stamp every page with a red "SAMPLE" in the middle, rotated 30 degrees at 50% opacity.
' The watermark is HTML, so any markup, styling or image can be used.
pdf.ApplyWatermark("<h2 style='color:red; font-size:50px'>SAMPLE</h2>", rotation:=30, opacity:=50, verticalAlignment:=VerticalAlignment.Middle, horizontalAlignment:=HorizontalAlignment.Center)
pdf.SaveAs("C:\Path\To\Watermarked.pdf")
Pełny darmowy konwerter HTML do PDF w C# Kod źródłowy dla tego samouczka jest dostępny do pobrania jako spakowany plik projektu Visual Studio 2022. Użyje on swojego silnika renderującego do generowania obiektów dokumentów PDF w C#.
IronPDF to potężna i pełna funkcji biblioteka PDF dostosowana do nowoczesnych programistów .NET. Dzięki natywnej konwersji HTML do PDF napędzanej zaawansowanym silnikiem Chromium, intuicyjnemu API i regularnym aktualizacjom, upraszcza rozwój, zapewniając jednocześnie wysokiej jakości wyniki. Przyjrzyjmy się bliżej, jak wypada w porównaniu z innymi narzędziami:
PDFSharp
Podstawowe funkcje: PDFsharp to biblioteka open-source (MIT) do tworzenia i edytowania dokumentów PDF w kodzie zarządzanym. Nie ma silnika renderującego HTML, więc konwersja treści internetowych do PDF wymaga oddzielnego renderera zewnętrznego.
Nowoczesne standardy: IronPDF wykorzystuje nowoczesne technologie internetowe, w tym HTML, CSS i JavaScript, dzięki swojemu silnikowi opartemu na Chromium, zapewniając, że PDF-y zachowują współczesny wygląd i styl.
Wsparcie i aktualizacje: PDFsharp jest open source i wydaje wersję co kilka miesięcy, z komercyjnym wsparciem sprzedawanym oddzielnie przez jego opiekuna. IronPDF wydaje miesięczne aktualizacje i poprawki bezpieczeństwa, a każda licencja obejmuje profesjonalne wsparcie inżynieryjne, co ma znaczenie dla aplikacji korporacyjnych.
wkhtmltopdf
Łatwość integracji: wkhtmltopdf to narzędzie wiersza poleceń z biblioteką C; nie ma oficjalnego pakietu .NET, więc używanie go z .NET oznacza uruchamianie natywnego pliku binarnego (lub wywoływanie go przez zewnętrzny wrapper, taki jak DinkToPdf) i dostarczanie tego pliku binarnego dla każdej platformy, na którą wdrażasz.
Technologia renderowania: wkhtmltopdf renderuje za pomocą QtWebKit, forka WebKit, który Qt zdeprecjonował w 2015 roku i usunął w Qt 5.6, więc nowoczesne funkcje JavaScript i CSS nie są obsługiwane, zwłaszcza na dynamicznych, bogatych w treść stronach internetowych. Silnik Chromium IronPDF renderuje aktualne standardy internetowe.
Ciągły rozwój: ostatnia wersja wkhtmltopdf to 0.12.6 z czerwca 2020 roku, a jego repozytorium GitHub zostało zarchiwizowane w styczniu 2023 roku, więc nie ma wsparcia od dostawcy. IronPDF nadal się rozwija, z miesięcznymi aktualizacjami i dedykowaną obsługą klienta.
iTextSharp
Renderowanie HTML do PDF: iText konwertuje HTML za pomocą swojego oddzielnego dodatku pdfHTML, silnika układu CSS, a nie przeglądarki, a linia iTextSharp 5 jest teraz utrzymywana tylko w zakresie poprawek bezpieczeństwa. IronPDF renderuje HTML z wbudowanym silnikiem Chromium w pakiecie podstawowym, bez potrzeby dodatków.
Doświadczenie programisty: API iText działa na poziomie obiektów PDF i elementów układu, co jest potężne, ale oznacza więcej kodu dla codziennych zadań. IronPDF oferuje czyste i intuicyjne API C#, upraszczając kodowanie i przyspieszając dostarczanie projektów.
Utrzymanie i wsparcie: Darmowe użycie iText jest objęte licencją AGPL, a wsparcie dostawcy jest zarezerwowane dla licencji komercyjnych, a iTextSharp 5.x jest na końcu życia, z wyjątkiem poprawek bezpieczeństwa. IronPDF obejmuje profesjonalne wsparcie i miesięczne aktualizacje z każdą licencją.
Aspose.PDF
Jakość konwersji: Aspose.PDF konwertuje HTML za pomocą własnego silnika układu, a nie przeglądarki. Jego dokumentacja konwertuje stronę internetową, najpierw pobierając HTML za pomocą HttpClient do strumienia i przekazując go do Document z HtmlLoadOptions, zamiast renderować bezpośrednio z URL. W naszym teście r/nfl poniżej, wynik był prawie pusty: logo społeczności, jeden nagłówek i kilka pustych pól. Silnik Chromium IronPDF renderuje URL bezpośrednio, w tym JavaScript.
Użyteczność API: API Aspose.PDF może być rozbudowane, podczas gdy IronPDF koncentruje się na doświadczeniu przyjaznym dla programisty, które minimalizuje czas konfiguracji i zwiększa produktywność.
Wierność wyjściowa: Ponieważ IronPDF renderuje z Chromium, PDF odpowiada temu, co Chrome pokazuje dla tego samego HTML, co sprawia, że projektowanie i debugowanie są przewidywalne dla generowania PDF-ów na dużą skalę.
Syncfusion PDF
Złożoność API: Syncfusion PDF to zdolna biblioteka z większą powierzchnią API do nauki. IronPDF, przeciwnie, zapewnia prosty API do szybkiej integracji.
Silnik renderujący: Konwerter HTML Syncfusion teraz używa silnika Chromium Blink; jego starsze silniki WebKit i Internet Explorer zostały oznaczone jako przestarzałe w Essential Studio 2022 Volume 3. W naszym teście r/nfl poniżej, wynik Syncfusion zachował główny kanał, ale pominął panele nawigacyjne i społecznościowe, podczas gdy silnik Chromium IronPDF zrenderował całą stronę.
Poza konwersją: Pakiet IronPDF obejmuje również podpisy cyfrowe, adnotacje, wypełnianie formularzy i stemplowanie kodów kreskowych, więc ta sama biblioteka obsługuje resztę przepływu pracy z dokumentami.
Porównanie renderowania
Aby porównać jakość konwersji HTML do PDF tych bibliotek, użyliśmy strony społeczności Reddit, r/nfl, która zawiera dynamiczną treść, aktualizacje na żywo, nowoczesny CSS i elementy oparte na JavaScript:
https://www.reddit.com/r/nfl/
Oto wyniki z jednego uruchomienia z domyślnymi ustawieniami każdej biblioteki. Syncfusion i Aspose.PDF działały jako wersje ewaluacyjne, dlatego ich wynik zawiera znaki wodne ewaluacyjne (kliknij każdy obraz, aby go powiększyć):
IronPDF
Dobrze sformatowany i wizualnie dokładny PDF, zachowujący dynamiczną treść i nowoczesne stylizacje.
SyncFusion
Przekonwertowano z wersją próbną. Główny kanał, treść postów i stylizacja przeszły w wąskim układzie jednokolumnowym, ale lewa nawigacja i prawy panel społecznościowy zostały pominięte.
Aspose.PDF
Wersja ewaluacyjna; wymagała pobrania HTML najpierw (Aspose.PDF ładuje HTML ze strumienia, a nie z URL). Wynik był prawie pusty: logo społeczności, jeden nagłówek i kilka pustych pól.
Wkhtmltopdf
wkhtmltopdf zakończył konwersję, ale wynik to tekst i obrazy strony bez jej układu, stylizacji, dynamicznych elementów czy interaktywności. To sprawia, że wkhtmltopdf jest nieodpowiedni dla nowoczesnych, dynamicznych stron internetowych.
Zwróć uwagę: PDFsharp nie ma silnika renderującego HTML, a iText konwertuje HTML tylko przez swój oddzielny dodatek pdfHTML, więc żaden z nich nie został uwzględniony w tym teście renderowania przeglądarki.
Wniosek
Dla programistów .NET poszukujących nowoczesnego i niezawodnego rozwiązania PDF, IronPDF jest mocnym wyborem. Jego konwersja HTML do PDF oparta na Chromium, łatwość użycia, regularne aktualizacje i szeroki zestaw funkcji czynią go najlepszym wyborem. Niezależnie od tego, czy pracujesz nad małym projektem, czy dużą aplikacją korporacyjną, IronPDF zwiększa produktywność, unikając ryzyka związanego z przestarzałymi lub nieobsługiwanymi bibliotekami. Zaprojektowany do zastosowań komercyjnych, IronPDF utrzymuje Twoje projekty na utrzymywanej i wspieranej bibliotece.
W naszym teście z rzeczywistą dynamiczną stroną internetową, IronPDF wyprodukował najbardziej kompletną i dokładną renderowanie. Syncfusion pominął panele nawigacyjne i społecznościowe. Aspose.PDF wymagał najpierw pobrania HTML i nadal renderował prawie żadną część strony. wkhtmltopdf wyprodukował tekst i obrazy bez stylizacji strony, co jest słabym dopasowaniem do nowoczesnych stron.
Dla nowoczesnych przepływów pracy HTML do PDF, ta kombinacja dokładności renderowania i małego, czytelnego API to to, co wyróżnia IronPDF.
Doświadcz pełnego zestawu funkcji IronPDF, który z łatwością konwertuje dynamiczny, ciężki CSS HTML do PDF. Wypróbuj teraz z naszą darmową wersją próbną.
Jak przekonwertować HTML na PDF używając IronPDF w C#?
Aby przekonwertować HTML na PDF używając IronPDF, musisz zainicjować ChromePdfRenderer, wyrenderować zawartość HTML jako PDF używając metody RenderHtmlAsPdf, a następnie zapisać PDF do pliku.
Jakie są wymagania systemowe dla IronPDF?
IronPDF obsługuje .NET 10, .NET 9, .NET 8, .NET 7, .NET 6, .NET 5, .NET Core, .NET Standard i .NET Framework na Windows, macOS, Linux, Docker, Azure i AWS.
Czy mogę używać IronPDF z innymi językami programowania?
Tak, IronPDF można używać z wieloma językami zarówno wewnątrz, jak i poza ekosystemem .NET, w tym F#, VB.NET, Python, Java i Node.js.
Jak mogę dodać niestandardowe nagłówki i stopki do PDF używając IronPDF?
Z IronPDF możesz dodawać nagłówki i stopki używając klasy TextHeaderFooter dla treści tekstowych lub klasy HtmlHeaderFooter dla bogatej treści HTML.
Czy możliwe jest renderowanie PDF z istniejącego URL za pomocą IronPDF?
Tak, możesz renderować PDF z istniejącego URL używając metody RenderUrlAsPdf w IronPDF.
Czy IronPDF obsługuje zaawansowane renderowanie CSS i JavaScript?
Tak, IronPDF obsługuje zaawansowane CSS3 i JavaScript, w tym jQuery i AJAX, zapewniając dokładne renderowanie nowoczesnych projektów webowych.
Czy mogę zastosować szablony HTML do masowego tworzenia PDF w IronPDF?
Tak, możesz używać technik szablonowania C#, w tym String.Format i Handlebars.NET, aby dynamicznie generować PDF-y z IronPDF.
Jak IronPDF porównuje się z innymi bibliotekami PDF?
IronPDF renderuje HTML z wbudowanym silnikiem Chromium, dostarcza miesięczne aktualizacje i ma kompaktowe API C#. Poradnik porównuje go z PdfSharp, wkhtmltopdf, iTextSharp, Aspose.PDF i Syncfusion PDF, w tym test renderowania dynamicznej strony internetowej obok siebie.
Czy mogę dodać znaki wodne do PDF-ów za pomocą IronPDF?
Tak, IronPDF pozwala na dodawanie tekstowych lub obrazkowych znaków wodnych do dokumentów PDF.
Czy jest dostępna wersja próbna IronPDF?
Tak, możesz zarejestrować się na darmowy 30-dniowy klucz próbny, aby przetestować funkcje IronPDF przed zakupem licencji.
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.