Como converter HTML para PDF usando o IronPDF for Java

HTML para PDF em Java

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

IronPDF for Java converte conteúdo HTML em documentos PDF executando um mecanismo de renderização completo do Chromium — o mesmo mecanismo que alimenta navegadores modernos. Cada propriedade CSS, fonte, imagem e layout gerado por JavaScript é renderizado exatamente como seria em uma janela de navegador, depois é transferido para a página como um PDF fiel ao pixel.

Este tutorial aborda os três principais métodos de conversão: string HTML para PDF, URL ao vivo para PDF e arquivo HTML local para PDF. Ele também cobre instalação, configuração de licença e as opções de renderização que os desenvolvedores mais utilizam.

A biblioteca Java espelha a forma da API do IronPDF for .NET, portanto, equipes que trabalham em ambos os tempos de execução acharão a transição fácil. O código-fonte para todos os exemplos deste tutorial está disponível no GitHub.

Início rápido: Converta HTML para PDF em Java

Adicione o IronPDF ao seu Maven pom.xml, e então chame um único método para gerar um PDF:

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/quickstart.java
import com.ironsoftware.ironpdf.*;

// Set your license key before any rendering calls
License.setLicenseKey("YOUR-LICENSE-KEY");

// Convert an HTML string to a PDF and save it
PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>Hello from IronPDF for Java!</h1>");
pdf.saveAs("output.pdf");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/quickstart.java
import com.ironsoftware.ironpdf.*;

// Set your license key before any rendering calls
License.setLicenseKey("YOUR-LICENSE-KEY");

// Convert an HTML string to a PDF and save it
PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>Hello from IronPDF for Java!</h1>");
pdf.saveAs("output.pdf");
JAVA

!{--010011000100100101000010010100100100000101010010010110010101111101010011010101000100000101010010010101000101111101010001010010010010010010100000101001100010111110100001001001100010011110100001101001011--}

Índice


Instalando o IronPDF for Java

IronPDF for Java é distribuído através do Maven Central e como um JAR autônomo. A rota do Maven é recomendada para a maioria dos projetos porque lida com dependências transitivas e mantém versões de biblioteca consistentes entre máquinas de desenvolvedores e pipelines de CI.

Opção 1: Adicionar IronPDF como Dependência do Maven

Abra o arquivo pom.xml do projeto e adicione as seguintes entradas ao bloco <dependencies>:

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/maven-dependency.xml
<dependencies>

    <dependency>
        <groupId>com.ironsoftware</groupId>
        <artifactId>ironpdf</artifactId>
        <version>[LATEST_VERSION]</version>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>[LATEST_VERSION]</version>
    </dependency>
</dependencies>
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/maven-dependency.xml
<dependencies>

    <dependency>
        <groupId>com.ironsoftware</groupId>
        <artifactId>ironpdf</artifactId>
        <version>[LATEST_VERSION]</version>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>[LATEST_VERSION]</version>
    </dependency>
</dependencies>
XML

O primeiro artefato traz a última versão do IronPDF for Java. O segundo artefato ativa o log SLF4J para que o mecanismo de renderização do IronPDF possa gravar mensagens de diagnóstico durante a execução. Desenvolvedores que preferem Logback ou Log4J podem substituir por esse provedor. A dependência de logging é opcional — omitir se logs não são necessários.

Após salvar o arquivo, execute mvn install a partir do diretório raiz do projeto para baixar ambas as bibliotecas. O Maven resolve automaticamente o gráfico de dependência completo, incluindo quaisquer dependências transitivas que o IronPDF requer.

Para projetos Gradle, a declaração de dependência equivalente em build.gradle é:

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/gradle-dependency.java
// build.gradle (Groovy DSL)
// dependencies {
//     implementation 'com.ironsoftware:ironpdf:[LATEST_VERSION]'
//     implementation 'org.slf4j:slf4j-simple:[LATEST_VERSION]'
// }
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/gradle-dependency.java
// build.gradle (Groovy DSL)
// dependencies {
//     implementation 'com.ironsoftware:ironpdf:[LATEST_VERSION]'
//     implementation 'org.slf4j:slf4j-simple:[LATEST_VERSION]'
// }
JAVA

Substitua [LATEST_VERSION] pelo número da versão do changelog do IronPDF ou da página do artefato no Maven Central.

Opção 2: Adicionar o Arquivo JAR Manualmente

Baixe o JAR do IronPDF diretamente do Maven Central e adicione-o ao classpath do projeto. Essa abordagem funciona sem um ferramenta de build, mas requer gestão manual de versão, sendo mais adequada para projetos legados que não usam Maven ou Gradle, ou para ambientes onde o acesso à rede externa é restrito.

Após o download, adicione o JAR ao classpath do projeto através das configurações do projeto do IDE. No IntelliJ IDEA, clique com o botão direito no projeto raiz, selecione "Open Module Settings", navegue até "Dependencies" e adicione o arquivo JAR. No Eclipse, clique com o botão direito no projeto, vá para "Properties > Java Build Path > Libraries" e clique em "Add External JARs".

ObserveO JAR do IronPDF inclui um binário do mecanismo do Chromium integrado. A primeira chamada de renderização em uma nova máquina irá extraí-lo para um diretório temporário, o que pode levar alguns segundos. As chamadas subsequentes usam o binário em cache e iniciam instantaneamente. Em ambientes em contêiner, monte um volume persistente no caminho de extração para evitar nova extração a cada inicialização do contêiner.

Requisitos de Sistema

