Konwertuj HTML na 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. 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.

Szybki start: Konwertuj HTML na PDF w Node.js

Spis treści

Jak rozpocząć pracę z IronPDF for Node.js? {#getting-started}

Rozpocznij używanie IronPDF w swoim projekcie już dziś dzięki darmowej wersji próbnej.

Pierwszy krok:
green arrow pointer

Zainstaluj bibliotekę IronPDF

Zainstaluj pakiet Node.js IronPDF, uruchamiając poniższą komendę NPM w wybranym projekcie Node.js:

//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/install.sh
npm install @ironsoftware/ironpdf
//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/install.sh
npm install @ironsoftware/ironpdf
SHELL

Możesz także pobrać i zainstalować pakiet IronPDF ręcznie.

Jak zainstalować IronPDF Engine?

IronPDF for Node.js wymaga binarnego silnika IronPDF do działania.

Zwróć uwagęInstalacja IronPDF Engine jest opcjonalna. Pakiet @ironsoftware/ironpdf automatycznie pobiera i instaluje odpowiedni plik binarny dla danego systemu operacyjnego przy pierwszym uruchomieniu. 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.

Jak zastosować klucz licencyjny?

Domyślnie IronPDF oznacza wszystkie generowane lub modyfikowane dokumenty znakiem wodnym. Aby usunąć znak wodny, należy ustawić właściwość licenseKey w globalnym obiekcie IronPdfGlobalConfig przy użyciu prawidłowego klucza licencyjnego:

//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/config.js
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}";
//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/config.js
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}";
JAVASCRIPT

Uzyskaj bezpłatny klucz licencyjny na okres próbny lub kup klucz licencyjny na stronie licencjonowania.

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 oddzielnym pliku config.js, który jest importowany na początku każdego skryptu:

//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/config-import.js
import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script
// ...
//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/config-import.js
import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script
// ...
JAVASCRIPT

Znak wodny IronPDF wyświetlany w dokumencie PDF wygenerowanym bez klucza licencyjnego Uzyskaj klucz licencyjny na ironpdf.com/nodejs/licensing/, aby generować dokumenty PDF bez znaków wodnych.

