Converter HTML para PDF em Node.js

HTML para PDF com Node.js

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

A capacidade de criar PDFs de alta fidelidade a partir de HTML, CSS e JavaScript puros é o recurso mais poderoso e popular do IronPDF. Este tutorial é um guia completo para ajudar desenvolvedores Node a utilizar o IronPDF para incorporar a geração de PDFs a partir de HTML em seus próprios projetos.

IronPDF é uma biblioteca de API de alto nível que ajuda os desenvolvedores a implementar recursos de processamento de PDF robustos e poderosos em aplicativos de software de forma rápida e fácil. O IronPDF está disponível em várias linguagens de programação . Para obter informações detalhadas sobre como criar PDFs em .NET , Java e Python , consulte as páginas de documentação oficiais. Este tutorial aborda sua utilização em projetos Node.js



Começando

Comece a usar IronPDF no seu projeto hoje mesmo com um teste gratuito.

Primeiro passo:
green arrow pointer

Instale a biblioteca IronPDF for Node.js

Instale o pacote IronPDF for Node.js executando o comando NPM abaixo no seu projeto Node de preferência:

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

Você também pode baixar e instalar o pacote IronPDF manualmente .

Instalar o mecanismo IronPDF manualmente (opcional)

Atualmente, o IronPDF for Node.js requer um binário do IronPDF Engine para funcionar corretamente.

Instale o binário do IronPDF Engine instalando o pacote apropriado para o seu sistema operacional:

ObserveA instalação do IronPDF Engine é opcional, pois @ironpdf baixará e instalará automaticamente o binário apropriado para seu navegador e sistema operacional do NPM em sua primeira execução. No entanto, instalar esse binário explicitamente será vital em situações onde o acesso à internet é limitado, reduzido ou indesejado.

Aplicar uma chave de licença (opcional)

Por padrão, o IronPDF adiciona uma marca d'água com título como fundo a todos os documentos que gera ou modifica.

Figura 1 Obtenha uma chave de licença em IronPDF para gerar documentos PDF sem marcas d'água.

Para usar o IronPDF sem a marca d'água adicional, você deve definir a propriedade licenseKey no objeto global IronPdfGlobalConfig com uma chave de licença válida. O código-fonte para realizar isso está abaixo:

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

Adquira uma chave de licença em nossa página de licenciamento ou entre em contato conosco para obter uma chave de licença de avaliação gratuita .

ObserveA chave de licença e outras configurações globais devem ser definidas antes de usar outras funções da biblioteca para garantir o melhor desempenho e o funcionamento adequado.

As seções seguintes deste tutorial pressupõem que você já possui uma chave de licença e que a configurou em um arquivo JavaScript separado chamado config.js. Importamos este script sempre que utilizarmos alguma funcionalidade do 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

Converter HTML para PDF

A versão Node.js da biblioteca IronPDF oferece três abordagens para criar arquivos PDF a partir de conteúdo HTML:

  1. A partir de uma sequência de código HTML
  2. A partir de um arquivo HTML local
  3. De um site online

Esta seção explicará detalhadamente os três métodos.

Criar um arquivo PDF a partir de uma string HTML

PdfDocument.fromHtml é um método que permite gerar PDFs a partir de sequências de código HTML bruto de páginas da web.

Este método oferece a maior flexibilidade entre as três abordagens. Isso ocorre porque os dados na string HTML podem ser provenientes de praticamente qualquer lugar: arquivos de texto, fluxos de dados, um modelo HTML, dados HTML gerados, etc.

O exemplo de código abaixo demonstra como usar o método PdfDocument.fromHtml na prática:

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

Conforme mostrado acima, chamamos o método PdfDocument.fromHtml com uma string de texto contendo o código de marcação para um elemento de título de nível um.

PdfDocument.fromHtml retorna uma Promise que resolve para uma instância da classe PdfDocument . Um PdfDocument representa um arquivo PDF que a biblioteca produziu a partir de algum conteúdo de origem. Essa classe constitui a base da maioria das funcionalidades principais do IronPDF, impulsionando casos de uso significativos na criação e edição de PDFs.