IronPDF for Java funciona no JDK 8 ou superior. Ele suporta Windows, Linux e macOS em arquiteturas x86-64 e ARM64. Não é necessária instalação de navegador externo — o binário do Chromium está incluso no JAR. No Linux, certifique-se de que as bibliotecas compartilhadas padrão esperadas pelo Chromium estejam presentes. A documentação do IronPDF for Java lista os pacotes mínimos requeridos para distribuições Linux comuns.


Como posso importar o IronPDF e configurar uma chave de licença?

Todas as classes do IronPDF estão localizadas no pacote com.ironsoftware.ironpdf. Importe-o no topo de qualquer arquivo fonte que irá criar ou manipular documentos PDF.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/import-and-license.java
import com.ironsoftware.ironpdf.*;
import java.nio.file.Paths;

// Apply your license key before any other IronPDF calls
License.setLicenseKey("YOUR-LICENSE-KEY");

// Optional: set a custom log file path
Settings.setLogPath(Paths.get("IronPdfEngine.log"));
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/import-and-license.java
import com.ironsoftware.ironpdf.*;
import java.nio.file.Paths;

// Apply your license key before any other IronPDF calls
License.setLicenseKey("YOUR-LICENSE-KEY");

// Optional: set a custom log file path
Settings.setLogPath(Paths.get("IronPdfEngine.log"));
JAVA

Sem uma chave de licença, o IronPDF executa em modo de teste e marca cada página do PDF com uma marca d'água em mosaico. Definir a chave remove a marca d'água e desbloqueia todos os recursos. Inicie um teste gratuito para obter uma chave imediatamente.

 Marca d'água do modo de avaliação do IronPDF aplicada em uma página PDF renderizada

A chave de licença é uma string que a Iron Software emite quando uma licença de teste ou comercial é ativada. Armazene-a em uma variável de ambiente ou em um arquivo de configuração em vez de fixá-la no código-fonte. Um padrão comum é lê-la a partir de uma variável de ambiente no início.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/license-from-env.java
import com.ironsoftware.ironpdf.*;

// Read the license key from an environment variable
String licenseKey = System.getenv("IRONPDF_LICENSE_KEY");
if (licenseKey != null && !licenseKey.isEmpty()) {
    License.setLicenseKey(licenseKey);
}
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/license-from-env.java
import com.ironsoftware.ironpdf.*;

// Read the license key from an environment variable
String licenseKey = System.getenv("IRONPDF_LICENSE_KEY");
if (licenseKey != null && !licenseKey.isEmpty()) {
    License.setLicenseKey(licenseKey);
}
JAVA

Essa abordagem mantém a chave fora do controle de versão e facilita o uso de chaves diferentes em ambientes de desenvolvimento, teste e produção.

ImportanteLicense.setLicenseKey e Settings.setLogPath devem ser chamados antes de qualquer método de renderização ou manipulação. Coloque-os na inicialização do aplicativo — idealmente em um bloco inicializador estático ou em um ponto de entrada main.


Como posso converter uma string HTML para PDF?

PdfDocument.renderHtmlAsPdf aceita uma string de marcação HTML e retorna um objeto PdfDocument que pode ser salvo, mesclado ou modificado antes de ser gravado em disco. Este é o método primário para HTML gerado programaticamente — por exemplo, relatórios construídos pela combinação de valores de banco de dados com um modelo HTML definido como uma string Java ou carregado de um arquivo.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/html-string-to-pdf.java
import com.ironsoftware.ironpdf.*;

// Simple one-liner: convert an HTML string to a PDF
PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>Hello from IronPDF!</h1>");
pdf.saveAs("htmlstring_to_pdf.pdf");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/html-string-to-pdf.java
import com.ironsoftware.ironpdf.*;

// Simple one-liner: convert an HTML string to a PDF
PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>Hello from IronPDF!</h1>");
pdf.saveAs("htmlstring_to_pdf.pdf");
JAVA

O mecanismo de renderização resolve caminhos de ativos relativos (imagens, folhas de estilo, scripts) em relação ao segundo argumento opcional — o caminho base. Quando um caminho base é fornecido, o mecanismo o trata como a raiz a partir da qual URLs relativos são resolvidos. Isso permite que HTML que referencia arquivos CSS e de imagem locais sejam renderizados corretamente sem qualquer manipulação do caminho na marcação fonte.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/html-string-with-assets.java
import com.ironsoftware.ironpdf.*;

// HTML references assets in a local "assets" subfolder
String html = "<html>" +
    "<head><link rel='stylesheet' href='assets/style.css'></head>" +
    "<body><h1>Invoice</h1><img src='assets/logo.png' /></body>" +
    "</html>";

// Pass the base path so IronPDF resolves relative asset URLs
PdfDocument pdf = PdfDocument.renderHtmlAsPdf(html, "C:/my-project/templates");
pdf.saveAs("invoice.pdf");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/html-string-with-assets.java
import com.ironsoftware.ironpdf.*;

// HTML references assets in a local "assets" subfolder
String html = "<html>" +
    "<head><link rel='stylesheet' href='assets/style.css'></head>" +
    "<body><h1>Invoice</h1><img src='assets/logo.png' /></body>" +
    "</html>";

// Pass the base path so IronPDF resolves relative asset URLs
PdfDocument pdf = PdfDocument.renderHtmlAsPdf(html, "C:/my-project/templates");
pdf.saveAs("invoice.pdf");
JAVA

