# Konwertowanie HTML do PDF w Node.js
Najpotężniejszą i najpopularniejszą funkcją IronPDF jest możliwość tworzenia wysokiej jakości plików PDF z surowego HTML, CSS i JavaScript. Ten tutorial prowadzi deweloperów Node.js przez każdy praktyczny sposób zamiany treści HTML na PDF - od konwersji jednolinijkowej aż po dynamiczne generowanie dokumentów oparte na szablonach.
IronPDF to biblioteka API wysokiego poziomu, która pomaga deweloperom szybko implementować potężne możliwości obsługi PDF w aplikacjach oprogramowania. IronPDF jest dostępne w [wielu językach programowania](/nodejs/licensing/). Aby uzyskać szczegółowe informacje na temat tworzenia plików PDF w [.NET](/tutorials/html-to-pdf/), [Java](/java/tutorials/html-to-pdf/) i [Python](/python/tutorials/html-to-pdf/), zapoznaj się z oficjalnymi stronami dokumentacji. Ten tutorial opisuje jego użycie w projektach Node.js.
*as-heading:2(Szybki start: Konwertuj HTML na PDF w Node.js)*
<div class="hsg-featured-snippet">
<h2>Jak przekonwertować HTML na PDF w Node.js</h2>
<ol>
<li><a class="js-modal-open" data-modal-id="download-modal" href="#download-modal">Zainstaluj bibliotekę Node.js IronPDF poprzez NPM: <code>npm install @ironsoftware/ironpdf</code></a></li>
<li>Zaimportuj klasę <strong>PdfDocument</strong> z pakietu <code>@ironsoftware/ironpdf</code>.</li>
<li>Wywołaj <code>PdfDocument.fromHtml</code>, <code>PdfDocument.fromUrl</code>, lub <code>PdfDocument.fromZip</code> w zależności od źródła HTML.</li>
<li>Opcjonalnie skonfiguruj opcje renderowania: nagłówki, stopki, rozmiar strony, orientację i marginesy.</li>
<li>Wywołaj <code>PdfDocument.saveAs</code>, aby zapisać wygenerowany PDF na dysku.</li>
</ol>
</div>
*as-heading:2(Spis treści)*
- [Jak rozpocząć pracę z IronPDF for Node.js?](#getting-started)
- [Jak przekonwertować HTML na PDF w Node.js?](#convert-html-to-pdf)
- [Jak utworzyć PDF z łańcucha HTML?](#create-pdf-from-html-string)
- [Jak utworzyć PDF z pliku HTML?](#create-pdf-from-html-file)
- [Jak utworzyć PDF z URL?](#create-pdf-from-url)
- [Jak utworzyć PDF z archiwum ZIP?](#create-pdf-from-zip)
- [Jakie zaawansowane opcje renderowania obsługuje IronPDF?](#advanced-rendering-options)
- [Jak dodać nagłówki i stopki?](#add-headers-footers)
- [Jak kontrolować rozmiar strony, orientację i marginesy?](#page-size-orientation-margins)
- [Jak obsłużyć dynamiczne strony internetowe?](#dynamic-web-pages)
- [Jak wygenerować PDF z szablonu HTML?](#html-template-to-pdf)
- [Jakie są kolejne kroki?](#next-steps)
## Jak rozpocząć pracę z IronPDF for Node.js?
!!!--LIBRARY_START_TRIAL_BLOCK--!!!
### Zainstaluj bibliotekę IronPDF
!!!--LIBRARY_NUGET_INSTALL_BLOCK--!!!
Zainstaluj pakiet Node.js IronPDF, uruchamiając poniższą komendę NPM w wybranym projekcie Node.js:
```shell
:ProductInstall
```
Możesz także [pobrać i zainstalować pakiet IronPDF ręcznie](#download-modal).
### Jak zainstalować IronPDF Engine?
IronPDF for Node.js wymaga [binarnego silnika IronPDF](https://www.npmjs.com/package/@ironsoftware/ironpdf-engine-windows-x64) do działania.
[[i:(Instalacja IronPDF Engine jest opcjonalna. Pakiet `@ironsoftware/ironpdf` automatycznie pobiera i instaluje odpowiednie binaria dla twojego systemu operacyjnego podczas pierwszego uruchomienia. Zalecana jest instalacja opcjonalna w środowiskach, gdzie dostęp do internetu jest ograniczony lub niedostępny.)]]
Zainstaluj binarny plik IronPDF Engine, [instalując odpowiedni pakiet dla swojego systemu operacyjnego](https://www.npmjs.com/package/@ironsoftware/ironpdf#for-windows-x64).
### Jak zastosować klucz licencyjny?
Domyślnie IronPDF oznacza wszystkie generowane lub modyfikowane dokumenty znakiem wodnym. Aby usunąć znak wodny, ustaw właściwość `licenseKey` na globalnym obiekcie `IronPdfGlobalConfig` z ważnym kluczem licencyjnym:
```javascript
import { IronPdfGlobalConfig } from "@ironsoftware/ironpdf";
// Retrieve the global configuration object
var config = IronPdfGlobalConfig.getConfig();
// Set a valid license key to remove watermarks
config.licenseKey = "{YOUR-LICENSE-KEY-HERE}";
```
[Uzyskaj bezpłatny klucz licencyjny na okres próbny](#trial-license) lub [kup klucz licencyjny](/nodejs/licensing/) na stronie licencjonowania.
[[i:(Ustaw klucz licencyjny i wszelkie inne [globalne ustawienia konfiguracyjne](/nodejs/object-reference/api/interfaces/IronPdfConfig.html) przed wywołaniem innych funkcji biblioteki. To zapewnia optymalną wydajność i poprawne zachowanie w aplikacji.)]]
Pozostałe przykłady kodu w tym samouczku zakładają, że klucz licencyjny został zastosowany w osobnym pliku `config.js`, który jest importowany na początku każdego skryptu:
```javascript
import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script
// ...
```

**Uzyskaj klucz licencyjny na ironpdf.com/nodejs/licensing/, aby generować dokumenty PDF bez znaków wodnych.**
## Jak przekonwertować HTML na PDF w Node.js?
Biblioteka Node.js IronPDF oferuje cztery podejścia do tworzenia plików PDF z treści HTML:
1. Z łańcucha kodu HTML
2. Z lokalnego pliku HTML
3. Z adresu URL online
4. Z archiwum skompresowanego ZIP
Każde podejście używa klasy [`PdfDocument`](/nodejs/object-reference/api/classes/PdfDocument.html) jako podstawy. Obiekt `PdfDocument` reprezentuje plik PDF wyprodukowany z jakiejś treści źródłowej i napędza większość podstawowych funkcji tworzenia i edycji IronPDF.
### Jak utworzyć PDF z łańcucha HTML?
`PdfDocument.fromHtml` generuje PDFy z ciągów surowego HTMLu. To podejście oferuje największą elastyczność spośród czterech metod, ponieważ ciąg HTML może pochodzić praktycznie z dowolnego miejsca - plików tekstowych, strumieni danych, silnika szablonów HTML lub dynamicznie skonstruowanego oznaczenia.
```javascript
import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script
// Create a PDF from an HTML string
const pdf = await PdfDocument.fromHtml("<h1>Hello from IronPDF!</h1>");
// Save the PDF document to the file system
await pdf.saveAs("html-string-to-pdf.pdf");
```
`PdfDocument.fromHtml` zwraca Obietnicę, która rozwiązuje się do instancji klasy `PdfDocument`. Po uzyskaniu instancji, wywołać `saveAs` z ścieżką pliku docelowego, aby zapisać PDF na dysk. Zapisany plik PDF renderuje HTML dokładnie tak, jak przeglądarka zgodna ze standardami by go wyświetliła.

**The PDF generated from the HTML string `<h1>Hello from IronPDF!</h1>`. Pliki PDF, które generuje `PdfDocument.fromHtml`, wyglądają tak samo jak treści stron internetowych.**
### Jak utworzyć PDF z pliku HTML?
`PdfDocument.fromHtml` również akceptuje ścieżkę do lokalnego dokumentu HTML. Zamiast łańcucha oznaczenia, podaj jako pierwszy argument prawidłową ścieżkę pliku. Jest to preferowane podejście przy pracy z zapisanymi stronami internetowymi, które odnoszą się do lokalnych zasobów CSS, JavaScript i obrazów.
Poniższy przykład konwertuje [przykładową stronę internetową](https://filesamples.com/samples/code/html/sample2.html) na PDF:
```javascript
import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script
// Render a PDF from a local HTML file
const pdf = await PdfDocument.fromHtml("./sample2.html");
// Save the PDF document to the project directory
await pdf.saveAs("html-file-to-pdf-1.pdf");
```

**Przykładowa strona HTML, jak pokazuje ją Google Chrome. Pobierz tę i podobne strony z witryny File Samples: https://filesamples.com/samples/code/html/sample2.html**
IronPDF zachowuje wygląd oryginalnego dokumentu HTML i utrzymuje funkcjonalność linków, formularzy i innych interaktywnych elementów. Ta wierność rozciąga się na złożone strony zawierające akapity, listy, obrazy, hiperłącza i skrypty po stronie klienta.

**Ten PDF został wygenerowany z przykładu pliku HTML powyżej. Porównaj jego wygląd z poprzednim obrazem - IronPDF zachowuje układ z wysoką wiernością.**
IronPDF obsługuje strony, które wykraczają poza prosty markup. Poniższy przykład konwertuje stronę z licznymi zewnętrznymi plikami CSS, obrazami i zasobami skryptów:
```javascript
import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script
// Render a PDF from a complex HTML page with external assets
PdfDocument.fromHtml("./sample4.html").then(async (pdf) => {
return await pdf.saveAs("html-file-to-pdf-2.pdf");
});
```

Jeśli wygląda dobrze w Google Chrome, będzie wyglądać dobrze po przekonwertowaniu na PDF. Obejmuje to projekty stron intensywnie korzystających z CSS i renderowanych przez JavaScript.
[[t:(Jeśli strona korzysta z zasobów z lokalnych ścieżek plików, upewnij się, że wszystkie odwoływane pliki CSS, obrazy i skrypty są obecne względem lokalizacji pliku HTML. Silnik renderujący Chrome w IronPDF rozwiązuje te ścieżki w taki sam sposób, jak przeglądarka.)]]
### Jak utworzyć PDF z URL-a?
`PdfDocument.fromUrl` pobiera i renderuje aktywną stronę internetową jako PDF. Przekaż dowolny publicznie dostępny URL jako argument. Silnik renderujący Chrome w IronPDF pobiera stronę, ładuje wszystkie zasoby i tworzy PDF o idealnej jakości - nie jest wymagane ręczne pobieranie HTML.
```javascript
import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script
// Convert a live web page to a PDF
const pdf = await PdfDocument.fromUrl("https://en.wikipedia.org/wiki/PDF");
// Save the document
await pdf.saveAs("url-to-pdf.pdf");
```

**Artykuł z Wikipedii dotyczący formatu PDF, jaki wygląda w przeglądarce zgodnej ze standardami.**

**PDF wygenerowany po wywołaniu `PdfDocument.fromUrl` na artykule Wikipedii. Zwróć uwagę na jego dużą zgodność z oryginalną stroną internetową.
[[n:(Konwersje URL wymagają, aby docelowy serwer był dostępny z maszyny, na której działa IronPDF. Strony za uwierzytelnieniem, VPN lub zaporami mogą wymagać dodatkowej konfiguracji za pośrednictwem `ChromePdfRenderOptions`.)]]
### Jak utworzyć PDF z archiwum Zip?
`PdfDocument.fromZip` konwertuje wybrany plik HTML zawarty w archiwum ZIP na PDF. Jest to szczególnie przydatne podczas dystrybucji samodzielnych projektów HTML, które łączą swoje zasoby HTML, CSS i obrazy razem.
Dla tego przykładu załóż, że katalog projektu zawiera plik ZIP o następującej strukturze:
```plaintext
//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/zip-structure.txt
html-zip.zip
├─ index.html
├─ style.css
├─ logo.png
```
Plik `index.html` zawiera:
```html
//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Hello world!</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>Hello from IronPDF!</h1>
<a href="https://ironpdf.com/nodejs/">
<img src="logo.png" alt="IronPDF dla Node.js">
</a>
</body>
</html>
```
A `style.css` deklaruje reguły układu strony i czcionki:
```css
//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/style.css
@font-face {
font-family: 'Gotham-Black';
src: url('gotham-black-webfont.eot?') format('embedded-opentype'),
url('gotham-black-webfont.woff2') format('woff2'),
url('gotham-black-webfont.woff') format('woff'),
url('gotham-black-webfont.ttf') format('truetype'),
url('gotham-black-webfont.svg') format('svg');
font-weight: normal;
font-style: normal;
font-display: swap;
}
body {
display: flex;
flex-direction: column;
justify-content: center;
margin-left: auto;
margin-right: auto;
margin-top: 200px;
margin-bottom: auto;
color: white;
background-color: black;
text-align: center;
font-family: "Helvetica"
}
h1 {
font-family: "Gotham-Black";
margin-bottom: 70px;
font-size: 32pt;
}
img {
width: 400px;
height: auto;
}
p {
text-decoration: underline;
font-size: smaller;
}
```

**Przykładowy obraz wewnątrz hipotetycznego pliku ZIP HTML.**
Przy wywoływaniu `fromZip`, należy określić ścieżkę do pliku ZIP jako pierwszy argument i obiekt konfiguracji jako drugi. Ustaw właściwość `mainHtmlFile` na nazwę pliku HTML w archiwum, który powinien zostać przekonwertowany:
```javascript
import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script
// Convert an HTML file from a ZIP archive to PDF
PdfDocument.fromZip("./html-zip.zip", {
mainHtmlFile: "index.html"
}).then(async (pdf) => {
return await pdf.saveAs("html-zip-to-pdf.pdf");
});
```

**Tworzenie PDF za pomocą `PdfDocument.fromZip`. Funkcja skutecznie renderuje kod HTML z pliku ZIP wraz z jego dołączonymi zasobami.
## Jakie zaawansowane opcje renderowania obsługuje IronPDF?
Interfejs [`ChromePdfRenderOptions`](/nodejs/object-reference/api/interfaces/ChromePdfRenderOptions.html) ujawnia właściwości do granularnej personalizacji zachowania renderowania PDF. Te ustawienia stosują się przed wygenerowaniem PDF i obejmują układ, wygląd wizualny oraz szczególne przypadki dla dynamicznych treści.
IronPDF stosuje domyślne ustawienia renderowania do każdej konwersji. Pobierz te domyślne wartości za pomocą funkcji `defaultChromePdfRenderOptions`:
```javascript
import { defaultChromePdfRenderOptions } from "@ironsoftware/ironpdf";
// Retrieve a ChromePdfRenderOptions object with default settings
var options = defaultChromePdfRenderOptions();
```
Zmodyfikuj właściwości zwróconego obiektu według potrzeby i przekaż go do parametru `renderOptions` dowolnej metody konwersji.
### Jak dodać nagłówki i stopki?
Właściwości `textHeader` i `textFooter` przyczepiają niestandardowe treści tekstowe do każdej strony nowo renderowanego PDF. Poniższy przykład tworzy PDF z głównej strony wyszukiwania Google z niestandardowym nagłówkiem i stopką, każda z użyciem innej czcionki:
```javascript
import { PdfDocument, defaultChromePdfRenderOptions, AffixFonts } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script
// Start from default render options
var options = defaultChromePdfRenderOptions();
// Configure a text-based header
options.textHeader = {
centerText: "https://www.adobe.com",
dividerLine: true,
font: AffixFonts.CourierNew,
fontSize: 12,
leftText: "URL to PDF"
};
// Configure a text-based footer
options.textFooter = {
centerText: "IronPDF for Node.js",
dividerLine: true,
fontSize: 14,
font: AffixFonts.Helvetica,
rightText: "HTML to PDF in Node.js"
};
// Render the page with custom headers and footers applied
PdfDocument.fromUrl("https://www.google.com/", { renderOptions: options }).then(async (pdf) => {
return await pdf.saveAs("add-custom-headers-footers-1.pdf");
});
```

**PDF wygenerowany ze strony głównej Google z zastosowanym niestandardowym tekstowym nagłówkiem i stopką za pomocą `textHeader` i `textFooter`.**
Dla bogatszych układów nagłówka i stopki, użyć zamiast tego właściwości `htmlHeader` i `htmlFooter`. Akceptują one surowe fragmenty HTML, dając pełną kontrolę nad typografią, obrazami i wyrównaniem. Poniższy przykład wyśrodkowuje URL strony na nagłówku pisanym pogrubioną czcionką oraz osadza obraz logo w stopce:
```javascript
import { PdfDocument, defaultChromePdfRenderOptions } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script
// Start from default render options
var options = defaultChromePdfRenderOptions();
// Define a rich HTML header
options.htmlHeader = {
htmlFragment: "<strong>https://www.google.com/</strong>",
dividerLine: true,
dividerLineColor: "blue",
loadStylesAndCSSFromMainHtmlDocument: true,
};
// Define a rich HTML footer with a logo
options.htmlFooter = {
htmlFragment: "<img src='logo.png' alt='IronPDF for Node.js' style='display: block; width: 150px; height: auto; margin-left: auto; margin-right: auto;'>",
dividerLine: true,
loadStylesAndCSSFromMainHtmlDocument: true
};
// Apply custom HTML headers and footers during rendering
await PdfDocument.fromUrl("https://www.google.com/", { renderOptions: options }).then(async (pdf) => {
return await pdf.saveAs("add-html-headers-footers.pdf");
});
```

**IronPDF obsługuje nagłówki i stopki oparte na HTML, dając pełną kontrolę nad marką i układem na każdej stronie.**
### Jak kontrolować rozmiar strony, orientację i marginesy?
Właściwości `margin`, `paperSize`, `fitToPaperMode`, `paperOrientation`, i `grayScale` na `ChromePdfRenderOptions` kontrolują fizyczny układ każdej renderowanej strony. Poniższy przykład konwertuje stronę główną Google z niestandardowymi marginesami, orientacją krajobrazową A5 i wyjściem w odcieniach szarości:
```javascript
import { PdfDocument, defaultChromePdfRenderOptions, PaperSize, FitToPaperModes, PdfPaperOrientation } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script
// Start from default render options
var options = defaultChromePdfRenderOptions();
// Set page margins in millimeters
options.margin = {
top: 50,
bottom: 50,
left: 60,
right: 60
};
// Configure paper size, fit mode, orientation, and color mode
options.paperSize = PaperSize.A5;
options.fitToPaperMode = FitToPaperModes.FitToPage;
options.paperOrientation = PdfPaperOrientation.Landscape;
options.grayScale = true;
// Render with the customized layout settings
PdfDocument.fromUrl("https://www.google.com/", { renderOptions: options }).then(async (pdf) => {
return await pdf.saveAs("set-margins-and-page-size.pdf");
});
```
Enumeracja `PaperSize` obejmuje standardowe rozmiary papieru takie jak `A4`, `A5`, `Letter`, i `Legal`. Enumeracja `PdfPaperOrientation` wspiera `Portrait` i `Landscape`. Te ustawienia dają precyzyjną kontrolę nad wymiarami wyjściowymi dla dokumentów gotowych do druku.
[[t:(Podczas generowania PDF dla przepływów pracy związanych z drukiem, zawsze określaj marginesy jawnie. Domyślne marginesy mogą nie pasować do wymagań Twojej docelowej drukarki lub formatu papieru.)]]
### Jak obsłużyć dynamiczne strony internetowe?
Strony ładujące treść asynchronicznie - przez zegary JavaScript, lazy loading lub wywołania API - mogą nie być w pełni renderowane w momencie, gdy silnik IronPDF je rejestruje. Mechanizm `WaitFor` skonfigurowany poprzez właściwość `waitFor` na `ChromePdfRenderOptions`, instruuje renderer Chrome, aby pauzował dopóki określone warunki nie zostaną spełnione, przed przechwyceniem strony.
Poniższy blok kodu ustawia IronPDF na czekanie 20 sekund przed zarejestrowaniem treści strony:
```javascript
import { PdfDocument, defaultChromePdfRenderOptions, WaitForType } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script
// Configure the renderer to wait 20 seconds before capturing
var options = defaultChromePdfRenderOptions();
options.waitFor = {
type: WaitForType.RenderDelay,
delay: 20000
};
PdfDocument.fromUrl("https://ironpdf.com/nodejs/", { renderOptions: options }).then(async (pdf) => {
return await pdf.saveAs("waitfor-renderdelay.pdf");
});
```
Alternatywnie, skonfiguruj IronPDF, aby czekał, aż określony element DOM pojawi się przed renderowaniem. To jest przydatne w przypadku stron, gdzie treść jest wstrzykiwana po zakończeniu montowania przez framework JavaScript:
```javascript
import { PdfDocument, defaultChromePdfRenderOptions, WaitForType } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script
// Configure the renderer to wait for a specific DOM element (up to 20 seconds)
var options = defaultChromePdfRenderOptions();
options.waitFor = {
type: WaitForType.HtmlElement,
htmlQueryStr: "div.ProseMirror",
maxWaitTime: 20000,
};
PdfDocument.fromUrl("https://app.surferseo.com/drafts/s/V7VkcdfgFz-dpkldsfHDGFFYf4jjSvvjsdf", { renderOptions: options }).then(async (pdf) => {
return await pdf.saveAs("waitfor-htmlelement.pdf");
});
```
Strategia `WaitForType.HtmlElement` używa standardowego selektora zapytań CSS. Renderer sprawdza obecność elementu, dopóki nie miną `maxWaitTime` milisekundy lub element zostanie znaleziony - cokolwiek nastąpi pierwszy.
[[w:(Ustawienie nadmiernie długiego czasu oczekiwania może znacznie zwiększyć czas generowania PDF w aplikacjach o wysokiej przepustowości. Używaj minimalnego opóźnienia, które niezawodnie rejestruje treść wymaganą przez Twój przypadek użycia.)]]
## Jak wygenerować PDF z szablonu HTML?
Powszechnym wzorcem automatyzacji w świecie rzeczywistym jest generowanie serii PDF z współdzielonego szablonu HTML, zastępującego wartości wstawiane danymi z bazy danych, API lub arkusza kalkulacyjnego. Metoda `replaceText` IronPDF na `PdfDocument` obsługuje to bezpośrednio.
Szablon faktury poniżej (dostosowany z publicznie dostępnego [szablonu faktury CodePen](https://codepen.io/tjoen/pen/wvgvLX)) używa nawiasów klamrowych jako symboli zastępczych, takich jak `{COMPANY-NAME}`, `{FULL-NAME}`, i `{INVOICE-NUMBER}` dla podmienialnej treści:

Przykładowy szablon faktury z znacznikami zastępczymi. Kod JavaScript zastąpi każdy znacznik prawdziwymi danymi przed zapisaniem dokumentu jako PDF.
Poniższy kod ładuje szablon, zastępuje każdy znacznik danymi testowymi i zapisuje wynik jako PDF:
```javascript
//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/html-template-to-pdf.js
import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script
/**
* Loads an HTML template from the file system as a PdfDocument.
*/
async function getTemplateHtml(fileLocation) {
return PdfDocument.fromHtml(fileLocation);
}
/**
* Saves a PdfDocument to the specified file path.
*/
async function generatePdf(pdf, location) {
return pdf.saveAs(location);
}
/**
* Replaces a named placeholder in the PdfDocument with a data value.
*/
async function addTemplateData(pdf, key, value) {
return pdf.replaceText(key, value);
}
// Path to the HTML invoice template
const template = "./sample-invoice.html";
// Load the template, fill in all placeholder values, then save the PDF
getTemplateHtml(template).then(async (doc) => {
await addTemplateData(doc, "{FULL-NAME}", "Lizbeth Presland");
await addTemplateData(doc, "{ADDRESS}", "678 Manitowish Alley, Portland, OG");
await addTemplateData(doc, "{PHONE-NUMBER}", "(763) 894-4345");
await addTemplateData(doc, "{INVOICE-NUMBER}", "787");
await addTemplateData(doc, "{INVOICE-DATE}", "August 28, 2023");
await addTemplateData(doc, "{AMOUNT-DUE}", "13,760.13");
await addTemplateData(doc, "{RECIPIENT}", "Celestyna Farmar");
await addTemplateData(doc, "{COMPANY-NAME}", "BrainBook");
await addTemplateData(doc, "{TOTAL}", "13,760.13");
await addTemplateData(doc, "{AMOUNT-PAID}", "0.00");
await addTemplateData(doc, "{BALANCE-DUE}", "13,760.13");
await addTemplateData(doc, "{ITEM}", "Training Sessions");
await addTemplateData(doc, "{DESCRIPTION}", "60 Minute instruction");
await addTemplateData(doc, "{RATE}", "3,440.03");
await addTemplateData(doc, "{QUANTITY}", "4");
await addTemplateData(doc, "{PRICE}", "13,760.13");
return doc;
}).then(async (doc) => await generatePdf(doc, "html-template-to-pdf.pdf"));
```
Powyższy kod definiuje trzy asynchroniczne funkcje pomocnicze:
- `getTemplateHtml`: Ładuje plik HTML do obiektu `PdfDocument` używając `PdfDocument.fromHtml`.
- `addTemplateData`: Wywołuje `PdfDocument.replaceText`, aby zastąpić klucz symbolu zastępczego jego rzeczywistą wartością danych.
- `generatePdf`: Zapisuje ukończony `PdfDocument` na wskazanej ścieżce pliku.
Każde wywołanie `replaceText` operuje bezpośrednio na pamięć operacyjną PDF, więc wielu zamien można łączyć bez ponownego ładowania dokumentu z dysku. Wygenerowany PDF zachowuje wszystkie style CSS, czcionki i układ z oryginalnego szablonu.

Ukończony PDF faktury z wartościami zastępczymi zastąpionymi prawdziwymi danymi. Style CSS i układ z oryginalnego szablonu są zachowane w całości.
To podejście dobrze skaluje się dla masowego generowania dokumentów. Wywołaj `getTemplateHtml` raz na rekord, aby utworzyć świeży `PdfDocument` dla każdego pliku wyjściowego, następnie łańcuch wywołań `addTemplateData` dla danych danego rekordu przed wywołaniem `generatePdf`.
## Jakie są kolejne kroki?
Ten samouczek obejmuje podstawowe metody konwersji HTML na PDF i najczęściej używane opcje renderowania w IronPDF dla Node.js. Poniższe tematy rozszerzają to, czego się tu nauczyłeś, na bardziej wyspecjalizowane obszary.
- **[Edytuj i Stempluj PDF w Node.js](/nodejs/examples/stamping-new-content/)** - Zastosowanie pieczątek, adnotacji i edycji tekstu do istniejących dokumentów PDF programowo.
- **[Scalaj i Dziel PDF w Node.js](/nodejs/how-to/nodejs-merge-pdf/)** - Scalaj wiele PDF w jeden dokument lub dziel jeden PDF na oddzielne strony.
- **[Dodaj znaki wodne do PDF w Node.js](/nodejs/examples/stamping-new-content/)** - Dodawanie znaków wodnych, tekstowych lub graficznych na każdej stronie PDF z precyzyjną kontrolą pozycji.
- **[Dokumentacja API IronPDF Node.js](/nodejs/object-reference/api/)** - Przeglądaj pełne API dla `PdfDocument`, `ChromePdfRenderOptions`, `WaitFor`, `AffixFonts` i wszystkich innych eksportowanych klas i interfejsów.
- **[Uzyskaj darmowy klucz licencyjny na próbną wersję](#trial-license)** - Generuj graficznej jakości PDF bez znaków wodnych przez aktywację bezpłatnej licencji próbnej na 30 dni.
Najpotężniejszą i najpopularniejszą funkcją IronPDF jest możliwość tworzenia wysokiej jakości plików PDF z surowego HTML, CSS i JavaScript. Ten tutorial prowadzi deweloperów Node.js przez każdy praktyczny sposób zamiany treści HTML na PDF - od konwersji jednolinijkowej aż po dynamiczne generowanie dokumentów oparte na szablonach.
IronPDF to biblioteka API wysokiego poziomu, która pomaga deweloperom szybko implementować potężne możliwości obsługi PDF w aplikacjach oprogramowania. IronPDF jest dostępne w wielu językach programowania. Aby uzyskać szczegółowe informacje na temat tworzenia plików PDF w .NET, Java i Python, zapoznaj się z oficjalnymi stronami dokumentacji. Ten tutorial opisuje jego użycie w projektach Node.js.
Zwróć uwagę: Instalacja IronPDF Engine jest opcjonalna. Pakiet @ironsoftware/ironpdf automatycznie pobiera i instaluje odpowiednie binaria dla twojego systemu operacyjnego podczas pierwszego uruchomienia. Zalecana jest instalacja opcjonalna w środowiskach, gdzie dostęp do internetu jest ograniczony lub niedostępny.
Domyślnie IronPDF oznacza wszystkie generowane lub modyfikowane dokumenty znakiem wodnym. Aby usunąć znak wodny, ustaw właściwość licenseKey na globalnym obiekcie IronPdfGlobalConfig z ważnym kluczem licencyjnym:
import { IronPdfGlobalConfig } from "@ironsoftware/ironpdf";// Retrieve the global configuration objectvar config = IronPdfGlobalConfig.getConfig();// Set a valid license key to remove watermarksconfig.licenseKey = "{YOUR-LICENSE-KEY-HERE}";
import { IronPdfGlobalConfig } from "@ironsoftware/ironpdf";
// Retrieve the global configuration object
var config = IronPdfGlobalConfig.getConfig();
// Set a valid license key to remove watermarks
config.licenseKey = "{YOUR-LICENSE-KEY-HERE}";
Zwróć uwagę: Ustaw klucz licencyjny i wszelkie inne globalne ustawienia konfiguracyjne przed wywołaniem innych funkcji biblioteki. To zapewnia optymalną wydajność i poprawne zachowanie w aplikacji.
Pozostałe przykłady kodu w tym samouczku zakładają, że klucz licencyjny został zastosowany w osobnym pliku config.js, który jest importowany na początku każdego skryptu:
import { PdfDocument } from "@ironsoftware/ironpdf";import './config.js'; // Import the configuration script// ...
import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script
// ...
JavaScript
Uzyskaj klucz licencyjny na ironpdf.com/nodejs/licensing/, aby generować dokumenty PDF bez znaków wodnych.
Jak przekonwertować HTML na PDF w Node.js?
Biblioteka Node.js IronPDF oferuje cztery podejścia do tworzenia plików PDF z treści HTML:
Z łańcucha kodu HTML
Z lokalnego pliku HTML
Z adresu URL online
Z archiwum skompresowanego ZIP
Każde podejście używa klasy PdfDocument jako podstawy. Obiekt PdfDocument reprezentuje plik PDF wyprodukowany z jakiejś treści źródłowej i napędza większość podstawowych funkcji tworzenia i edycji IronPDF.
Jak utworzyć PDF z łańcucha HTML?
PdfDocument.fromHtml generuje PDFy z ciągów surowego HTMLu. To podejście oferuje największą elastyczność spośród czterech metod, ponieważ ciąg HTML może pochodzić praktycznie z dowolnego miejsca - plików tekstowych, strumieni danych, silnika szablonów HTML lub dynamicznie skonstruowanego oznaczenia.
import { PdfDocument } from "@ironsoftware/ironpdf";import './config.js'; // Import the configuration script// Create a PDF from an HTML stringconst pdf = awaitPdfDocument.fromHtml("<h1>Hello from IronPDF!</h1>");// Save the PDF document to the file systemawait pdf.saveAs("html-string-to-pdf.pdf");
import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script
// Create a PDF from an HTML string
const pdf = await PdfDocument.fromHtml("<h1>Hello from IronPDF!</h1>");
// Save the PDF document to the file system
await pdf.saveAs("html-string-to-pdf.pdf");
JavaScript
PdfDocument.fromHtml zwraca Obietnicę, która rozwiązuje się do instancji klasy PdfDocument. Po uzyskaniu instancji, wywołać saveAs z ścieżką pliku docelowego, aby zapisać PDF na dysk. Zapisany plik PDF renderuje HTML dokładnie tak, jak przeglądarka zgodna ze standardami by go wyświetliła.
The PDF generated from the HTML string <h1>Hello from IronPDF!</h1>. Pliki PDF, które generuje PdfDocument.fromHtml, wyglądają tak samo jak treści stron internetowych.
Jak utworzyć PDF z pliku HTML?
PdfDocument.fromHtml również akceptuje ścieżkę do lokalnego dokumentu HTML. Zamiast łańcucha oznaczenia, podaj jako pierwszy argument prawidłową ścieżkę pliku. Jest to preferowane podejście przy pracy z zapisanymi stronami internetowymi, które odnoszą się do lokalnych zasobów CSS, JavaScript i obrazów.
import { PdfDocument } from "@ironsoftware/ironpdf";import './config.js'; // Import the configuration script// Render a PDF from a local HTML fileconst pdf = awaitPdfDocument.fromHtml("./sample2.html");// Save the PDF document to the project directoryawait pdf.saveAs("html-file-to-pdf-1.pdf");
import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script
// Render a PDF from a local HTML file
const pdf = await PdfDocument.fromHtml("./sample2.html");
// Save the PDF document to the project directory
await pdf.saveAs("html-file-to-pdf-1.pdf");
IronPDF zachowuje wygląd oryginalnego dokumentu HTML i utrzymuje funkcjonalność linków, formularzy i innych interaktywnych elementów. Ta wierność rozciąga się na złożone strony zawierające akapity, listy, obrazy, hiperłącza i skrypty po stronie klienta.
Ten PDF został wygenerowany z przykładu pliku HTML powyżej. Porównaj jego wygląd z poprzednim obrazem - IronPDF zachowuje układ z wysoką wiernością.
IronPDF obsługuje strony, które wykraczają poza prosty markup. Poniższy przykład konwertuje stronę z licznymi zewnętrznymi plikami CSS, obrazami i zasobami skryptów:
import { PdfDocument } from "@ironsoftware/ironpdf";import './config.js'; // Import the configuration script// Render a PDF from a complex HTML page with external assetsPdfDocument.fromHtml("./sample4.html").then(async (pdf) => { return await pdf.saveAs("html-file-to-pdf-2.pdf");});
import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script
// Render a PDF from a complex HTML page with external assets
PdfDocument.fromHtml("./sample4.html").then(async (pdf) => {
return await pdf.saveAs("html-file-to-pdf-2.pdf");
});
JavaScript
Jeśli wygląda dobrze w Google Chrome, będzie wyglądać dobrze po przekonwertowaniu na PDF. Obejmuje to projekty stron intensywnie korzystających z CSS i renderowanych przez JavaScript.
Porady: Jeśli strona korzysta z zasobów z lokalnych ścieżek plików, upewnij się, że wszystkie odwoływane pliki CSS, obrazy i skrypty są obecne względem lokalizacji pliku HTML. Silnik renderujący Chrome w IronPDF rozwiązuje te ścieżki w taki sam sposób, jak przeglądarka.
Jak utworzyć PDF z URL-a?
PdfDocument.fromUrl pobiera i renderuje aktywną stronę internetową jako PDF. Przekaż dowolny publicznie dostępny URL jako argument. Silnik renderujący Chrome w IronPDF pobiera stronę, ładuje wszystkie zasoby i tworzy PDF o idealnej jakości - nie jest wymagane ręczne pobieranie HTML.
import { PdfDocument } from "@ironsoftware/ironpdf";import './config.js'; // Import the configuration script// Convert a live web page to a PDFconst pdf = awaitPdfDocument.fromUrl("https://en.wikipedia.org/wiki/PDF");// Save the documentawait pdf.saveAs("url-to-pdf.pdf");
import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script
// Convert a live web page to a PDF
const pdf = await PdfDocument.fromUrl("https://en.wikipedia.org/wiki/PDF");
// Save the document
await pdf.saveAs("url-to-pdf.pdf");
JavaScript
Artykuł z Wikipedii dotyczący formatu PDF, jaki wygląda w przeglądarce zgodnej ze standardami.
**PDF wygenerowany po wywołaniu PdfDocument.fromUrl na artykule Wikipedii. Zwróć uwagę na jego dużą zgodność z oryginalną stroną internetową.
Ważne: Konwersje URL wymagają, aby docelowy serwer był dostępny z maszyny, na której działa IronPDF. Strony za uwierzytelnieniem, VPN lub zaporami mogą wymagać dodatkowej konfiguracji za pośrednictwem ChromePdfRenderOptions.
Jak utworzyć PDF z archiwum Zip?
PdfDocument.fromZip konwertuje wybrany plik HTML zawarty w archiwum ZIP na PDF. Jest to szczególnie przydatne podczas dystrybucji samodzielnych projektów HTML, które łączą swoje zasoby HTML, CSS i obrazy razem.
Dla tego przykładu załóż, że katalog projektu zawiera plik ZIP o następującej strukturze:
Przykładowy obraz wewnątrz hipotetycznego pliku ZIP HTML.
Przy wywoływaniu fromZip, należy określić ścieżkę do pliku ZIP jako pierwszy argument i obiekt konfiguracji jako drugi. Ustaw właściwość mainHtmlFile na nazwę pliku HTML w archiwum, który powinien zostać przekonwertowany:
import { PdfDocument } from "@ironsoftware/ironpdf";import './config.js'; // Import the configuration script// Convert an HTML file from a ZIP archive to PDFPdfDocument.fromZip("./html-zip.zip", { mainHtmlFile: "index.html"}).then(async (pdf) => { return await pdf.saveAs("html-zip-to-pdf.pdf");});
import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script
// Convert an HTML file from a ZIP archive to PDF
PdfDocument.fromZip("./html-zip.zip", {
mainHtmlFile: "index.html"
}).then(async (pdf) => {
return await pdf.saveAs("html-zip-to-pdf.pdf");
});
JavaScript
**Tworzenie PDF za pomocą PdfDocument.fromZip. Funkcja skutecznie renderuje kod HTML z pliku ZIP wraz z jego dołączonymi zasobami.
Jakie zaawansowane opcje renderowania obsługuje IronPDF?
Interfejs ChromePdfRenderOptions ujawnia właściwości do granularnej personalizacji zachowania renderowania PDF. Te ustawienia stosują się przed wygenerowaniem PDF i obejmują układ, wygląd wizualny oraz szczególne przypadki dla dynamicznych treści.
IronPDF stosuje domyślne ustawienia renderowania do każdej konwersji. Pobierz te domyślne wartości za pomocą funkcji defaultChromePdfRenderOptions:
import { defaultChromePdfRenderOptions } from "@ironsoftware/ironpdf";// Retrieve a ChromePdfRenderOptions object with default settingsvar options = defaultChromePdfRenderOptions();
import { defaultChromePdfRenderOptions } from "@ironsoftware/ironpdf";
// Retrieve a ChromePdfRenderOptions object with default settings
var options = defaultChromePdfRenderOptions();
JavaScript
Zmodyfikuj właściwości zwróconego obiektu według potrzeby i przekaż go do parametru renderOptions dowolnej metody konwersji.
Jak dodać nagłówki i stopki?
Właściwości textHeader i textFooter przyczepiają niestandardowe treści tekstowe do każdej strony nowo renderowanego PDF. Poniższy przykład tworzy PDF z głównej strony wyszukiwania Google z niestandardowym nagłówkiem i stopką, każda z użyciem innej czcionki:
import { PdfDocument, defaultChromePdfRenderOptions, AffixFonts } from "@ironsoftware/ironpdf";import './config.js'; // Import the configuration script// Start from default render optionsvar options = defaultChromePdfRenderOptions();// Configure a text-based headeroptions.textHeader = { centerText: "https://www.adobe.com", dividerLine: true, font: AffixFonts.CourierNew, fontSize: 12, leftText: "URL to PDF"};// Configure a text-based footeroptions.textFooter = { centerText: "IronPDF for Node.js", dividerLine: true, fontSize: 14, font: AffixFonts.Helvetica, rightText: "HTML to PDF in Node.js"};// Render the page with custom headers and footers appliedPdfDocument.fromUrl("https://www.google.com/", { renderOptions: options }).then(async (pdf) => { return await pdf.saveAs("add-custom-headers-footers-1.pdf");});
import { PdfDocument, defaultChromePdfRenderOptions, AffixFonts } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script
// Start from default render options
var options = defaultChromePdfRenderOptions();
// Configure a text-based header
options.textHeader = {
centerText: "https://www.adobe.com",
dividerLine: true,
font: AffixFonts.CourierNew,
fontSize: 12,
leftText: "URL to PDF"
};
// Configure a text-based footer
options.textFooter = {
centerText: "IronPDF for Node.js",
dividerLine: true,
fontSize: 14,
font: AffixFonts.Helvetica,
rightText: "HTML to PDF in Node.js"
};
// Render the page with custom headers and footers applied
PdfDocument.fromUrl("https://www.google.com/", { renderOptions: options }).then(async (pdf) => {
return await pdf.saveAs("add-custom-headers-footers-1.pdf");
});
JavaScript
PDF wygenerowany ze strony głównej Google z zastosowanym niestandardowym tekstowym nagłówkiem i stopką za pomocą textHeader i textFooter.
Dla bogatszych układów nagłówka i stopki, użyć zamiast tego właściwości htmlHeader i htmlFooter. Akceptują one surowe fragmenty HTML, dając pełną kontrolę nad typografią, obrazami i wyrównaniem. Poniższy przykład wyśrodkowuje URL strony na nagłówku pisanym pogrubioną czcionką oraz osadza obraz logo w stopce:
import { PdfDocument, defaultChromePdfRenderOptions } from "@ironsoftware/ironpdf";import './config.js'; // Import the configuration script// Start from default render optionsvar options = defaultChromePdfRenderOptions();// Define a rich HTML headeroptions.htmlHeader = { htmlFragment: "<strong>https://www.google.com/</strong>", dividerLine: true, dividerLineColor: "blue", loadStylesAndCSSFromMainHtmlDocument: true,};// Define a rich HTML footer with a logooptions.htmlFooter = { htmlFragment: "<img src='logo.png' alt='IronPDF for Node.js' style='display: block; width: 150px; height: auto; margin-left: auto; margin-right: auto;'>", dividerLine: true, loadStylesAndCSSFromMainHtmlDocument: true};// Apply custom HTML headers and footers during renderingawaitPdfDocument.fromUrl("https://www.google.com/", { renderOptions: options }).then(async (pdf) => { return await pdf.saveAs("add-html-headers-footers.pdf");});
import { PdfDocument, defaultChromePdfRenderOptions } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script
// Start from default render options
var options = defaultChromePdfRenderOptions();
// Define a rich HTML header
options.htmlHeader = {
htmlFragment: "<strong>https://www.google.com/</strong>",
dividerLine: true,
dividerLineColor: "blue",
loadStylesAndCSSFromMainHtmlDocument: true,
};
// Define a rich HTML footer with a logo
options.htmlFooter = {
htmlFragment: "<img src='logo.png' alt='IronPDF for Node.js' style='display: block; width: 150px; height: auto; margin-left: auto; margin-right: auto;'>",
dividerLine: true,
loadStylesAndCSSFromMainHtmlDocument: true
};
// Apply custom HTML headers and footers during rendering
await PdfDocument.fromUrl("https://www.google.com/", { renderOptions: options }).then(async (pdf) => {
return await pdf.saveAs("add-html-headers-footers.pdf");
});
JavaScript
IronPDF obsługuje nagłówki i stopki oparte na HTML, dając pełną kontrolę nad marką i układem na każdej stronie.
Jak kontrolować rozmiar strony, orientację i marginesy?
Właściwości margin, paperSize, fitToPaperMode, paperOrientation, i grayScale na ChromePdfRenderOptions kontrolują fizyczny układ każdej renderowanej strony. Poniższy przykład konwertuje stronę główną Google z niestandardowymi marginesami, orientacją krajobrazową A5 i wyjściem w odcieniach szarości:
import { PdfDocument, defaultChromePdfRenderOptions, PaperSize, FitToPaperModes, PdfPaperOrientation } from "@ironsoftware/ironpdf";import './config.js'; // Import the configuration script// Start from default render optionsvar options = defaultChromePdfRenderOptions();// Set page margins in millimetersoptions.margin = { top: 50, bottom: 50, left: 60, right: 60};// Configure paper size, fit mode, orientation, and color modeoptions.paperSize = PaperSize.A5;options.fitToPaperMode = FitToPaperModes.FitToPage;options.paperOrientation = PdfPaperOrientation.Landscape;options.grayScale = true;// Render with the customized layout settingsPdfDocument.fromUrl("https://www.google.com/", { renderOptions: options }).then(async (pdf) => { return await pdf.saveAs("set-margins-and-page-size.pdf");});
import { PdfDocument, defaultChromePdfRenderOptions, PaperSize, FitToPaperModes, PdfPaperOrientation } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script
// Start from default render options
var options = defaultChromePdfRenderOptions();
// Set page margins in millimeters
options.margin = {
top: 50,
bottom: 50,
left: 60,
right: 60
};
// Configure paper size, fit mode, orientation, and color mode
options.paperSize = PaperSize.A5;
options.fitToPaperMode = FitToPaperModes.FitToPage;
options.paperOrientation = PdfPaperOrientation.Landscape;
options.grayScale = true;
// Render with the customized layout settings
PdfDocument.fromUrl("https://www.google.com/", { renderOptions: options }).then(async (pdf) => {
return await pdf.saveAs("set-margins-and-page-size.pdf");
});
JavaScript
Enumeracja PaperSize obejmuje standardowe rozmiary papieru takie jak A4, A5, Letter, i Legal. Enumeracja PdfPaperOrientation wspiera Portrait i Landscape. Te ustawienia dają precyzyjną kontrolę nad wymiarami wyjściowymi dla dokumentów gotowych do druku.
Porady: Podczas generowania PDF dla przepływów pracy związanych z drukiem, zawsze określaj marginesy jawnie. Domyślne marginesy mogą nie pasować do wymagań Twojej docelowej drukarki lub formatu papieru.
Jak obsłużyć dynamiczne strony internetowe?
Strony ładujące treść asynchronicznie - przez zegary JavaScript, lazy loading lub wywołania API - mogą nie być w pełni renderowane w momencie, gdy silnik IronPDF je rejestruje. Mechanizm WaitFor skonfigurowany poprzez właściwość waitFor na ChromePdfRenderOptions, instruuje renderer Chrome, aby pauzował dopóki określone warunki nie zostaną spełnione, przed przechwyceniem strony.
Poniższy blok kodu ustawia IronPDF na czekanie 20 sekund przed zarejestrowaniem treści strony:
import { PdfDocument, defaultChromePdfRenderOptions, WaitForType } from "@ironsoftware/ironpdf";import './config.js'; // Import the configuration script// Configure the renderer to wait 20 seconds before capturingvar options = defaultChromePdfRenderOptions();options.waitFor = { type: WaitForType.RenderDelay, delay: 20000};PdfDocument.fromUrl("https://ironpdf.com/nodejs/", { renderOptions: options }).then(async (pdf) => { return await pdf.saveAs("waitfor-renderdelay.pdf");});
import { PdfDocument, defaultChromePdfRenderOptions, WaitForType } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script
// Configure the renderer to wait 20 seconds before capturing
var options = defaultChromePdfRenderOptions();
options.waitFor = {
type: WaitForType.RenderDelay,
delay: 20000
};
PdfDocument.fromUrl("https://ironpdf.com/nodejs/", { renderOptions: options }).then(async (pdf) => {
return await pdf.saveAs("waitfor-renderdelay.pdf");
});
JavaScript
Alternatywnie, skonfiguruj IronPDF, aby czekał, aż określony element DOM pojawi się przed renderowaniem. To jest przydatne w przypadku stron, gdzie treść jest wstrzykiwana po zakończeniu montowania przez framework JavaScript:
import { PdfDocument, defaultChromePdfRenderOptions, WaitForType } from "@ironsoftware/ironpdf";import './config.js'; // Import the configuration script// Configure the renderer to wait for a specific DOM element (up to 20 seconds)var options = defaultChromePdfRenderOptions();options.waitFor = { type: WaitForType.HtmlElement, htmlQueryStr: "div.ProseMirror", maxWaitTime: 20000,};PdfDocument.fromUrl("https://app.surferseo.com/drafts/s/V7VkcdfgFz-dpkldsfHDGFFYf4jjSvvjsdf", { renderOptions: options }).then(async (pdf) => { return await pdf.saveAs("waitfor-htmlelement.pdf");});
import { PdfDocument, defaultChromePdfRenderOptions, WaitForType } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script
// Configure the renderer to wait for a specific DOM element (up to 20 seconds)
var options = defaultChromePdfRenderOptions();
options.waitFor = {
type: WaitForType.HtmlElement,
htmlQueryStr: "div.ProseMirror",
maxWaitTime: 20000,
};
PdfDocument.fromUrl("https://app.surferseo.com/drafts/s/V7VkcdfgFz-dpkldsfHDGFFYf4jjSvvjsdf", { renderOptions: options }).then(async (pdf) => {
return await pdf.saveAs("waitfor-htmlelement.pdf");
});
JavaScript
Strategia WaitForType.HtmlElement używa standardowego selektora zapytań CSS. Renderer sprawdza obecność elementu, dopóki nie miną maxWaitTime milisekundy lub element zostanie znaleziony - cokolwiek nastąpi pierwszy.
Ostrzeżenie: Ustawienie nadmiernie długiego czasu oczekiwania może znacznie zwiększyć czas generowania PDF w aplikacjach o wysokiej przepustowości. Używaj minimalnego opóźnienia, które niezawodnie rejestruje treść wymaganą przez Twój przypadek użycia.
Jak wygenerować PDF z szablonu HTML?
Powszechnym wzorcem automatyzacji w świecie rzeczywistym jest generowanie serii PDF z współdzielonego szablonu HTML, zastępującego wartości wstawiane danymi z bazy danych, API lub arkusza kalkulacyjnego. Metoda replaceText IronPDF na PdfDocument obsługuje to bezpośrednio.
Szablon faktury poniżej (dostosowany z publicznie dostępnego szablonu faktury CodePen) używa nawiasów klamrowych jako symboli zastępczych, takich jak {COMPANY-NAME}, {FULL-NAME}, i {INVOICE-NUMBER} dla podmienialnej treści:
Przykładowy szablon faktury z znacznikami zastępczymi. Kod JavaScript zastąpi każdy znacznik prawdziwymi danymi przed zapisaniem dokumentu jako PDF.
Poniższy kod ładuje szablon, zastępuje każdy znacznik danymi testowymi i zapisuje wynik jako PDF:
//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/html-template-to-pdf.jsimport { PdfDocument } from "@ironsoftware/ironpdf";import './config.js'; // Import the configuration script/** * Loads an HTML template from the file system as a PdfDocument. */async function getTemplateHtml(fileLocation) { returnPdfDocument.fromHtml(fileLocation);}/** * Saves a PdfDocument to the specified file path. */async function generatePdf(pdf, location) { return pdf.saveAs(location);}/** * Replaces a named placeholder in the PdfDocument with a data value. */async function addTemplateData(pdf, key, value) { return pdf.replaceText(key, value);}// Path to the HTML invoice templateconst template = "./sample-invoice.html";// Load the template, fill in all placeholder values, then save the PDFgetTemplateHtml(template).then(async (doc) => { await addTemplateData(doc, "{FULL-NAME}", "Lizbeth Presland"); await addTemplateData(doc, "{ADDRESS}", "678 Manitowish Alley, Portland, OG"); await addTemplateData(doc, "{PHONE-NUMBER}", "(763) 894-4345"); await addTemplateData(doc, "{INVOICE-NUMBER}", "787"); await addTemplateData(doc, "{INVOICE-DATE}", "August 28, 2023"); await addTemplateData(doc, "{AMOUNT-DUE}", "13,760.13"); await addTemplateData(doc, "{RECIPIENT}", "Celestyna Farmar"); await addTemplateData(doc, "{COMPANY-NAME}", "BrainBook"); await addTemplateData(doc, "{TOTAL}", "13,760.13"); await addTemplateData(doc, "{AMOUNT-PAID}", "0.00"); await addTemplateData(doc, "{BALANCE-DUE}", "13,760.13"); await addTemplateData(doc, "{ITEM}", "Training Sessions"); await addTemplateData(doc, "{DESCRIPTION}", "60 Minute instruction"); await addTemplateData(doc, "{RATE}", "3,440.03"); await addTemplateData(doc, "{QUANTITY}", "4"); await addTemplateData(doc, "{PRICE}", "13,760.13"); return doc;}).then(async (doc) => await generatePdf(doc, "html-template-to-pdf.pdf"));
//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/html-template-to-pdf.js
import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script
/**
* Loads an HTML template from the file system as a PdfDocument.
*/
async function getTemplateHtml(fileLocation) {
return PdfDocument.fromHtml(fileLocation);
}
/**
* Saves a PdfDocument to the specified file path.
*/
async function generatePdf(pdf, location) {
return pdf.saveAs(location);
}
/**
* Replaces a named placeholder in the PdfDocument with a data value.
*/
async function addTemplateData(pdf, key, value) {
return pdf.replaceText(key, value);
}
// Path to the HTML invoice template
const template = "./sample-invoice.html";
// Load the template, fill in all placeholder values, then save the PDF
getTemplateHtml(template).then(async (doc) => {
await addTemplateData(doc, "{FULL-NAME}", "Lizbeth Presland");
await addTemplateData(doc, "{ADDRESS}", "678 Manitowish Alley, Portland, OG");
await addTemplateData(doc, "{PHONE-NUMBER}", "(763) 894-4345");
await addTemplateData(doc, "{INVOICE-NUMBER}", "787");
await addTemplateData(doc, "{INVOICE-DATE}", "August 28, 2023");
await addTemplateData(doc, "{AMOUNT-DUE}", "13,760.13");
await addTemplateData(doc, "{RECIPIENT}", "Celestyna Farmar");
await addTemplateData(doc, "{COMPANY-NAME}", "BrainBook");
await addTemplateData(doc, "{TOTAL}", "13,760.13");
await addTemplateData(doc, "{AMOUNT-PAID}", "0.00");
await addTemplateData(doc, "{BALANCE-DUE}", "13,760.13");
await addTemplateData(doc, "{ITEM}", "Training Sessions");
await addTemplateData(doc, "{DESCRIPTION}", "60 Minute instruction");
await addTemplateData(doc, "{RATE}", "3,440.03");
await addTemplateData(doc, "{QUANTITY}", "4");
await addTemplateData(doc, "{PRICE}", "13,760.13");
return doc;
}).then(async (doc) => await generatePdf(doc, "html-template-to-pdf.pdf"));
JavaScript
Powyższy kod definiuje trzy asynchroniczne funkcje pomocnicze:
getTemplateHtml: Ładuje plik HTML do obiektu PdfDocument używając PdfDocument.fromHtml.
addTemplateData: Wywołuje PdfDocument.replaceText, aby zastąpić klucz symbolu zastępczego jego rzeczywistą wartością danych.
generatePdf: Zapisuje ukończony PdfDocument na wskazanej ścieżce pliku.
Każde wywołanie replaceText operuje bezpośrednio na pamięć operacyjną PDF, więc wielu zamien można łączyć bez ponownego ładowania dokumentu z dysku. Wygenerowany PDF zachowuje wszystkie style CSS, czcionki i układ z oryginalnego szablonu.
Ukończony PDF faktury z wartościami zastępczymi zastąpionymi prawdziwymi danymi. Style CSS i układ z oryginalnego szablonu są zachowane w całości.
To podejście dobrze skaluje się dla masowego generowania dokumentów. Wywołaj getTemplateHtml raz na rekord, aby utworzyć świeży PdfDocument dla każdego pliku wyjściowego, następnie łańcuch wywołań addTemplateData dla danych danego rekordu przed wywołaniem generatePdf.
Jakie są kolejne kroki?
Ten samouczek obejmuje podstawowe metody konwersji HTML na PDF i najczęściej używane opcje renderowania w IronPDF dla Node.js. Poniższe tematy rozszerzają to, czego się tu nauczyłeś, na bardziej wyspecjalizowane obszary.
Edytuj i Stempluj PDF w Node.js - Zastosowanie pieczątek, adnotacji i edycji tekstu do istniejących dokumentów PDF programowo.
Dodaj znaki wodne do PDF w Node.js - Dodawanie znaków wodnych, tekstowych lub graficznych na każdej stronie PDF z precyzyjną kontrolą pozycji.
Dokumentacja API IronPDF Node.js - Przeglądaj pełne API dla PdfDocument, ChromePdfRenderOptions, WaitFor, AffixFonts i wszystkich innych eksportowanych klas i interfejsów.
Użyj biblioteki IronPDF. Zainstaluj ją za pomocą npm install @ironsoftware/ironpdf, a następnie wywołaj PdfDocument.fromHtml z ciągiem HTML lub ścieżką do pliku, lub PdfDocument.fromUrl z adresem strony WWW. Zapisz wynik za pomocą PdfDocument.saveAs.
Jak konwertować ciąg HTML na PDF w Node.js?
Wywołaj PdfDocument.fromHtml z ciągiem HTML jako argumentem. Metoda zwraca Obietnicę, która rozwiązuje się do instancji PdfDocument. Połącz saveAs ze skutkiem, aby zapisać PDF na dysku.
Jak konwertować lokalny plik HTML na PDF w Node.js?
Przekaż prawidłową ścieżkę systemu plików do PdfDocument.fromHtml zamiast ciągu HTML. IronPDF rozwiązuje względne ścieżki CSS, obrazów i skryptów w taki sam sposób, jak przeglądarka podczas ładowania pliku.
Jak konwertować URL na PDF w Node.js?
Wywołaj PdfDocument.fromUrl z docelowym URL. IronPDF pobiera stronę, używając swojego silnika renderującego Chrome i produkuje idealnie odwzorowany PDF. Docelowy URL musi być publicznie dostępny z hosta uruchamiającego IronPDF.
Jak dodać nagłówki i stopki do PDF w Node.js?
Ustaw właściwości textHeader i textFooter na obiekcie ChromePdfRenderOptions dla prostych nagłówków i stopek tekstowych. Dla bogatszych układów użyj htmlHeader i htmlFooter z surowymi fragmentami HTML. Przekaż obiekt opcji do parametru renderOptions dowolnej metody konwersji.
Jak zmienić rozmiar i orientację strony w IronPDF dla Node.js?
Ustaw options.paperSize na wartość z enum PaperSize (na przykład PaperSize.A4 lub PaperSize.Letter) i ustaw options.paperOrientation na PdfPaperOrientation.Portrait lub PdfPaperOrientation.Landscape. Przekaż skonfigurowane opcje do metody konwersji.
Jak obsłużyć dynamiczną zawartość JavaScript podczas konwersji do PDF?
Użyj właściwości waitFor na ChromePdfRenderOptions. Ustaw type na WaitForType.RenderDelay i podaj opóźnienie w milisekundach albo ustaw type na WaitForType.HtmlElement i podaj selektor zapytania CSS. IronPDF wstrzyma renderowanie, aż warunek zostanie spełniony.
Jak konwertować plik HTML wewnątrz archiwum ZIP na PDF?
Wywołaj PdfDocument.fromZip z ścieżką do pliku ZIP jako pierwszym argumentem i obiektem z opcjami jako drugim. Ustaw właściwość mainHtmlFile na nazwę pliku HTML wewnątrz archiwum, który ma być skonwertowany.
Jak usunąć znak wodny IronPDF z wygenerowanych PDF?
Zastosuj ważny klucz licencyjny do konfiguracji globalnej przed wywołaniem jakiejkolwiek metody konwersji. Pobierz obiekt konfiguracji za pomocą IronPdfGlobalConfig.getConfig() i ustaw config.licenseKey na swój klucz. Bezpłatna licencja próbna jest dostępna na ironpdf.com.
Jak generować PDF z szablonu HTML w Node.js?
Załaduj szablon przy użyciu PdfDocument.fromHtml, a następnie wywołaj PdfDocument.replaceText dla każdego symbolu zastępczego w szablonie, podając ciąg symbolu zastępczego i jego wartość zastępującą. Po zakończeniu wszystkich podstawień wywołaj saveAs, aby zapisać ostateczny PDF.
Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podręczników.