Finalmente, usamos o método saveAs no PdfDocument para salvar o arquivo no disco. O arquivo PDF salvo é mostrado abaixo.

Figura 2 The PDF generated from the HTML string "<h1>Hello from IronPDF!</h1>". Os arquivos PDF gerados por PdfDocument.fromHtml aparecem exatamente como o conteúdo de uma página da web.

Criar um arquivo PDF a partir de um arquivo HTML

PdfDocument.fromHtml não funciona apenas com strings HTML. O método também aceita um caminho para um documento HTML local.

Em nosso próximo exemplo, trabalharemos com esta página web de exemplo .

Figura 3 Nossa página HTML de exemplo, tal como aparece no Google Chrome. Faça o download desta página e de outras semelhantes no site File Samples:https://filesamples.com/samples/code/html/sample2.html

As linhas de código a seguir convertem todo o documento de exemplo em um PDF. Em vez de uma string HTML, chamamos PdfDocument.fromHtml com um caminho de arquivo válido para nosso arquivo de exemplo:

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

O conteúdo do PDF resultante está incluído abaixo. Note que o IronPDF não apenas preserva a aparência do documento HTML original, mas também mantém a funcionalidade de links, formulários e outros elementos interativos comuns.

Figura 4 Este PDF foi gerado a partir do exemplo de código anterior. Compare sua aparência com a imagem anterior e observe a notável semelhança!

Se você examinou o código-fonte da página de exemplo, perceberá que ele é mais complexo. Ele utiliza mais tipos de elementos HTML (parágrafos, listas não ordenadas, quebras de linha, linhas horizontais, hiperlinks, imagens, etc.) e também inclui alguma quantidade de scripts (usados ​​para definir cookies).

O IronPDF é capaz de renderizar conteúdo da web muito mais complexo do que o que temos usado até agora. Para demonstrar isso, vejamos a seguinte página:

Figura 5 Um artigo escrito sobre o Puppeteer, uma biblioteca Node popularizada por sua capacidade de controlar o Chrome programaticamente usando uma instância de navegador sem interface gráfica.

A página mostrada acima é de um artigo escrito sobre a biblioteca Puppeteer Node. O Puppeteer executa sessões de navegador sem interface gráfica que os desenvolvedores Node utilizam para automatizar diversas tarefas do navegador no lado do servidor ou no lado do cliente (uma das quais inclui a geração de PDFs em HTML no lado do servidor).

A nova página utiliza diversos recursos (arquivos CSS, imagens, arquivos de script, etc.) e um layout ainda mais complexo. Neste próximo exemplo, converteremos uma cópia salva desta página (juntamente com seus arquivos de origem) em um PDF com qualidade de imagem perfeita.

O trecho de código abaixo pressupõe que a página esteja salva no mesmo diretório do nosso projeto com o nome "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

A imagem a seguir mostra os resultados do trecho de código acima.

Figura 6 Se o conteúdo ficar bom no Google Chrome, também ficará bom quando convertido para PDF. Isso inclui designs de página que utilizam muito CSS e JavaScript.

Criar um arquivo PDF a partir de um URL

O IronPDF consegue converter strings HTML e arquivos HTML de qualquer tamanho e complexidade. Você não está limitado a usar apenas a marcação bruta de strings e arquivos, no entanto. O IronPDF também pode solicitar HTML a partir de uma URL.

Considere o artigo da Wikipédia localizado em https://en.wikipedia.org/wiki/PDF .

Figura 7 O artigo da Wikipédia sobre o formato PDF, tal como aparece num navegador web compatível com as normas.

Use este código-fonte para converter este artigo da Wikipédia em um 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

Acima, usamos PdfDocument.fromUrl para converter a página da web em um PDF com poucas linhas de código. O IronPDF irá obter o código HTML do endereço web para você e renderizá-lo perfeitamente. Não são necessários arquivos HTML nem sequências de texto!