O método saveAs aceita um caminho absoluto ou relativo. A biblioteca cria o arquivo se ele não existir e o sobrescreve se existir. Ao escrever em um diretório que o aplicativo pode ainda não ter criado, crie o diretório primeiro usando Files.createDirectories(Paths.get("output")) antes de chamar saveAs.

O IronPDF suporta todo o conjunto de recursos HTML5 e CSS3 conforme implementado no Chromium. As fontes personalizadas carregadas via @font-face no CSS são renderizadas corretamente quando os arquivos de fonte estão acessíveis no caminho base. Elementos SVG e elementos <canvas> renderizados por JavaScript também aparecem na saída em PDF.

PontasMantenha modelos HTML em um diretório dedicado e passe esse diretório como o caminho base. Esse padrão permite que designers atualizem o modelo sem tocar em qualquer código Java.


Como Converto um URL para PDF em Java?

PdfDocument.renderUrlAsPdf busca a página no URL fornecido, aguarda a execução do JavaScript e o carregamento do conteúdo dinâmico e, em seguida, converte o DOM totalmente renderizado em um PDF.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/url-to-pdf.java
import com.ironsoftware.ironpdf.*;

// Convert a live web page to PDF
PdfDocument pdf = PdfDocument.renderUrlAsPdf("https://en.wikipedia.org/wiki/PDF");
pdf.saveAs("wikipedia_pdf_article.pdf");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/url-to-pdf.java
import com.ironsoftware.ironpdf.*;

// Convert a live web page to PDF
PdfDocument pdf = PdfDocument.renderUrlAsPdf("https://en.wikipedia.org/wiki/PDF");
pdf.saveAs("wikipedia_pdf_article.pdf");
JAVA

O mecanismo lida com cabeçalhos de autenticação, cookies e aplicações de página única pesadas em JavaScript. Para páginas que exigem login ou cabeçalhos de solicitação personalizados, use a classe ChromePdfRenderOptions para configurar os parâmetros de solicitação antes de chamar renderUrlAsPdf.

Este método de conversão é útil para arquivar páginas da web, gerar instantâneos de conformidade e produzir relatórios para clientes a partir de painéis internos. Páginas geradas pelo servidor e acessadas por meio de uma rede local são totalmente compatíveis — passe http://localhost:8080/report/123 da mesma forma que uma URL pública. O IronPDF irá esperar que a página carregue completamente antes de renderizar, então os painéis que dependem de buscas de dados assíncronas renderizam com seus dados populados em vez de gráficos vazios.

Para páginas protegidas por autenticação básica HTTP, passe as credenciais na URL usando o formato http://user:password@host/path. Para páginas protegidas por cookies de sessão, configure o armazenamento de cookies no objeto ChromePdfRenderOptions antes de passá-lo para renderUrlAsPdf. Consulte a documentação do IronPDF for Java para detalhes sobre como configurar cabeçalhos de solicitação e gerenciar cookies para URLs autenticadas.


Como posso converter um arquivo HTML local para PDF?

PdfDocument.renderHtmlFileAsPdf lê um arquivo HTML do sistema de arquivos local e o renderiza em PDF. Todos os ativos vinculados (CSS, JavaScript, imagens) referenciados por caminhos relativos no arquivo são resolvidos em relação ao próprio diretório do arquivo HTML.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/html-file-to-pdf.java
import com.ironsoftware.ironpdf.*;

// Convert a local HTML file — assets resolve relative to its directory
PdfDocument pdf = PdfDocument.renderHtmlFileAsPdf("C:/invoices/TestInvoice1.html");
pdf.saveAs("htmlfile_to_pdf.pdf");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/html-file-to-pdf.java
import com.ironsoftware.ironpdf.*;

// Convert a local HTML file — assets resolve relative to its directory
PdfDocument pdf = PdfDocument.renderHtmlFileAsPdf("C:/invoices/TestInvoice1.html");
pdf.saveAs("htmlfile_to_pdf.pdf");
JAVA

Essa abordagem é a mais precisa para converter documentos HTML complexos. Como o mecanismo de renderização opera no caminho do sistema de arquivos em vez de uma string em memória, referências relativas a diretórios de ativos de múltiplos níveis são resolvidas sem qualquer configuração adicional. Um modelo que depende de um style.css e um script.js na mesma pasta será renderizado corretamente sem qualquer ajuste de caminho.

Esse método é especialmente adequado para geração de faturas, produção de contratos e qualquer fluxo de trabalho onde um designer mantém o modelo HTML independentemente da aplicação Java. A equipe de desenvolvimento trata o modelo como um arquivo de dados, armazena-o junto com o aplicativo e chama renderHtmlFileAsPdf com o caminho. Quando o designer atualiza o modelo para mudar a marca ou o layout, não há necessidade de mudanças no código Java.

ObserveIronPDF suporta todos os recursos modernos de HTML e CSS que o Chromium suporta — Flexbox, CSS Grid, variáveis CSS, fontes web e consultas de mídia são todas renderizadas corretamente na saída PDF.


Como posso definir opções de geração de PDF?

ChromePdfRenderOptions controla o comportamento de renderização: tamanho do papel, margens, nível de Zoom , tipo de mídia de impressão, tempo limite do JavaScript e muito mais. Crie uma instância, configure as propriedades desejadas e passe-a como segundo argumento para qualquer método render*AsPdf.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/render-options.java
import com.ironsoftware.ironpdf.*;
import com.ironsoftware.ironpdf.render.*;

ChromePdfRenderOptions options = new ChromePdfRenderOptions();

