Convert HTML to PDF in Node.js

HTML do PDF Node.js

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

Możliwość tworzenia wysokojakościowych PDF z surowego HTML, CSS i JavaScript jest najsilniejszą i najpopularniejszą funkcją IronPDF. Ten poradnik to wszechstronny wstęp pomagający programistom Node wykorzystać IronPDF do włączenia generowania HTML do PDF w swoich projektach.

IronPDF to biblioteka API wysokiego poziomu, która pomaga programistom szybko i łatwo implementować potężne i solidne możliwości przetwarzania PDF w aplikacjach oprogramowania. IronPDF jest dostępne w wielu językach programowania. Aby uzyskać szczegółowe informacje na temat tworzenia PDF w .NET, Java i Python, skorzystaj z oficjalnych stron dokumentacji. Ten poradnik obejmuje jego użycie w projektach Node.js.



Pierwsze kroki

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

Pierwszy krok:
green arrow pointer

Zainstaluj bibliotekę IronPDF dla Node.js

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

npm install @ironsoftware/ironpdf
npm install @ironsoftware/ironpdf
SHELL

Możesz również pobrać i zainstalować pakiet IronPDF ręcznie.

Zainstaluj ręcznie silnik IronPDF (opcjonalnie)

IronPDF dla Node.js obecnie wymaga binariów silnika IronPDF, aby działał prawidłowo.

Zainstaluj binaria silnika IronPDF instalując odpowiedni pakiet dla swojego systemu operacyjnego:

Zwróć uwagęInstalacja silnika IronPDF jest opcjonalna, ponieważ @ironpdf automatycznie pobierze i zainstaluje odpowiednie binaria dla Twojej przeglądarki i systemu operacyjnego z NPM przy pierwszym uruchomieniu. Jednakże ręczna instalacja tych binariów będzie niezbędna w sytuacjach, gdzie dostęp do internetu jest ograniczony, zmniejszony lub niepożądany.

Zastosuj klucz licencyjny (opcjonalnie)

Domyślnie, IronPDF oznaczy wszystkie dokumenty, które generuje lub modyfikuje, tłem z napisem tytułowym.

Rysunek 1 Uzyskaj klucz licencyjny na ironpdf.com/nodejs/licensing/, aby generować dokumenty PDF bez znaków wodnych.

Aby używać IronPDF bez dodatkowego znaku wodnego, musisz ustawić właściwość licenseKey na globalnym obiekcie IronPdfGlobalConfig z ważnym kluczem licencyjnym. Kod źródłowy do realizacji tego procesu jest podany poniżej:

import { IronPdfGlobalConfig } from "@ironsoftware/ironpdf";

// Get the global config object
var config = IronPdfGlobalConfig.getConfig();

// Set the license key for IronPDF
config.licenseKey = "{YOUR-LICENSE-KEY-HERE}";
import { IronPdfGlobalConfig } from "@ironsoftware/ironpdf";

// Get the global config object
var config = IronPdfGlobalConfig.getConfig();

// Set the license key for IronPDF
config.licenseKey = "{YOUR-LICENSE-KEY-HERE}";
JAVASCRIPT

Zakup klucz licencyjny z naszej strony licencyjnej lub skontaktuj się z nami, aby otrzymać bezpłatny klucz licencyjny próbny.

Zwróć uwagę Klucz licencyjny i inne globalne ustawienia konfiguracyjne powinny być ustawione przed użyciem innych funkcji bibliotecznych w celu zapewnienia najlepszej wydajności i prawidłowego działania.

Następujące sekcje tego poradnika przyjmą, że mamy klucz licencyjny i ustawiliśmy go w oddzielnym pliku JavaScript o nazwie config.js. Importujemy ten skrypt tam, gdzie będziemy korzystać z funkcjonalności IronPDF:

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

Konwersja HTML do PDF

Wydanie Node biblioteki IronPDF oferuje trzy podejścia do tworzenia plików PDF z treści HTML:

  1. Z ciągu kodu HTML
  2. Z lokalnego pliku HTML
  3. Z witryny internetowej