![Figura 8](/static-assets/ironpdf-nodejs tutorials/html-to-pdf/html-to-pdf-9.webp) O PDF gerado pela chamada PdfDocument.fromUrl em um artigo da Wikipédia. Observe as semelhanças com a página web original.

Criar um arquivo PDF a partir de um arquivo ZIP

Use PdfDocument.fromZip para converter um arquivo HTML específico localizado em um arquivo compactado (zip) em um PDF.

Por exemplo, vamos supor que temos um arquivo Zip no diretório do projeto com a seguinte estrutura interna:

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

O arquivo index.html contém o código:

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

O arquivo style.css declara cinco regras 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;
}

Por fim, o arquivo logo.png apresenta o logotipo do nosso produto:

Figura 9 A imagem de exemplo dentro de um hipotético arquivo zip HTML.

Ao chamar o método fromZip, especifique um caminho válido para o arquivo zip no primeiro argumento, juntamente com um objeto JSON que define a propriedade mainHtmlFile com o nome do arquivo HTML do arquivo zip que queremos converter.

Convertemos o arquivo index.html dentro da pasta zip da seguinte maneira:

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

![Figura 10](/static-assets/ironpdf-nodejs tutorials/html-to-pdf html-to-pdf-11.webp) Criação de PDF usando a função PdfDocument.fromZip. Esta função renderiza com sucesso o código HTML contido no arquivo ZIP, incluindo seus recursos.

Opções avançadas de geração de HTML para PDF

A interface ChromePdfRenderOptions permite que os desenvolvedores do Node modifiquem o comportamento de renderização HTML da biblioteca. As propriedades ali expostas permitem a personalização detalhada da aparência dos PDFs antes da renderização. Além disso, possibilitam lidar com casos extremos específicos de conversão de HTML para PDF.

O IronPDF renderiza novos PDFs inicialmente usando alguns valores padrão ChromePdfRenderOptions. Você pode consultar esses valores predefinidos chamando a função 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

Esta seção abordará rapidamente os casos de uso mais populares de renderização de HTML para PDF que exigem o uso da interface ChromePdfRenderOptions.

Cada subseção começará com os valores predefinidos e os modificará conforme necessário para atingir o resultado desejado.

Personalize a saída da geração de PDFs

Adicionar cabeçalhos e rodapés personalizados

Com as propriedades textHeader e textFooter, você pode adicionar conteúdo personalizado de cabeçalho e/ou rodapé a PDFs recém-renderizados.

O exemplo abaixo cria uma versão em PDF da página inicial de pesquisa do Google com um cabeçalho e rodapé personalizados, compostos por conteúdo de texto. Usamos linhas divisórias para separar este conteúdo do corpo da página. Também utilizamos fontes distintas no cabeçalho e no rodapé para tornar as distinções mais claras.

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

O código-fonte gera este PDF:

![Figura 11](/static-assets/ironpdf-nodejs tutorials/html-to-pdf html-to-pdf-12.webp) Uma nova página foi criada em formato PDF, gerada a partir da página inicial do Google. Observe a inclusão de cabeçalhos e rodapés adicionais.

Para ter ainda mais controle sobre o layout, o posicionamento e o conteúdo do cabeçalho e do rodapé, você também pode defini-los usando HTML puro em vez de texto.

No bloco de código seguinte, usamos HTML para incorporar conteúdo mais rico no cabeçalho e no rodapé. No cabeçalho, destacamos o URL da página em negrito e centralizado; No rodapé, incorporamos e centralizamos um logotipo.

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

A imagem abaixo mostra o resultado dessas alterações.

![Figura 12](/static-assets/ironpdf-nodejs tutorials/html-to-pdf html-to-pdf-13.webp) O IronPDF for Node.js pode aplicar personalizações às suas páginas HTML durante a conversão para PDF.