// Render the page using the print media type (uses @media print CSS rules)
options.setCssMediaType(CssMediaType.PRINT);

// Wait up to 5 seconds for JavaScript to finish executing
options.setJavaScriptTimeout(5000);

// Apply a 1.5x zoom level to scale content to fit the page
options.setZoom(150);

// Render at 150 DPI for sharper images in print output
options.setDpi(150);

PdfDocument pdf = PdfDocument.renderHtmlAsPdf(
    "<h1>Styled Report</h1>",
    options
);
pdf.saveAs("styled_report.pdf");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/render-options.java
import com.ironsoftware.ironpdf.*;
import com.ironsoftware.ironpdf.render.*;

ChromePdfRenderOptions options = new ChromePdfRenderOptions();

// Render the page using the print media type (uses @media print CSS rules)
options.setCssMediaType(CssMediaType.PRINT);

// Wait up to 5 seconds for JavaScript to finish executing
options.setJavaScriptTimeout(5000);

// Apply a 1.5x zoom level to scale content to fit the page
options.setZoom(150);

// Render at 150 DPI for sharper images in print output
options.setDpi(150);

PdfDocument pdf = PdfDocument.renderHtmlAsPdf(
    "<h1>Styled Report</h1>",
    options
);
pdf.saveAs("styled_report.pdf");
JAVA

A configuração CssMediaType.PRINT instrui o mecanismo a aplicar as regras CSS @media print, que muitos modelos HTML usam para ocultar barras de navegação e aplicar layouts específicos para impressão. O método setJavaScriptTimeout é importante para páginas que usam bibliotecas de gráficos JavaScript (D3.js, Chart.js) ou conteúdo com carregamento lento — se o tempo limite for muito curto, o PDF capturará a página antes que o JavaScript termine de renderizar, produzindo gráficos vazios ou seções ausentes. Aumente o tempo limite se o PDF renderizado estiver faltando conteúdo esperado.

O método setDpi controla a resolução da imagem na saída. O padrão (96 DPI) é apropriado para documentos na tela. Para PDFs que serão impressos ou exibidos em telas de alta resolução, use 150 ou 300 DPI. Valores de DPI mais altos aumentam o tamanho do arquivo proporcionalmente. Veja o exemplo de código de configurações de geração de PDF para a lista completa de propriedades configuráveis.


Como posso adicionar cabeçalhos e rodapés?

O IronPDF suporta cabeçalhos e rodapés baseados em texto e em HTML. Os cabeçalhos de texto usam um objeto TextHeaderFooter com tokens de formatação ({page}, {total-pages}, {date}) que são resolvidos automaticamente no momento da renderização.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/headers-footers.java
import com.ironsoftware.ironpdf.*;
import com.ironsoftware.ironpdf.headerfooter.*;

// Create a text-based header and footer
TextHeaderFooter header = new TextHeaderFooter();
header.setCenterText("Confidential — {date}");
header.setFontSize(10);

TextHeaderFooter footer = new TextHeaderFooter();
footer.setLeftText("My Company, Inc.");
footer.setRightText("Page {page} of {total-pages}");
footer.setFontSize(9);

PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>Annual Report</h1>");
pdf.addTextHeaders(header);
pdf.addTextFooters(footer);
pdf.saveAs("report_with_headers.pdf");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/headers-footers.java
import com.ironsoftware.ironpdf.*;
import com.ironsoftware.ironpdf.headerfooter.*;

// Create a text-based header and footer
TextHeaderFooter header = new TextHeaderFooter();
header.setCenterText("Confidential — {date}");
header.setFontSize(10);

TextHeaderFooter footer = new TextHeaderFooter();
footer.setLeftText("My Company, Inc.");
footer.setRightText("Page {page} of {total-pages}");
footer.setFontSize(9);

PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>Annual Report</h1>");
pdf.addTextHeaders(header);
pdf.addTextFooters(footer);
pdf.saveAs("report_with_headers.pdf");
JAVA

Os tokens {page} e {total-pages} produzem valores como "3 de 12" no rodapé e são atualizados automaticamente conforme a contagem de páginas muda, portanto, não é necessário saber a contagem final de páginas antes da renderização. O token {date} insere a data atual usando a localidade do sistema. Outros tokens disponíveis incluem {time}, {document-title} e {url}.

Os cabeçalhos e rodapés adicionados com addTextHeaders e addTextFooters aplicam-se a todas as páginas do documento por padrão. Passe o parâmetro de intervalo de páginas opcional para restringi-los a páginas específicas — por exemplo, para pular o cabeçalho na página de capa.

Para cabeçalhos estilizados que exigem logotipos, cores da marca ou layouts personalizados, use HtmlHeaderFooter em vez disso — ele aceita uma string HTML completa e a renderiza da mesma forma que o corpo da página. Veja o exemplo de cabeçalhos e rodapés personalizados para o padrão completo de cabeçalho em HTML.


Como posso definir margens de página e tamanho de papel?

Passe uma instância de ChromePdfRenderOptions com valores de margem e tamanho do papel configurados antes de chamar qualquer método de render*AsPdf.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/margins-paper-size.java
import com.ironsoftware.ironpdf.*;
import com.ironsoftware.ironpdf.render.*;
import com.ironsoftware.ironpdf.page.*;

ChromePdfRenderOptions options = new ChromePdfRenderOptions();

// Set uniform margins in millimeters
options.setMarginTop(20);
options.setMarginBottom(20);
options.setMarginLeft(15);
options.setMarginRight(15);