Ta sekcja wyjaśni szczegółowo wszystkie trzy metody.

Utwórz plik PDF z ciągu HTML

PdfDocument.fromHtml to metoda, która umożliwia generowanie PDF z ciągów surowego kodu strony internetowej.

Ta metoda oferuje największą elastyczność ze wszystkich trzech podejść. Jest to możliwe, ponieważ dane w ciągu HTML mogą pochodzić praktycznie z każdego źródła: plików tekstowych, strumieni danych, szablonu HTML, wygenerowanych danych HTML, itd.

Przykład kodu poniżej pokazuje, jak używać metody PdfDocument.fromHtml w praktyce:

import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Create a PDF from the HTML String "Hello world!"
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");
import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Create a PDF from the HTML String "Hello world!"
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

Jak pokazano powyżej, wywołujemy metodę PdfDocument.fromHtml z ciągiem tekstowym zawierającym kod znaczników dla elementu nagłówka poziomu pierwszego.

PdfDocument.fromHtml zwraca Promisę, która rozwiązuje się do instancji klasy PdfDocument. Obiekt PdfDocument reprezentuje plik PDF, który biblioteka wygenerowała z jakiejś treści źródłowej. Ta klasa jest fundamentem większości podstawowych funkcji IronPDF, napędzając znaczne możliwości tworzenia i edytowania PDF.

Na końcu używamy metody saveAs na PdfDocument, aby zapisać plik na dysku. Zapisany plik PDF jest pokazany poniżej.

Rysunek 2 The PDF generated from the HTML string "<h1>Hello from IronPDF!</h1>". Pliki PDF, które generuje PdfDocument.fromHtml, wyglądają dokładnie tak, jak treść strony internetowej.

Utwórz plik PDF z pliku HTML

PdfDocument.fromHtml działa nie tylko z ciągami HTML. Metoda ta akceptuje również ścieżkę do lokalnego dokumentu HTML.

W naszym następnym przykładzie będziemy pracować z tą przykładową stroną internetową.

Rysunek 3 Nasza przykładowa strona HTML tak, jak wygląda w Google Chrome. Pobierz tę stronę i podobne z witryny File Samples: https://filesamples.com/samples/code/html/sample2.html

Poniższe linie kodu konwertują cały przykładowy dokument na PDF. Zamiast ciągu HTML, wywołujemy PdfDocument.fromHtml z prawidłową ścieżką do naszego przykładowego pliku:

import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Render a PDF from an HTML File
const pdf = await PdfDocument.fromHtml("./sample2.html");

// Save the PDF document to the same folder as our project.
await pdf.saveAs("html-file-to-pdf-1.pdf");
import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Render a PDF from an HTML File
const pdf = await PdfDocument.fromHtml("./sample2.html");

// Save the PDF document to the same folder as our project.
await pdf.saveAs("html-file-to-pdf-1.pdf");
JAVASCRIPT

W poniżej uwzględniono zawartość powstałego pliku PDF. Zauważ, że IronPDF nie tylko zachowuje wygląd oryginalnego dokumentu HTML, ale także zachowuje funkcjonalność linków, formularzy i innych typowych interaktywnych elementów.

Rysunek 4 PDF wygenerowany z poprzedniego przykładu kodu. Porównaj jego wygląd z poprzednim obrazem i zwróć uwagę na niezwykłe podobieństwo!

Jeśli przyjrzysz się kodowi źródłowemu przykładowej strony, zauważysz, że jest on bardziej złożony. Używa więcej rodzajów elementów HTML (akapitów, nieuporządkowanych list, przełamań wierszy, poziomych linii, hiperłączy, obrazów itd.) oraz zawiera pewną ilość skryptów (używanych do ustawiania ciasteczek).

IronPDF jest w stanie renderować treści sieciowe, które są znacznie bardziej złożone niż te, których dotąd używaliśmy. Aby to zademonstrować, rozważmy następującą stronę:

Rysunek 5 Artykuł napisany o Puppeteer, bibliotece Node popularnej ze względu na jej zdolność do programowego kontrolowania Chrome za pomocą instancji przeglądarki bezgłowej