Defina margens, tamanhos de página, orientação da página e cores.

O IronPDF oferece suporte a configurações adicionais para definir margens de página, tamanhos de página e orientações de página personalizadas para PDFs recém-convertidos.

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

No bloco de código acima, configuramos o IronPDF para gerar o PDF da nossa página inicial do Google em tons de cinza, usando a orientação paisagem e com pelo menos 50 milímetros de margem. Também o ajustamos para que o conteúdo se adequasse ao tamanho de papel A5.

Gere PDFs a partir de páginas web dinâmicas

Para páginas da web que contêm conteúdo que não está imediatamente disponível e renderizado no carregamento da página, pode ser necessário pausar a renderização do conteúdo dessa página até que certas condições sejam satisfeitas.

Por exemplo, o desenvolvedor pode querer gerar um PDF contendo conteúdo que só aparece 15 segundos após o carregamento da página. Em outro caso, esse mesmo conteúdo pode aparecer somente após a execução de um código complexo do lado do cliente.

Para lidar com esses dois casos extremos (e muitos outros), a versão Node do IronPDF define o mecanismo WaitFor. Os desenvolvedores podem incluir essa propriedade em suas configurações ChromePdfRenderOptions para instruir o mecanismo de renderização do Chrome do IronPDF a converter o conteúdo de uma página quando determinados eventos ocorrerem.

O bloco de código a seguir configura o IronPDF para aguardar 20 segundos antes de capturar o conteúdo da nossa página inicial como um 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

O próximo bloco de código configura o IronPDF para aguardar até que um elemento em um editor de texto SEO popular possa ser selecionado com sucesso.

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

Gere PDFs a partir de um modelo HTML

Na seção final deste tutorial, aplicaremos todo o conhecimento apresentado nas seções anteriores para realizar uma automação muito prática: gerar um ou mais PDFs usando um modelo HTML.

O modelo que utilizaremos nesta seção é mostrado abaixo. Foi adaptado deste modelo de fatura de acesso público para incluir marcadores (ex.: {COMPANY-NAME}, {FULL-NAME}, {INVOICE-NUMBER}, etc.) para conteúdo substituível.

Figura 13 Um modelo de fatura. Vamos escrever um código JavaScript adicional que adicionará dados dinâmicos a este modelo antes de gerarmos os PDFs.

No próximo bloco de código-fonte, carregaremos o modelo HTML em um novo objeto PdfDocument, substituiremos os espaços reservados que definimos por alguns dados de teste fictícios e, em seguida, salvaremos o objeto PdfDocument no sistema de arquivos.

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

A fonte acima define três funções auxiliares assíncronas:

  • getTemplateHtml: usa o método PdfDocument.fromHtml para carregar um modelo HTML em um novo objeto PdfDocument.
  • addTemplateData: usa o método PdfDocument.replaceText para substituir um marcador fornecido (chamado de chave) pelo seu valor de dados de substituição.
  • generatePdf: salva um PdfDocument em um local de arquivo fornecido.

Além disso, declaramos uma variável const template para armazenar o local do nosso arquivo de modelo HTML. O PDF gerado a partir do código-fonte acima é mostrado abaixo.

![Figura 14](/static-assets/ironpdf-nodejs tutorials/html-to-pdf html-to-pdf-15.webp) O novo documento PDF foi criado substituindo os marcadores definidos em um modelo HTML por dados reais. Este documento mantém os estilos CSS e o layout que esperaríamos se nenhuma substituição desse tipo tivesse ocorrido.

Leitura complementar

Este tutorial apenas arranhou a superfície do que é possível fazer com as funções da API de alto nível do IronPDF. Considere estudar estes tópicos relacionados para aprofundar seu conhecimento e compreensão.

  1. A classe PdfGenerator: esta é uma classe utilitária dedicada para criar objetos PdfDocument a partir de HTML, URLs, arquivos Zip e outras mídias de origem. Esta classe oferece uma alternativa viável ao uso das funções de renderização de PDF definidas na classe PdfDocument.
  2. HttpLoginCredentials: se você precisar gerar PDFs a partir de páginas da web que exigem cookies específicos ou que são protegidas por senha, esta referência será extremamente útil.