// Use A4 paper (default is Letter)
options.setPaperSize(PaperSize.A4);

PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<p>Page content here.</p>", options);
pdf.saveAs("a4_with_margins.pdf");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/margins-paper-size.java
import com.ironsoftware.ironpdf.*;
import com.ironsoftware.ironpdf.render.*;
import com.ironsoftware.ironpdf.page.*;

ChromePdfRenderOptions options = new ChromePdfRenderOptions();

// Set uniform margins in millimeters
options.setMarginTop(20);
options.setMarginBottom(20);
options.setMarginLeft(15);
options.setMarginRight(15);

// Use A4 paper (default is Letter)
options.setPaperSize(PaperSize.A4);

PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<p>Page content here.</p>", options);
pdf.saveAs("a4_with_margins.pdf");
JAVA

Os valores de margem estão em milímetros. A enumeração PaperSize abrange tamanhos padrão (A4, Carta, Ofício, A3 e outros). Os desenvolvedores que precisam de dimensões não padronizadas podem definir uma largura e altura personalizadas usando options.setCustomPaperWidth e options.setCustomPaperHeight. O exemplo de tamanho de papel personalizado e o exemplo de margens personalizadas mostram os padrões completos de configuração.


Como posso aplicar uma marca d'água a um PDF?

Uma marca d'água no IronPDF é um HTML carimbado sobre cada página com uma opacidade configurável. Esta abordagem oferece aos desenvolvedores controle total sobre a aparência da marca d'água — qualquer elemento HTML, imagem ou texto estilizado pode servir como o carimbo.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/watermark.java
import com.ironsoftware.ironpdf.*;

PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>Confidential Report</h1><p>Internal use only.</p>");

// Define the watermark using an HTML string
String watermarkHtml = "<h1 style='color:rgba(200,0,0,0.3); transform:rotate(-45deg);'>DRAFT</h1>";

// Stamp the watermark on all pages at 50% opacity
pdf.applyStamp(watermarkHtml);

pdf.saveAs("draft_watermark.pdf");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/watermark.java
import com.ironsoftware.ironpdf.*;

PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>Confidential Report</h1><p>Internal use only.</p>");

// Define the watermark using an HTML string
String watermarkHtml = "<h1 style='color:rgba(200,0,0,0.3); transform:rotate(-45deg);'>DRAFT</h1>";

// Stamp the watermark on all pages at 50% opacity
pdf.applyStamp(watermarkHtml);

pdf.saveAs("draft_watermark.pdf");
JAVA

O método applyStamp aceita um parâmetro HtmlStampOptions para posicionamento preciso — centro, canto superior esquerdo, deslocamentos de pixel personalizados e índice z (primeiro plano ou plano de fundo). Definir o carimbo como fundo o coloca atrás do texto para que o documento permaneça legível. Defini-lo como primeiro plano o coloca em cima, o que é mais difícil de obscurecer ao imprimir.

PontasPara produzir uma marca d'água de ladrilho repetido — do tipo que o próprio IronPDF aplica no modo de teste — renderize uma grade de elementos de texto rotacionados na string de carimbo HTML e dimensione o elemento para preencher a página inteira.

Veja o guia de como fazer marca d'água personalizada para exemplos que cobrem marcas d'água de fundo, padrões de ladrilho e remoção de marcas d'água ao atualizar a licença.


Como posso mesclar múltiplos PDFs em um só?

PdfDocument.merge combina dois ou mais objetos PdfDocument em ordem e retorna um único novo documento. Esta é a abordagem preferida para montar relatórios a partir de seções componentes, adicionar páginas de capa ou unir seções por usuário de um trabalho em lote.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/merge-pdfs.java
import com.ironsoftware.ironpdf.*;
import java.util.Arrays;
import java.util.List;

// Render two separate HTML documents into PDFs
PdfDocument cover    = PdfDocument.renderHtmlAsPdf("<h1>Cover Page</h1>");
PdfDocument body     = PdfDocument.renderHtmlAsPdf("<h1>Report Body</h1><p>Section one...</p>");
PdfDocument appendix = PdfDocument.renderHtmlAsPdf("<h2>Appendix A</h2>");

// Merge all three into a single PDF in the specified order
List<PdfDocument> parts = Arrays.asList(cover, body, appendix);
PdfDocument merged = PdfDocument.merge(parts);
merged.saveAs("full_report.pdf");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/merge-pdfs.java
import com.ironsoftware.ironpdf.*;
import java.util.Arrays;
import java.util.List;

// Render two separate HTML documents into PDFs
PdfDocument cover    = PdfDocument.renderHtmlAsPdf("<h1>Cover Page</h1>");
PdfDocument body     = PdfDocument.renderHtmlAsPdf("<h1>Report Body</h1><p>Section one...</p>");
PdfDocument appendix = PdfDocument.renderHtmlAsPdf("<h2>Appendix A</h2>");

// Merge all three into a single PDF in the specified order
List<PdfDocument> parts = Arrays.asList(cover, body, appendix);
PdfDocument merged = PdfDocument.merge(parts);
merged.saveAs("full_report.pdf");
JAVA

As páginas de cada documento fonte aparecem na saída mesclada na ordem especificada pela lista de fontes. O documento mesclado não herda metadados de nenhuma fonte individual — atualize meta.title e outras propriedades do documento usando PdfDocument.getPdfMetaData() após a mesclagem, caso esses campos sejam importantes para o consumidor subsequente.