Zawarta powyżej strona to artykuł napisany o Puppeteer, bibliotece Node. Puppeteer obsługuje sesje przeglądarki bezgłowej, które programiści Node używają do automatyzacji wielu zadań przeglądarki po stronie serwera lub po stronie klienta (jedno z nich obejmuje generowanie HTML na PDF po stronie serwera).

Nowa strona pozyskuje wiele zasobów (pliki CSS, obrazy, pliki skryptów itd.) i wykorzystuje jeszcze bardziej złożony układ. W tym następnym przykładzie zrealizujemy konwersję zapisanej kopii tej strony (wraz z jej zasobami źródłowymi) na doskonały co do piksela PDF.

Poniższy fragment kodu zakłada, że strona jest zapisana w tym samym katalogu co nasz projekt jako "sample4.html":

import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Render a PDF from even more complex HTML code.
PdfDocument.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 even more complex HTML code.
PdfDocument.fromHtml("./sample4.html").then(async (pdf) => {
    return await pdf.saveAs("html-file-to-pdf-2.pdf");
});
JAVASCRIPT

Poniższy obraz pokazuje wyniki powyższego fragmentu kodu.

Rysunek 6 Jeśli dobrze wygląda w Google Chrome, to będzie dobrze wyglądało po konwersji na PDF. Obejmuje to projekty stron bogatych w CSS i JavaScript.

Utwórz plik PDF z adresu URL

IronPDF jest w stanie konwertować ciągi HTML i pliki HTML o dowolnym rozmiarze i złożoności. Nie jesteś ograniczony tylko do używania surowego kodu ze ciągów i plików. IronPDF może również żądać HTML z adresu URL.

Rozważ artykuł z Wikipedii pod adresem https://en.wikipedia.org/wiki/PDF.

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

Użyj tego kodu źródłowego, aby przekonwertować ten artykuł z Wikipedii na PDF:

import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Convert the Web Page to a pixel-perfect PDF file.
const pdf = await PdfDocument.fromUrl("https://en.wikipedia.org/wiki/PDF");

// Save the document.
await pdf.saveAs("url-to-pdf.pdf");
import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Convert the Web Page to a pixel-perfect PDF file.
const pdf = await PdfDocument.fromUrl("https://en.wikipedia.org/wiki/PDF");

// Save the document.
await pdf.saveAs("url-to-pdf.pdf");
JAVASCRIPT

Powyżej używamy PdfDocument.fromUrl, aby przekonwertować stronę internetową na PDF w kilku liniach kodu. IronPDF pobierze dla ciebie kod HTML dla adresu internetowego i renderuje go bezproblemowo. Nie są wymagane pliki HTML ani ciągi tekstowe!

![Rysunek 8](/static-assets/ironpdf-nodejs tutorials/html-to-pdf/html-to-pdf-9.webp) PDF wygenerowany z wywołania PdfDocument.fromUrl artykułu z Wikipedii. Zwróć uwagę na jego podobieństwo do oryginalnej strony internetowej.

Utwórz plik PDF z archiwum Zip

Użyj PdfDocument.fromZip, aby przekonwertować określony plik HTML znajdujący się w skompresowanym pliku (zip) na PDF.

Załóżmy na przykład, że w katalogu projektu znajduje się plik ZIP o następującej strukturze wewnętrznej:

html-zip.zip
├─ index.html
├─ style.css
├─ logo.png

Plik index.html zawiera następujący kod:

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

Plik style.css deklaruje pięć reguł 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;
}

Na koniec, plik logo.png przedstawia logo naszego produktu:

Rysunek 9 Przykładowy obrazek w hipotetycznym pliku HTML w formacie ZIP.

Podczas wywoływania metody fromZip należy określić prawidłową ścieżkę do zip w pierwszym argumencie, wraz z obiektem JSON, który ustawia właściwość mainHtmlFile z nazwą pliku HTML z zip, który chcemy przekonwertować.

W podobny sposób konwertujemy plik index.html znajdujący się w folderze ZIP:

