Konwertuj HTML na PDF w Node.js

Konwertowanie HTML do PDF w Node.js

This article was translated from English: Does it need improvement?
Translated
View the article in English

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:

npm i @ironsoftware/ironpdf

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

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:

: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 osobnym 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
// ...
JAVASCRIPT

znak wodny IronPDF wyświetlany na 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 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? {#create-PDF-from-html-string}

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.

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

Dokument PDF wygenerowany z ciągu HTML zawierającego nagłówek pierwszego poziomu Hello from IronPDF! 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? {#create-pdf-from-html-file}

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ą 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");
JAVASCRIPT

Przykładowa strona HTML wyświetlana w Google Chrome przed konwersją do 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 z przykładowego pliku HTML, pokazujący wierną reprodukcję 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");
});
JAVASCRIPT

PDF wygenerowany z 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 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.

: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ł Wikipedii na temat formatu PDF, jak wygląda w zgodnej z standardami przeglądarce Artykuł z Wikipedii dotyczący formatu PDF, jaki wygląda w przeglądarce zgodnej ze standardami.

Dokument PDF wygenerowany przez wywołanie PdfDocument.fromUrl na stronie artykułu PDF Wikipedii **PDF wygenerowany po wywołaniu PdfDocument.fromUrl na 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 za uwierzytelnieniem, VPN lub zaporami mogą wymagać dodatkowej konfiguracji za pośrednictwem ChromePdfRenderOptions.

Jak utworzyć PDF z archiwum Zip? {#create-pdf-from-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:

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

A style.css deklaruje reguły układu strony i czcionki:

//: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 logo.png zawarty w hipotetycznym pliku HTML ZIP 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:

: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

PDF wygenerowany z archiwum HTML ZIP, pokazujący logo IronPDF i stylizowany nagłówek na czarnym tle **Tworzenie PDF za pomocą PdfDocument.fromZip. Funkcja skutecznie renderuje kod HTML z pliku ZIP wraz z jego dołączonymi zasobami.

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

Moją ulubioną biblioteką tego typu jest IronPDF. Umożliwia ona szybkie i efektywne manipulowanie plikami PDF. Posiada także wiele cennych funkcji, takich jak eksport do formatu PDF/A i cyfrowe podpisywanie dokumentów PDF.

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

Milan Jovanovic

Microsoft MVP

Zobacz studium przypadku
Icon Quote related to Jak utworzyć PDF z archiwum Zip? {#create-pdf-from-zip}

IronOCR pozwala nam oszczędzić 40 000 USD rocznie na ręcznym przetwarzaniu, jednocześnie zwiększając produktywność i uwalniając zasoby do zadań o wysokim wpływie. Gorąco polecam.

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

Brent Matzelle

Dyrektor technologiczny, OPYN

Zobacz studium przypadku
Icon Quote related to Jak utworzyć PDF z archiwum Zip? {#create-pdf-from-zip}

IronSuite odgrywa kluczową rolę w naszej działalności. Są to narzędzia zwiększające wydajność w całej firmie, w tym tworzenie planów pięter i poprawa zarządzania zapasami.

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

David Jones

Główny inżynier oprogramowania, Agorus Build

Zobacz studium przypadku

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

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:

: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

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? {#add-headers-footers}

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:

: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

PDF wygenerowany z strony głównej Google z dodanym niestandardowym nagłówkiem i stopką tekstową 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:

: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

PDF wygenerowany z nagłówkiem opartym na HTML pokazującym URL strony w pogrubieniu oraz stopką opartą na HTML pokazują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, 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:

: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

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.

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

: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");
});
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ż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 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 HTML z tagami zastępczymi do zamiany dynamicznych 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 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.

Dokument PDF wygenerowany z 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ć ś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? {#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.

Darrius Serrant
Inżynier oprogramowania Full Stack (WebOps)

Darrius Serrant posiada tytuł licencjata z informatyki z Uniwersytetu Miami i pracuje jako Full Stack WebOps Marketing Engineer w Iron Software. Już od młodych lat zainteresował się kodowaniem, postrzegając informatykę jako zarówno tajemniczą, jak i dostępną, co czyni ją doskonałym medium dla kreatywności ...

Czytaj więcej
Gotowy, aby rozpocząć?
Wersja: 2026.6 właśnie wydany
Still Scrolling Icon

Wciąż przewijasz?

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