O método merge também possui uma sobrecarga de dois argumentos que aceita exatamente duas instâncias de PdfDocument. Para mesclas em massa de muitos documentos, use a sobrecarga de lista — é mais eficiente do que encadear múltiplas chamadas de dois argumentos porque processa todas as fontes em uma única passagem.

ObserveCada fonte PdfDocument na lista de mesclagem permanece válida e inalterada após a chamada. A instância merged é um documento novo e independente. Libere os documentos de origem com seu método close() quando não forem mais necessários para liberar os recursos nativos associados.


Como posso adicionar ou remover páginas de um PDF?

É possível copiar páginas individuais de um documento para outro, ou excluí-las completamente, usando os métodos PdfDocument.copyPage, PdfDocument.copyPages e PdfDocument.removePages.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/page-operations.java
import com.ironsoftware.ironpdf.*;
import java.util.Arrays;

// Generate a multi-page document using CSS page breaks
PdfDocument report = PdfDocument.renderHtmlAsPdf(
    "<p>Page 1 content</p>" +
    "<div style='page-break-after:always;'></div>" +
    "<p>Page 2 content</p>" +
    "<div style='page-break-after:always;'></div>" +
    "<p>Page 3 content</p>"
);

// Remove page 2 (zero-indexed — page index 1)
report.removePages(Arrays.asList(1));

// Save the two-page result
report.saveAs("two_page_report.pdf");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/page-operations.java
import com.ironsoftware.ironpdf.*;
import java.util.Arrays;

// Generate a multi-page document using CSS page breaks
PdfDocument report = PdfDocument.renderHtmlAsPdf(
    "<p>Page 1 content</p>" +
    "<div style='page-break-after:always;'></div>" +
    "<p>Page 2 content</p>" +
    "<div style='page-break-after:always;'></div>" +
    "<p>Page 3 content</p>"
);

// Remove page 2 (zero-indexed — page index 1)
report.removePages(Arrays.asList(1));

// Save the two-page result
report.saveAs("two_page_report.pdf");
JAVA

Os índices de página no IronPDF são baseados em zero. Ao remover várias páginas, passe todos os índices em uma única chamada removePages em vez de chamá-la várias vezes em um loop, porque cada remoção desloca os índices das páginas subsequentes. Passar a lista completa de uma vez evita desvio de índice. Por exemplo, para remover as páginas 2 e 4 de um documento de cinco páginas, passe Arrays.asList(1, 3) — não duas chamadas separadas.

Para inserir páginas de um PDF externo — por exemplo, anexando um aviso legal de um modelo estático — use PdfDocument.insertPdf para inserir o documento externo em uma posição específica. A contagem de páginas do documento receptor é atualizada imediatamente após a inserção.

A propriedade CSS css page-break-after:always é a maneira padrão de forçar quebras de página em HTML que serão renderizadas em PDF. O IronPDF também suporta a propriedade CSS mais recente break-after: page. Ambas as abordagens produzem quebras de página previsíveis sem exigir qualquer código especial Java.


Como posso proteger um PDF com senha em Java?

O IronPDF suporta duas senhas distintas em um PDF: uma senha de proprietário que controla permissões de edição, impressão e cópia, e uma senha de usuário que controla a abertura do documento. Ambos são definidos através da classe SecurityOptions.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/password-protect.java
import com.ironsoftware.ironpdf.*;
import com.ironsoftware.ironpdf.security.*;

PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>Secure Document</h1>");

SecurityOptions security = new SecurityOptions();

// Require a password to open the document
security.setUserPassword("user123");

// Require a separate password to edit, print, or copy content
security.setOwnerPassword("owner456");

// Restrict printing to prevent unauthorized reproduction
security.setAllowUserPrinting(PrintOptions.FullPrintQuality);

PdfSecurityManager securityManager = new PdfSecurityManager(pdf);
securityManager.setSecurityOptions(security);

pdf.saveAs("secure_document.pdf");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/password-protect.java
import com.ironsoftware.ironpdf.*;
import com.ironsoftware.ironpdf.security.*;

PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>Secure Document</h1>");

SecurityOptions security = new SecurityOptions();

// Require a password to open the document
security.setUserPassword("user123");

// Require a separate password to edit, print, or copy content
security.setOwnerPassword("owner456");

// Restrict printing to prevent unauthorized reproduction
security.setAllowUserPrinting(PrintOptions.FullPrintQuality);

PdfSecurityManager securityManager = new PdfSecurityManager(pdf);
securityManager.setSecurityOptions(security);

pdf.saveAs("secure_document.pdf");
JAVA

A configuração AllowUserPrinting aceita uma enumeração PrintOptions: FullPrintQuality, LowQualityPrint ou NoPrint. Quando a senha do proprietário é definida, mas a senha do usuário é deixada em branco, o documento abre sem senha, mas a edição e outras operações requerem a senha do proprietário em um editor de PDF.

AvisoA proteção por senha de PDF criptografa o arquivo, mas não é um substituto para sistemas adequados de controle de acesso. Usuários determinados com ferramentas especializadas podem tentar ataques de força bruta em senhas fracas. Use senhas fortes e geradas aleatoriamente para documentos que requerem segurança genuína.


Como posso converter um modelo HTML com dados dinâmicos?

Gerar PDFs a partir de um modelo HTML orientado por dados é um dos casos de uso de produção mais comuns para o IronPDF. A abordagem padrão é construir a string HTML em Java usando uma biblioteca de modelos ou operações de string e, em seguida, passar a string finalizada para renderHtmlAsPdf.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/dynamic-template.java
import com.ironsoftware.ironpdf.*;