import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Render the HTML from a zip archive
PdfDocument.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

// Render the HTML from a zip archive
PdfDocument.fromZip("./html-zip.zip", {
  mainHtmlFile: "index.html"
}).then(async (pdf) => {
  return await pdf.saveAs("html-zip-to-pdf.pdf");
});
JAVASCRIPT

![Rysunek 10](/static-assets/ironpdf-nodejs tutorials/html-to-pdf html-to-pdf-11.webp) Tworzenie PDF za pomocą funkcji PdfDocument.fromZip. Ta funkcja z powodzeniem renderuje kod HTML zawarty w pliku ZIP wraz z zawartymi w nim zasobami.

Zaawansowane opcje generowania plików PDF z HTML

Interfejs ChromePdfRenderOptions pozwala programistom Node modyfikować zachowanie renderowania HTML przez bibliotekę. Udostępnione tam właściwości umożliwiają szczegółowe dostosowanie wyglądu plików PDF przed ich renderowaniem. Ponadto umożliwiają one obsługę specyficznych, skrajnych przypadków konwersji HTML-PDF.

IronPDF generuje nowe PDF początkowo używając niektórych domyślnych wartości ChromePdfRenderOptions. Możesz sprawdzać te przypisane wartości, samodzielnie wywołując funkcję defaultChromePdfRenderOptions:

import { defaultChromePdfRenderOptions } from "@ironsoftware/ironpdf";

// Retrieve a ChromePdfRenderOptions object with default settings.
var options = defaultChromePdfRenderOptions();
import { defaultChromePdfRenderOptions } from "@ironsoftware/ironpdf";

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

Ta sekcja pobieżnie przejdzie przez najpopularniejsze przypadki użycia renderowania HTML na PDF, które wymagają użycia interfejsu ChromePdfRenderOptions.

Każda podsekcja będzie zaczynać się od wartości domyślnych i modyfikować je w razie potrzeby, aby osiągnąć zamierzony rezultat.

Dostosuj wynik generowania plików PDF

Dodaj niestandardowe nagłówki i stopki

Za pomocą właściwości textHeader i textFooter możesz dołączać niestandardową treść nagłówka i/lub stopki do nowo wygenerowanych PDF.

Poniższy przykład tworzy wersję PDF strony głównej wyszukiwarki Google z niestandardowym nagłówkiem i stopką utworzonymi z treści tekstowej. Używamy linii oddzielających, aby oddzielić tę treść od treści strony. Używamy również różnych czcionek w nagłówku i stopce, aby wyraźniej zaznaczyć różnice.

import { PdfDocument, defaultChromePdfRenderOptions, AffixFonts } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Initialize render options with default settings
var options = defaultChromePdfRenderOptions();

// Build a Custom Text-Based Header
options.textHeader = {
  centerText: "https://www.adobe.com",
  dividerLine: true,
  font: AffixFonts.CourierNew,
  fontSize: 12,
  leftText: "URL to PDF"
};

// Build a custom 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 a PDF from a URL
PdfDocument.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

// Initialize render options with default settings
var options = defaultChromePdfRenderOptions();

// Build a Custom Text-Based Header
options.textHeader = {
  centerText: "https://www.adobe.com",
  dividerLine: true,
  font: AffixFonts.CourierNew,
  fontSize: 12,
  leftText: "URL to PDF"
};

// Build a custom 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 a PDF from a URL
PdfDocument.fromUrl("https://www.google.com/", { renderOptions: options }).then(async (pdf) => {
  return await pdf.saveAs("add-custom-headers-footers-1.pdf");
});
JAVASCRIPT

Kod źródłowy generuje ten plik PDF:

![Rysunek 11](/static-assets/ironpdf-nodejs tutorials/html-to-pdf html-to-pdf-12.webp) Utworzono nową stronę w formacie PDF, wygenerowaną na podstawie strony głównej Google. Należy zwrócić uwagę na dodanie dodatkowych nagłówków i stopek.