Perguntas frequentes

Como posso converter HTML para PDF em Node.js sem perder a formatação?

Em Node.js, você pode usar o IronPDF para converter HTML em PDF sem perder a formatação, empregando métodos como PdfDocument.fromHtml , que oferece suporte à renderização precisa de strings e arquivos HTML em formato PDF.

Quais são os passos envolvidos na instalação do IronPDF for Node.js?

Para instalar o IronPDF em um projeto Node.js, execute o comando npm install @ironsoftware/ironpdf . Isso adicionará o pacote IronPDF às dependências do seu projeto, permitindo que você utilize seus recursos de processamento de PDF.

Como posso gerar um PDF a partir de uma URL da web em Node.js?

Você pode usar o método PdfDocument.fromUrl no IronPDF para converter uma página da web diretamente em um PDF, fornecendo a URL da página. Esse método busca o conteúdo e o renderiza em formato PDF.

Quais são as opções para personalizar a saída em PDF no IronPDF?

O IronPDF oferece a interface ChromePdfRenderOptions , que permite a personalização da saída em PDF. Através dessa interface, você pode ajustar configurações como tamanho da página, orientação, margens e incluir conteúdo dinâmico.

Como posso adicionar cabeçalhos e rodapés aos meus documentos PDF usando o IronPDF?

Para adicionar cabeçalhos e rodapés a PDFs no IronPDF, utilize as propriedades textHeader e textFooter disponíveis em ` ChromePdfRenderOptions . Isso permite a inclusão de texto personalizado na parte superior e inferior de cada página.

É possível converter arquivos HTML compactados em arquivos ZIP para PDF usando Node.js?

Sim, o IronPDF suporta a conversão de arquivos HTML dentro de um arquivo zip para PDFs usando o método PdfDocument.fromZip , permitindo o processamento em lote de vários arquivos HTML.

Como posso remover marcas d'água de PDFs gerados com o IronPDF?

Para remover marcas d'água de PDFs criados com o IronPDF, você precisa inserir uma chave de licença válida no seu aplicativo. Isso pode ser feito usando o método IronPdf.License.LicenseKey .

Como lidar com conteúdo web assíncrono ao converter para PDF?

O IronPDF oferece o mecanismo WaitFor para gerenciar conteúdo assíncrono, garantindo que todos os elementos dinâmicos sejam totalmente carregados antes do início do processo de renderização do PDF.

O IronPDF consegue converter páginas web protegidas por senha em PDFs?

Sim, usando o HttpLoginCredentials dentro do ChromePdfRenderOptions , você pode inserir as credenciais necessárias para acessar e converter páginas da web protegidas por senha em PDFs.

O que devo fazer se a minha conversão de HTML para PDF não mantiver o layout correto?

Certifique-se de estar usando as ChromePdfRenderOptions apropriadas para atender aos requisitos de layout. Ajustar configurações como tamanho da página, orientação e margens pode ajudar a manter o layout desejado no PDF convertido.

O IronPDF oferece suporte completo à conversão de HTML para PDF no .NET 10?

Sim — o IronPDF oferece suporte ao .NET 10 para conversão de HTML para PDF usando classes como ChromePdfRenderer , incluindo os métodos RenderHtmlAsPdf , RenderHtmlFileAsPdf e RenderUrlAsPdf , com suporte para CSS3, JavaScript, imagens e recursos externos. Isso é explicitamente confirmado na documentação do IronPDF sobre os recursos da biblioteca PDF do .NET.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais
Pronto para começar?
Versão: 2026.4 acaba de ser lançado
Still Scrolling Icon

Ainda está rolando a tela?

Quer provas rápidas?
executar um exemplo Veja seu HTML se transformar em um PDF.