// Simulate data from a database or service layer
String customerName  = "Acme Corp";
String invoiceNumber = "INV-20240501";
String totalAmount   = "$1,250.00";
String dueDate       = "2024-06-01";

// Build the HTML template with real data injected
String html = "<!DOCTYPE html><html><head>" +
    "<style>body{font-family:Arial,sans-serif;margin:40px;}" +
    "table{width:100%;border-collapse:collapse;}" +
    "th,td{border:1px solid #ccc;padding:8px;text-align:left;}" +
    "th{background:#f4f4f4;}</style></head><body>" +
    "<h1>Invoice</h1>" +
    "<p><strong>Customer:</strong> " + customerName + "</p>" +
    "<p><strong>Invoice #:</strong> " + invoiceNumber + "</p>" +
    "<table><tr><th>Description</th><th>Amount</th></tr>" +
    "<tr><td>Professional Services</td><td>" + totalAmount + "</td></tr>" +
    "</table>" +
    "<p><strong>Due Date:</strong> " + dueDate + "</p>" +
    "</body></html>";

PdfDocument pdf = PdfDocument.renderHtmlAsPdf(html);
pdf.saveAs(invoiceNumber + ".pdf");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/dynamic-template.java
import com.ironsoftware.ironpdf.*;

// Simulate data from a database or service layer
String customerName  = "Acme Corp";
String invoiceNumber = "INV-20240501";
String totalAmount   = "$1,250.00";
String dueDate       = "2024-06-01";

// Build the HTML template with real data injected
String html = "<!DOCTYPE html><html><head>" +
    "<style>body{font-family:Arial,sans-serif;margin:40px;}" +
    "table{width:100%;border-collapse:collapse;}" +
    "th,td{border:1px solid #ccc;padding:8px;text-align:left;}" +
    "th{background:#f4f4f4;}</style></head><body>" +
    "<h1>Invoice</h1>" +
    "<p><strong>Customer:</strong> " + customerName + "</p>" +
    "<p><strong>Invoice #:</strong> " + invoiceNumber + "</p>" +
    "<table><tr><th>Description</th><th>Amount</th></tr>" +
    "<tr><td>Professional Services</td><td>" + totalAmount + "</td></tr>" +
    "</table>" +
    "<p><strong>Due Date:</strong> " + dueDate + "</p>" +
    "</body></html>";

PdfDocument pdf = PdfDocument.renderHtmlAsPdf(html);
pdf.saveAs(invoiceNumber + ".pdf");
JAVA

Para projetos maiores, considere uma biblioteca de template Java como Thymeleaf ou Freemarker para gerenciar templates HTML como arquivos separados, injetar dados através de um objeto de contexto e manter a sintaxe do template mais limpa do que a concatenação de strings. Ambas as bibliotecas produzem uma string HTML simples que passa diretamente para renderHtmlAsPdf.

PontasAo gerar PDFs em um trabalho em lote — por exemplo, uma fatura por cliente — instancie ChromePdfRenderOptions uma vez antes do loop e reutilize a mesma instância para cada chamada de renderização. Criar um novo objeto de opções por chamada adiciona sobrecarga desnecessária de alocação de objeto.


Como posso extrair texto de um PDF em Java?

PdfDocument.extractAllText lê todo o conteúdo de texto de cada página de um PDF e o retorna como uma única string. Isso é útil para indexação de pesquisa, extração de dados e validação de conteúdo após a renderização.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/extract-text.java
import com.ironsoftware.ironpdf.*;
import java.nio.file.Paths;

// Open an existing PDF (or use the result of a render call)
PdfDocument pdf = PdfDocument.fromFile(Paths.get("output.pdf"));

// Extract all text content as a plain string
String text = pdf.extractAllText();
System.out.println(text);
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/extract-text.java
import com.ironsoftware.ironpdf.*;
import java.nio.file.Paths;

// Open an existing PDF (or use the result of a render call)
PdfDocument pdf = PdfDocument.fromFile(Paths.get("output.pdf"));

// Extract all text content as a plain string
String text = pdf.extractAllText();
System.out.println(text);
JAVA

A string retornada preserva a ordem de leitura do texto em cada página, mas não inclui formatação. Os espaços em branco entre colunas e células de tabela são representados como espaços. Para PDFs que contêm várias seções lógicas, extractTextFromPage(int pageIndex) isola o texto de uma única página, o que é mais eficiente ao processar documentos grandes, uma página de cada vez.

A extração de texto só funciona em PDFs onde o texto está armazenado como objetos de texto reais na estrutura do PDF — PDFs gerados por renderHtmlAsPdf sempre se qualificam. Documentos escaneados onde as páginas são imagens requerem OCR antes que a extração de texto seja possível. IronOCR é uma biblioteca complementar da Iron Software que adiciona capacidades de OCR a aplicações Java e .NET.

Para extração de imagens, use pdf.extractAllImages() que retorna uma lista de objetos BufferedImage, um para cada imagem encontrada no documento. Veja o exemplo de extração de texto de PDF e o exemplo de extração de imagens de PDF para padrões de código completos.


Como posso comprimir um arquivo PDF?

PdfDocument.compressImages reduz o tamanho do arquivo recodificando imagens incorporadas com uma qualidade inferior. Isso é particularmente eficaz para PDFs que foram gerados a partir de páginas da web contendo fotos grandes ou imagens de banner.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/compress-pdf.java
import com.ironsoftware.ironpdf.*;
import java.nio.file.Paths;