Aby uzyskać jeszcze większą kontrolę nad układem, pozycjonowaniem i treścią zawartą w nagłówku i stopce, można je również zdefiniować przy użyciu surowego kodu HTML zamiast tekstu.

W poniższym bloku kodu używamy HTML, aby umieścić bogatszą treść w nagłówku i stopce. W nagłówku pogrubiamy adres URL strony i wyśrodkowujemy go; W stopce umieszczamy i wyśrodkowujemy logo.

import { PdfDocument, defaultChromePdfRenderOptions } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Initialize render options with default settings
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
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
};

// Render a PDF from a URL
await PdfDocument.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

// Initialize render options with default settings
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
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
};

// Render a PDF from a URL
await PdfDocument.fromUrl("https://www.google.com/", { renderOptions: options }).then(async (pdf) => {
  return await pdf.saveAs("add-html-headers-footers.pdf");
});
JAVASCRIPT

Poniższy obrazek przedstawia wynik tych zmian.

![Rysunek 12](/static-assets/ironpdf-nodejs tutorials/html-to-pdf html-to-pdf-13.webp) IronPDF for Node.js umożliwia dostosowywanie stron HTML podczas konwersji do formatu PDF.

Ustaw marginesy, rozmiary stron, orientację stron i kolory

IronPDF obsługuje dodatkowe ustawienia umożliwiające definiowanie niestandardowych marginesów, rozmiarów i orientacji stron dla nowo przekonwertowanych plików PDF.

import { PdfDocument, defaultChromePdfRenderOptions, PaperSize, FitToPaperModes, PdfPaperOrientation } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Initialize render options with default settings
var options = defaultChromePdfRenderOptions();

// Set top, left, right, and bottom page margins in millimeters. 
options.margin = {
  top: 50,
  bottom: 50,
  left: 60,
  right: 60
};
options.paperSize = PaperSize.A5;
options.fitToPaperMode = FitToPaperModes.FitToPage;
options.paperOrientation = PdfPaperOrientation.Landscape;
options.grayScale = true;

// Create a PDF from the Google.com Home Page
PdfDocument.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

// Initialize render options with default settings
var options = defaultChromePdfRenderOptions();

// Set top, left, right, and bottom page margins in millimeters. 
options.margin = {
  top: 50,
  bottom: 50,
  left: 60,
  right: 60
};
options.paperSize = PaperSize.A5;
options.fitToPaperMode = FitToPaperModes.FitToPage;
options.paperOrientation = PdfPaperOrientation.Landscape;
options.grayScale = true;

// Create a PDF from the Google.com Home Page
PdfDocument.fromUrl("https://www.google.com/", { renderOptions: options }).then(async (pdf) => {
  return await pdf.saveAs("set-margins-and-page-size.pdf");
});
JAVASCRIPT

W powyższym fragmencie kodu konfigurujemy IronPDF tak, aby wygenerował plik PDF strony głównej Google w skali szarości, w orientacji poziomej i z marginesem o szerokości co najmniej 50 milimetrów. Dostosowaliśmy również układ tekstu do formatu papieru A5.

Generowanie plików PDF z dynamicznych stron internetowych

W przypadku stron internetowych zawierających treści, które nie są od razu dostępne i renderowane po załadowaniu strony, może być konieczne wstrzymanie renderowania treści tej strony do momentu spełnienia określonych warunków.

Na przykład programista może chcieć wygenerować plik PDF zawierający treść, która pojawia się dopiero 15 sekund po załadowaniu strony. W innym przypadku ta sama treść może pojawić się dopiero po wykonaniu złożonego kodu po stronie klienta.

Aby obsłużyć oba te przypadki brzegowe (i wiele innych), wydanie Node IronPDF definiuje mechanizm WaitFor. Programiści mogą uwzględnić tę właściwość w swoich ustawieniach ChromePdfRenderOptions, aby przekazać silnikowi renderowania Chrome IronPDF instrukcję dotycząca konwersji zawartości strony, gdy wystąpią określone zdarzenia.

Poniższy fragment kodu ustawia IronPDF tak, aby odczekał 20 sekund przed przechwyceniem zawartości naszej strony głównej jako pliku PDF:

import { PdfDocument, defaultChromePdfRenderOptions, WaitForType } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Configure the Chrome Renderer to wait until 20 seconds has passed
// before rendering the web page as a PDF.
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");
});
import { PdfDocument, defaultChromePdfRenderOptions, WaitForType } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Configure the Chrome Renderer to wait until 20 seconds has passed
// before rendering the web page as a PDF.
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

Poniższy fragment kodu konfiguruje IronPDF tak, aby czekał, aż element w popularnym edytorze tekstu SEO zostanie pomyślnie zaznaczony.

import { PdfDocument, defaultChromePdfRenderOptions, WaitForType } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Configure the Chrome Renderer to wait up to 20 seconds for a specific element to appear
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 Chrome Renderer to wait up to 20 seconds for a specific element to appear
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

Generowanie plików PDF z szablonu HTML

W ostatniej części tego samouczka wykorzystamy całą wiedzę przedstawioną w poprzednich sekcjach, aby zrealizować bardzo praktyczną automatyzację: wygenerowanie jednego lub więcej plików PDF przy użyciu szablonu HTML.

Szablon, którego będziemy używać w tej sekcji, przedstawiono poniżej. Został on zaadaptowany z tego publicznie dostępnego szablonu faktury w celu uwzględnienia tagów zastępczych (np. {COMPANY-NAME}, {FULL-NAME}, {INVOICE-NUMBER} itp.) dla treści, które można zastąpić.

Rysunek 13 Przykładowy szablon faktury. Napiszemy dodatkowy kod JavaScript, który doda dynamiczne dane do tego szablonu, zanim wygenerujemy go do plików PDF.

W następnym bloku kodu źródłowego załadujemy szablon HTML do nowego obiektu PdfDocument, zastąpimy zdefiniowane wcześniej miejsca na dane przykładowymi danymi testowymi i następnie zapiszemy obiekt PdfDocument do systemu plików.

import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

/**
 * Loads an HTML template from the file system.
 */
async function getTemplateHtml(fileLocation) {
  // Return promise for loading template file
  return PdfDocument.fromFile(fileLocation);
}

/**
 * Save the PDF document at a given location.
 */
async function generatePdf(pdf, location) {
  return pdf.saveAs(location);
}

/**
 * Use the PdfDocument.replaceText method to replace 
 * a specified placeholder with a provided value.
 */
async function addTemplateData(pdf, key, value) {
  return pdf.replaceText(key, value);
}

// Path to the template file
const template = "./sample-invoice.html";