Jak przekonwertować HTML na PDF w Node.js? {#convert-html-to-PDF}

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 z tych rozwiązań wykorzystuje klasę PdfDocument jako podstawę. PdfDocument oznacza plik PDF utworzony na podstawie treści źródłowej i stanowi podstawę większości podstawowych funkcji tworzenia i edycji w IronPDF.

Jak utworzyć PDF z łańcucha HTML? {#create-PDF-from-html-string}

PdfDocument.fromHtml generuje pliki PDF na podstawie ciągów surowego kodu HTML. To podejście zapewnia największą elastyczność spośród czterech metod, ponieważ ciąg HTML może pochodzić praktycznie z dowolnego źródła — plików tekstowych, strumieni danych, silnika szablonów HTML lub dynamicznie tworzonego kodu.

//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/html-string-to-pdf.js
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");
//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/html-string-to-pdf.js
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ę (Promise), która rozstrzyga się na instancję klasy PdfDocument. Po uzyskaniu instancji wywołaj saveAs z docelową ścieżką pliku, aby zapisać plik PDF na dysku. Zapisany plik PDF renderuje HTML dokładnie tak, jak przeglądarka zgodna ze standardami by go wyświetliła.

PDF document generated from the HTML string containing a level-one heading Hello from IronPDF! The PDF generated from the HTML string <h1>Hello from IronPDF!</h1>. Pliki PDF generowane przez PdfDocument.fromHtml wyglądają tak samo, jak wyglądałaby zawartość strony internetowej.

Jak utworzyć PDF z pliku HTML? {#create-pdf-from-html-file}

PdfDocument.fromHtml akceptuje również ś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ą na PDF:

//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/html-file-to-pdf.js
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");
//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/html-file-to-pdf.js
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");
JAVASCRIPT

Przykładowa strona HTML wyświetlana w przeglądarce Google Chrome przed konwersją do formatu 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.

Dokument PDF wygenerowany na podstawie przykładowego pliku HTML, pokazujący wierne odwzorowanie oryginalnego układu strony 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:

//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/html-complex-file-to-pdf.js
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");
});
//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/html-complex-file-to-pdf.js
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

Plik PDF wygenerowany ze złożonej strony HTML zawierającej bogate style CSS i treści renderowane przez 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.

PoradyJeś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? {#create-PDF-from-url}

PdfDocument.fromUrl pobiera i renderuje aktualną stronę internetową jako plik 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.

//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/url-to-pdf.js
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");
//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/url-to-pdf.js
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ł w Wikipedii na temat formatu PDF wyświetlany w przeglądarce zgodnej ze standardami Artykuł z Wikipedii dotyczący formatu PDF, jaki wygląda w przeglądarce zgodnej ze standardami.

Dokument PDF wygenerowany poprzez wywołanie metody PdfDocument.fromUrl na stronie artykułu Wikipedii w formacie PDF **Plik PDF wygenerowany po wywołaniu PdfDocument.fromUrl w artykule Wikipedii. Zwróć uwagę na jego dużą zgodność z oryginalną stroną internetową.

WażneKonwersje URL wymagają, aby docelowy serwer był dostępny z maszyny, na której działa IronPDF. Strony wymagające uwierzytelnienia, korzystające z sieci VPN lub chronione zaporami sieciowymi mogą wymagać dodatkowej konfiguracji poprzez ChromePdfRenderOptions.

Jak utworzyć PDF z archiwum Zip? {#create-pdf-from-zip}

PdfDocument.fromZip konwertuje określony plik HTML zawarty w archiwum ZIP na plik 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:

//: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:

//: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 for Node.js">
    </a>
  </body>
</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 for Node.js">
    </a>
  </body>
</html>
HTML

A style.css określa układ strony i zasady dotyczące czcionek:

//: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 plik obrazu logo.png zawarty w hipotetycznym pliku ZIP HTML Przykładowy obraz wewnątrz hipotetycznego pliku ZIP HTML.

Podczas wywoływania fromZip należy podać ścieżkę do pliku ZIP jako pierwszy argument, a obiekt konfiguracyjny jako drugi. Ustaw właściwość mainHtmlFile na nazwę pliku HTML w archiwum, który ma zostać przekonwertowany:

//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/zip-to-pdf.js
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");
});
//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/zip-to-pdf.js
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

Plik PDF wygenerowany z archiwum ZIP w formacie HTML, przedstawiający logo IronPDF i stylizowany nagłówek na czarnym tle **Tworzenie plików PDF przy użyciu PdfDocument.fromZip. Funkcja skutecznie renderuje kod HTML z pliku ZIP wraz z jego dołączonymi zasobami.

Jakie zaawansowane opcje renderowania obsługuje IronPDF? {#advanced-rendering-options}

Interfejs ChromePdfRenderOptions udostępnia właściwości umożliwiające szczegółowe dostosowanie sposobu renderowania plików 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 wartości domyślne za pomocą funkcji defaultChromePdfRenderOptions:

//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/default-options.js
import { defaultChromePdfRenderOptions } from "@ironsoftware/ironpdf";

// Retrieve a ChromePdfRenderOptions object with default settings
var options = defaultChromePdfRenderOptions();
//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/default-options.js
import { defaultChromePdfRenderOptions } from "@ironsoftware/ironpdf";

// Retrieve a ChromePdfRenderOptions object with default settings
var options = defaultChromePdfRenderOptions();
JAVASCRIPT

W razie potrzeby zmodyfikuj właściwości zwróconego obiektu i przekaż go do parametru renderOptions dowolnej metody konwersji.

Jak dodać nagłówki i stopki? {#add-headers-footers}

Właściwości textHeader i textFooter dołączają niestandardową treść tekstową do każdej strony nowo wyrenderowanego pliku 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:

//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/custom-headers-footers.js
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");
});
//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/custom-headers-footers.js
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

Plik PDF wygenerowany ze strony głównej Google z dodanym niestandardowym nagłówkiem i stopką tekstową PDF wygenerowany ze strony głównej Google z niestandardowym nagłówkiem i stopką tekstową zastosowanymi przy użyciu textHeader i textFooter.

Aby uzyskać bogatsze układy nagłówków i stopek, należy zamiast tego użyć 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:

//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/html-headers-footers.js
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");
});
//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/html-headers-footers.js
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