PdfDocument pdf = PdfDocument.fromFile(Paths.get("large_report.pdf"));

// Compress embedded images to 60% quality (0–100 scale)
pdf.compressImages(60);

pdf.saveAs("compressed_report.pdf");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/compress-pdf.java
import com.ironsoftware.ironpdf.*;
import java.nio.file.Paths;

PdfDocument pdf = PdfDocument.fromFile(Paths.get("large_report.pdf"));

// Compress embedded images to 60% quality (0–100 scale)
pdf.compressImages(60);

pdf.saveAs("compressed_report.pdf");
JAVA

Valores de qualidade entre 50 e 75 normalmente reduzem o tamanho do arquivo em 40-70% com fidelidade visual aceitável para leitura em tela. Valores abaixo de 40 podem introduzir artefatos visíveis em fotos, embora possam ser aceitáveis para diagramas e capturas de tela com grandes áreas de cores sólidas.

O método sobrecarregado compressImages(int quality, boolean scaleExistingImages) também aceita um valor booleano que indica se as imagens maiores que o tamanho exibido no PDF devem ser redimensionadas. Definir isso como true reduz ainda mais o tamanho do arquivo, eliminando o excesso de resolução que ocorre quando uma imagem de alta resolução é incorporada, mas exibida em um tamanho muito menor na página. Isto é comum em conversões web para PDF, onde as imagens são servidas com resolução 2x para telas retina.

O exemplo de compressão de PDF demonstra compressão em lote em documentos de várias páginas, incluindo como verificar a redução de tamanho após a compressão.


Próximos passos

Este tutorial cobriu os três métodos de conversão de HTML para PDF, instalação, configuração de licença, opções de renderização, cabeçalhos e rodapés, configurações de layout de página, extração de texto e compressão de arquivo.

Para ir além, explore estes recursos na documentação do IronPDF for Java:

  1. Configurações de geração de PDFConfigure DPI, zoom, timeout e tipo de mídia CSS para controle preciso de renderização.
  2. Cabeçalhos e rodapésAdicione cabeçalhos e rodapés HTML com logos de marca e layouts personalizados.
  3. Layout de página — Defina margens personalizadas e dimensões de papel para saída pronta para impressão.
  4. Marcas d'água — Aplique marcas d'água de fundo e de primeiro plano para segurança de documentos.
  5. Extração de conteúdoExtraia texto de PDFs e extraia imagens para processamento a jusante.
  6. Compressão de arquivoReduza o tamanho de arquivo PDF para armazenamento e entrega por e-mail.
  7. Referência de API — Navegue pela referência completa da API Java do IronPDF para cada classe e método.

Comece uma avaliação gratuita para começar a converter HTML para PDF em sua aplicação Java hoje. Quando estiver pronto para implantar, veja as opções de licenciamento para encontrar o plano que se adequa ao seu projeto.

Perguntas frequentes

Como converter uma string HTML para PDF em Java?

Chame PdfDocument.renderHtmlAsPdf com sua string HTML. Passe um caminho base opcional como o segundo argumento para que referências relativas CSS, imagem e script sejam resolvidas corretamente. Chame saveAs no PdfDocument retornado para gravar o arquivo.

Como converter um URL para PDF em Java?

Chame PdfDocument.renderUrlAsPdf com o URL totalmente qualificado. O IronPDF busca a página, espera que o JavaScript seja executado e renderiza o DOM totalmente carregado como PDF.

Como converter um arquivo HTML local para PDF em Java?

Chame PdfDocument.renderHtmlFileAsPdf com um caminho de arquivo absoluto. Todas as referências a ativos relativas no arquivo HTML resolvem relativas ao diretório desse arquivo automaticamente.

Como instalar o IronPDF em um projeto Java usando Maven?

Adicione a dependência IronPDF ao pom.xml com groupId com.ironsoftware e artifactId ironpdf, depois execute mvn install a partir do diretório raiz do projeto.

Como remover a marca d'água de PDFs gerados pelo IronPDF?

Chame License.setLicenseKey com uma chave de licença válida antes de qualquer chamada de renderização. Sem uma chave de licença, o IronPDF aplica uma marca d'água em mosaico em cada página.

Como adicionar cabeçalhos e rodapés a um PDF em Java?

Crie uma instância de TextHeaderFooter, defina suas propriedades de texto usando tokens de formatação como {page} e {total-pages}, depois chame pdf.addTextHeaders e pdf.addTextFooters. Para cabeçalhos estilizados com logotipos, use HtmlHeaderFooter em vez disso.

Como definir margens da página e tamanho do papel em Java?

Crie uma instância de ChromePdfRenderOptions e chame setMarginTop, setMarginBottom, setMarginLeft, setMarginRight (em milímetros) e setPaperSize com um valor enum PaperSize. Passe as opções para qualquer método de renderização.

Como mesclar vários PDFs em um só em Java?

Crie uma List com os documentos na ordem desejada e passe-a para PdfDocument.merge. O método retorna um novo PdfDocument contendo todas as páginas de todas as fontes.

Como proteger um PDF com senha em Java?

Crie uma instância de SecurityOptions, chame setUserPassword e setOwnerPassword, depois aplique via PdfSecurityManager antes de salvar o documento.

Como extrair texto de um PDF em Java?

Chame pdf.extractAllText() para recuperar todo o conteúdo de texto como uma única string. Use extractTextFromPage(int pageIndex) para extrair o texto de uma página específica.

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.5 just released
Still Scrolling Icon

Ainda está rolando a tela?

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