// Load the template, replace placeholders, and save the PDF
getTemplateHtml(template).then(async (doc) => {
    // Replace placeholders with real data
    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"));
import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

/**
 * Loads an HTML template from the file system.
 */
async function getTemplateHtml(fileLocation) {
  // Return promise for loading template file
  return PdfDocument.fromFile(fileLocation);
}

/**
 * Save the PDF document at a given location.
 */
async function generatePdf(pdf, location) {
  return pdf.saveAs(location);
}

/**
 * Use the PdfDocument.replaceText method to replace 
 * a specified placeholder with a provided value.
 */
async function addTemplateData(pdf, key, value) {
  return pdf.replaceText(key, value);
}

// Path to the template file
const template = "./sample-invoice.html";

// Load the template, replace placeholders, and save the PDF
getTemplateHtml(template).then(async (doc) => {
    // Replace placeholders with real data
    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 źródłowy definiuje trzy asynchroniczne funkcje pomocnicze:

  • getTemplateHtml: używa metody PdfDocument.fromHtml, aby wczytać szablon HTML do nowego obiektu PdfDocument.
  • addTemplateData: używa metody PdfDocument.replaceText, aby zastąpić podany placeholder (nazywany kluczem) za pomocą korespondującej wartości danych.
  • generatePdf: zapisuje obiekt PdfDocument w określonej lokalizacji pliku.

Ponadto, deklarujemy zmienną const template, aby przechować lokalizację naszego pliku szablonu HTML. PDF wygenerowany z powyższego kodu źródłowego jest pokazany poniżej.

![Rysunek 14](/static-assets/ironpdf-nodejs tutorials/html-to-pdf html-to-pdf-15.webp) Nowy dokument PDF utworzony poprzez zastąpienie symboli zastępczych zdefiniowanych w szablonie HTML rzeczywistymi danymi. Niniejszy dokument zachowuje style CSS i układ, jakich moglibyśmy się spodziewać, gdyby takie zamiany nigdy nie miały miejsca.

Więcej informacji

Ten samouczek to tylko wierzchołek góry lodowej możliwości zaawansowanych funkcji API IronPDF. Warto zapoznać się z poniższymi powiązanymi tematami, aby pogłębić swoją wiedzę i zrozumienie.

  1. Klasa PdfGenerator: jest to dedykowana klasa narzędziowa do tworzenia obiektów PdfDocument z HTML, adresów URL, archiwów Zip i innych źródeł mediów. Ta klasa oferuje realną alternatywę dla korzystania z funkcji renderowania PDF zdefiniowanych w klasie PdfDocument.
  2. HttpLoginCredentials: jeśli kiedykolwiek będziesz musiał generować PDF z stron internetowych wymagających określonych ciasteczek lub zabezpieczeń hasłem, ten odniesienie okaże się niezwykle przydatne.

Często Zadawane Pytania

How can I convert HTML to PDF in Node.js without losing formatting?

In Node.js, you can use IronPDF to convert HTML to PDF without losing formatting by employing methods like PdfDocument.fromHtml, which supports precise rendering of HTML strings and files into PDF format.

What steps are involved in installing IronPDF for Node.js?

To install IronPDF in a Node.js project, run the command npm install @ironsoftware/ironpdf. This will add the IronPDF package to your project's dependencies, allowing you to use its PDF processing capabilities.

How can I generate a PDF from a web URL in Node.js?

You can use the PdfDocument.fromUrl method in IronPDF to convert a web page directly to a PDF by providing the page's URL. This method fetches the content and renders it into a PDF format.

What are the options for customizing PDF output in IronPDF?

IronPDF provides the ChromePdfRenderOptions interface, which allows customization of PDF output. You can adjust settings such as page size, orientation, margins, and include dynamic content through this interface.

How can I add headers and footers to my PDF documents using IronPDF?

To add headers and footers to PDFs in IronPDF, utilize the textHeader and textFooter properties available in the ChromePdfRenderOptions. This allows for the inclusion of custom text at the top and bottom of each page.

Is it possible to convert HTML files in a zip archive to PDFs using Node.js?

Yes, IronPDF supports converting HTML files within a zip archive to PDFs using the PdfDocument.fromZip method, enabling batch processing of multiple HTML files.

How can I remove watermarks from PDFs generated with IronPDF?

To remove watermarks from PDFs created with IronPDF, you must apply a valid license key within your application. This can be done using the IronPdf.License.LicenseKey method.

How do I handle asynchronous web content when converting to PDF?

IronPDF provides the WaitFor mechanism to manage asynchronous content, ensuring that all dynamic elements are fully loaded before the PDF rendering process begins.

Can IronPDF convert password-protected web pages to PDFs?

Yes, using the HttpLoginCredentials within the ChromePdfRenderOptions, you can input the necessary credentials to access and convert password-protected web pages into PDFs.

What should I do if my HTML to PDF conversion doesn't maintain the correct layout?

Ensure that you are using the appropriate ChromePdfRenderOptions to match the layout requirements. Adjusting settings like page size, orientation, and margins can help maintain the desired layout in the converted PDF.

Does IronPDF fully support HTML to PDF conversion in .NET 10?

Yes — IronPDF supports .NET 10 for HTML to PDF conversion using classes like ChromePdfRenderer, including the methods RenderHtmlAsPdf, RenderHtmlFileAsPdf, and RenderUrlAsPdf, with support for CSS3, JavaScript, images, and external assets. This is explicitly confirmed in IronPDF’s documentation on .NET PDF Library features.

Darrius Serrant
Full Stack Software Engineer (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.4 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.