Plik PDF wygenerowany z nagłówkiem opartym na HTML, zawierającym adres URL strony pogrubioną czcionką, oraz stopką opartą na HTML, zawierającą logo IronPDF 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? {#page-size-orientation-margins}

Właściwości margin, paperSize, fitToPaperMode, paperOrientation oraz grayScale w 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:

//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/page-size-orientation.js
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");
});
//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/page-size-orientation.js
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

Wykaz PaperSize obejmuje standardowe rozmiary papieru, takie jak A4, A5, Letter i Legal. Wyliczenie PdfPaperOrientation obsługuje Portrait i Landscape. Te ustawienia dają precyzyjną kontrolę nad wymiarami wyjściowymi dla dokumentów gotowych do druku.

PoradyPodczas 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? {#dynamic-web-pages}

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, konfigurowany za pomocą właściwości waitFor w ChromePdfRenderOptions, nakazuje rendererowi Chrome wstrzymanie się do momentu spełnienia określonych warunków przed przechwyceniem strony.

Poniższy blok kodu ustawia IronPDF na czekanie 20 sekund przed zarejestrowaniem treści strony:

//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/waitfor-delay.js
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");
});
//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/waitfor-delay.js
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:

//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/waitfor-element.js
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");
});
//:path=/static-assets/ironpdf-nodejs/content-code-examples/tutorials/html-to-pdf/waitfor-element.js
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 wykorzystuje standardowy selektor zapytań CSS. Renderer sprawdza obecność elementu do momentu upływu maxWaitTime milisekund lub znalezienia elementu — w zależności od tego, co nastąpi wcześniej.

OstrzeżenieUstawienie 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? {#html-template-to-PDF}

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 w IronPDF na PdfDocument obsługuje to bezpośrednio.

Poniższy przykładowy szablon faktury (opracowany na podstawie publicznie dostępnego szablonu faktury CodePen) wykorzystuje symbole zastępcze w nawiasach klamrowych, takie jak {COMPANY-NAME}, {FULL-NAME} i {INVOICE-NUMBER}, dla treści podlegających zastąpieniu:

Przykładowy szablon faktury w formacie HTML z tagami zastępczymi do dynamicznego wstawiania danych 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.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"));
//: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 przy użyciu PdfDocument.fromHtml.
  • addTemplateData: Wywołuje PdfDocument.replaceText w celu zastąpienia klucza zastępczego rzeczywistą wartością danych.
  • generatePdf: Zapisuje gotowy plik PdfDocument w docelowej ścieżce.

Każde wywołanie replaceText działa bezpośrednio na reprezentacji PDF w pamięci, więc można łączyć wiele zamian bez konieczności ponownego ładowania dokumentu z dysku. Wygenerowany PDF zachowuje wszystkie style CSS, czcionki i układ z oryginalnego szablonu.

Dokument PDF wygenerowany na podstawie szablonu faktury po zastąpieniu wszystkich symboli zastępczych rzeczywistymi danymi 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ć nowy PdfDocument dla każdego pliku wyjściowego, a następnie połącz wywołania addTemplateData dla danych tego rekordu przed wywołaniem generatePdf.

Jakie są kolejne kroki? {#next-steps}

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.

Często Zadawane Pytania

Jak konwertować HTML na PDF w Node.js?

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
Autor tekstów technicznych

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ę...

Czytaj więcej
Gotowy, aby rozpocząć?
Wersja: 2026.5 just released
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu?
Uruchom przykład i zobacz, jak Twój kod HTML zamienia się w plik PDF.