# HTML para PDF em C# .NET
Como desenvolvedores do IronPDF, sabemos o quão importante é para a conversão de HTML para PDF produzir resultados precisos e de alta qualidade que atendam às expectativas dos clientes. Este tutorial em C# irá guiá-lo na construção de um conversor de HTML para PDF para suas aplicações, projetos e sites. Vamos desenvolver um conversor de HTML para PDF em C#, e os documentos PDF de saída do IronPDF serão pixel perfect em relação aos PDFs gerados pelo navegador Google Chrome.
```cs
:title=Get started making PDFs now!
IronPdf.ChromePdfRenderer
.StaticRenderHtmlAsPdf("<p>Hello World</p>")
.SaveAs("pixelperfect.pdf");
```
<hr class="separator" />
<p class="main-content__segment-title">Visão Geral</p>
<div class="hsg-featured-snippet">
<h2>Como Converter HTML para PDF em C#</h2>
<img class="featured-snippet__image featured-snippet__image--float-right featured-snippet__image--html-pdf" src="/static-assets/pdf/images/html-to-pdf-converter-in-csharp.png" alt="Como Converter HTML para PDF em C#" />
<ol>
<li><a class="js-modal-open" data-modal-id="trial-license-after-download" href="https://nuget.org/packages/IronPdf/">Baixe e instale a biblioteca HTML para PDF em C#</a></li>
<li><a href="#anchor-create-a-pdf-with-an-html-string-in-c-net">Crie um PDF com uma String HTML</a></li>
<li><a href="#anchor-create-a-pdf-with-an-html-string-in-c-net">Use o método RenderHtmlAsPdf para converter uma String HTML em um PDF</a></li>
<li><a href="#anchor-export-a-pdf-using-existing-url">Exporte um PDF usando uma URL existente</a></li>
<li><a href="#anchor-generate-a-pdf-from-a-html-page">Gere um PDF a partir de uma página HTML</a></li>
<li><a href="#anchor-add-custom-headers-and-footers">Adicione Cabeçalhos e Rodapés Personalizados</a></li>
<li>Chame SaveAs para salvar o arquivo PDF no computador</li>
<li><a href="#anchor-c-html-to-pdf-conversion-settings">Mais</a></li>
</ol>
</div>
<br class="main-article__clear-both" />
## Conversor de HTML para PDF para C# & VB.NET
Criar arquivos PDF programaticamente em .NET pode ser uma tarefa frustrante. O formato de arquivo de documento PDF foi projetado mais para impressoras do que para desenvolvedores. E o C# não possui muitas bibliotecas ou recursos adequados para geração de PDF embutidos, muitas bibliotecas precisam de configuração extra, e causam mais frustração quando exigem múltiplas linhas de código para realizar uma tarefa simples.
A ferramenta de conversão de HTML para PDF em C# que usaremos neste tutorial é o IronPDF da Iron Software, uma biblioteca de geração e edição de PDF em C# altamente popular. Esta biblioteca possui funcionalidade completa de edição e geração de PDF, funciona imediatamente, faz exatamente o que você precisa com o menor número de linhas, e possui [documentação excepcional de suas 50+ funcionalidades](/features/). O IronPDF se destaca por suportar **.NET 10, .NET 9, .NET 8, .NET 7, .NET 6, e .NET 5**, .NET Core, .NET Standard, e .NET Framework no Windows, macOS, Linux, Docker, Azure, e AWS.
Com C# e IronPDF, a lógica para "<a href="/how-to/create-new-pdfs/">gerar um documento PDF</a>" ou "<a href="/examples/using-html-to-create-a-pdf/">conversão de HTML para PDF</a>" é direta. Devido ao avançado Chrome Renderer do IronPDF, a maior parte ou todo o design e layout do documento PDF usará ativos HTML existentes.
Este método de geração dinâmica de PDF em .NET com HTML5 funciona igualmente bem em aplicações de console, aplicações Windows Forms, WPF, bem como em sites e MVC.
**O IronPDF também suporta depuração do seu HTML com o Chrome para PDFs Pixel Perfect. Um tutorial para configurar isso pode ser encontrado <a href="/how-to/pixel-perfect-html-to-pdf/">aqui</a>.**
O IronPDF está disponível em várias linguagens, tanto dentro quanto fora do ecossistema .NET.
- [Guia F#](/get-started/fsharp-pdf-library-html-to-pdf/)
- [Guia VB.NET](/get-started/vb-net-pdf/)
- [Python](/python/tutorials/html-to-pdf/)
- [Java](/java/tutorials/html-to-pdf/)
- [Node.js](/nodejs/tutorials/html-to-pdf/)
O IronPDF é gratuito para desenvolvimento; uma chave de licença é necessária para implantar ao vivo e remover a marca d'água de teste. Você pode [comprar uma licença aqui](/licensing/) ou se inscrever para uma <a class='js-modal-open' data-modal-id='trial-license'>chave de teste gratuita de 30 dias aqui</a>.
<hr class="separator" />
<p class="main-content__segment-title">Passo 1</p>
## Baixe e Instale a Biblioteca HTML para PDF em C#
### Visual Studio - Gerenciador de Pacotes NuGet
No Visual Studio, clique com o botão direito no explorador de soluções do seu projeto e selecione "Gerenciar Pacotes NuGet...". A partir daí, basta procurar por IronPDF e instalar a versão mais recente na sua solução... clique em OK para qualquer caixa de diálogo que aparecer. Isso também funcionará igualmente bem em projetos VB.NET.
```shell
:ProductInstall
```
### IronPDF no Site do NuGet
Para uma visão completa das funcionalidades, compatibilidade e downloads do IronPDF, por favor, confira o IronPDF no site oficial do NuGet: <a class="js-modal-open" href="https://www.nuget.org/packages/IronPdf" target="_blank" data-modal-id="trial-license-after-download">https://www.nuget.org/packages/IronPdf</a>
### Instalar via DLL
Outra opção é instalar o DLL do IronPDF diretamente. O IronPDF pode ser baixado e instalado manualmente no projeto ou GAC a partir de <a class="js-modal-open" href="/packages/IronPdf.zip" data-modal-id="trial-license-after-download">https://ironpdf.com/packages/IronPdf.zip</a>
<hr class="separator" />
<p class="main-content__segment-title">Tutoriais de Como Fazer</p>
## Crie um PDF com uma String HTML em C# .NET
**Como: Converter String HTML para PDF?** É uma habilidade muito eficiente e gratificante *criar um novo arquivo PDF em C#*.
Podemos simplesmente usar o método [ChromePdfRenderer.RenderHtmlAsPdf](/object-reference/api/IronPdf.ChromePdfRenderer.html) para transformar qualquer string HTML (HTML5) em um PDF. **A renderização de HTML para PDF em C#** é realizada por uma versão totalmente funcional do motor Google Chromium que acompanha o pacote NuGet do IronPDF.
```csharp
using IronPdf;
// ChromePdfRenderer turns HTML into a PDF using IronPDF's embedded Chrome engine
var renderer = new ChromePdfRenderer();
// Render an HTML string. The result is a PdfDocument held in memory
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>");
// Write the PDF to disk
pdf.SaveAs("pixel-perfect.pdf");
```
`RenderHtmlAsPdf` suporta totalmente HTML5, CSS3, JavaScript e imagens. Se esses ativos estiverem em um disco rígido, podemos querer definir o segundo parâmetro de `RenderHtmlAsPdf` para o diretório contendo os ativos. Este método retorna um objeto **PdfDocument**, que é uma classe usada para armazenar informações de PDF.
### O IronPDF renderizará seu HTML exatamente como aparece no Chrome
Temos um tutorial completo dedicado a permitir que você configure o Chrome para depuração completa de HTML para garantir que as alterações que você vê ao editar seu HTML, CSS e JavaScript sejam pixel-perfect iguais ao PDF de saída do IronPDF quando você escolher renderizar. Por favor, encontre o tutorial aqui: [Como Depurar HTML no Chrome para Criar PDFs Pixel Perfect](/how-to/pixel-perfect-html-to-pdf/).
**Caminho Base URL** (o argumento `BaseUrlOrPath`):
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// The second argument is the base path. Relative URLs in the HTML (the image
// below, but also stylesheets, scripts and fonts) are resolved against it.
var pdf = renderer.RenderHtmlAsPdf("<img src='image1.png'/>", @"C:\MyProject\Assets\");
pdf.SaveAs(@"C:\MyProject\Assets\output.pdf");
```
Todas as folhas de estilo CSS, imagens e arquivos JavaScript referenciados serão relativos a esse caminho base e podem ser mantidos em uma estrutura organizada e lógica. Você também pode, é claro, optar por referenciar imagens, folhas de estilo e ativos online, incluindo web-fonts como Google Fonts e até mesmo jQuery.
<hr class="separator" />
## Exporte um PDF Usando URL Existente | URL para PDF
Renderizar URLs existentes como PDFs com C# é muito eficiente e intuitivo. Isso também permite que as equipes dividam o trabalho de design de PDF e renderização de PDF no back-end entre várias equipes.
Vamos renderizar uma página do Wikipedia.com no exemplo a seguir:
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// Render a live web page straight from its URL
var pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF");
// The PDF is written next to the executable
pdf.SaveAs("wikipedia.pdf");
```
Você notará que hiperlinks e até mesmo formulários HTML são preservados dentro do PDF gerado pelo nosso código C#.
Ao renderizar páginas da web existentes, temos alguns truques que podemos querer aplicar:
### CSS de Impressão e Tela
Os tipos de mídia CSS permitem que uma página carregue estilos separados para impressão e tela. Podemos instruir o IronPDF a renderizar o CSS de "Impressão", que geralmente é mais simples. Por padrão, os estilos CSS de "Tela" serão renderizados, o que corresponde ao que você vê no navegador.
```csharp
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Choose which CSS media type the page is rendered with.
// Screen (the default) renders the page as a browser displays it;
// Print applies the page's @media print rules instead.
// renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen;
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
```
Artigo Principal: [Comparação de HTML para PDF Pixel Perfect](/how-to/pixel-perfect-html-to-pdf/#decide-to-use-css-media-type-print-or-screen).
### JavaScript
O IronPDF suporta JavaScript, jQuery e até mesmo AJAX. Podemos precisar instruir o [IronPDF a **esperar** pelo JS ou ajax](/how-to/javascript-to-pdf/) para terminar de executar antes de renderizar uma captura de tela da nossa página da web.
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// Let the page's JavaScript run before the snapshot is taken
renderer.RenderingOptions.EnableJavaScript = true;
// Give scripts and AJAX calls 500 milliseconds to finish before rendering.
// For event-driven pages, WaitFor.NetworkIdle() or WaitFor.JavaScript() wait
// for a signal instead of a fixed delay.
renderer.RenderingOptions.WaitFor.RenderDelay(500);
```
Podemos demonstrar o suporte a JavaScript renderizando a [página de documentação do diagrama de acordes d3.js](https://d3js.org/d3-chord), cujos gráficos são desenhados por JavaScript quando a página é carregada:
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// The chart is drawn by JavaScript, so let it run and give it a moment to finish
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay(500);
// Render the d3.js chord-diagram documentation page, whose charts are drawn by JavaScript
var pdf = renderer.RenderUrlAsPdf("https://d3js.org/d3-chord");
pdf.SaveAs("chart.pdf");
```
### CSS Responsivo
HTML para PDF usando CSS responsivo em .NET! [Páginas da web responsivas](/how-to/html-to-pdf-responsive-css/) são projetadas para serem visualizadas em um navegador. O IronPDF não abre uma janela de navegador real dentro do sistema operacional do seu servidor. Sem uma viewport de navegador, layouts responsivos podem voltar ao seu ponto de interrupção mais estreito.
Recomendamos usar tipos de mídia CSS de **Impressão** para navegar por esse problema. O CSS de impressão normalmente não deve ser responsivo.
```csharp
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Responsive layouts are designed for a browser viewport, so render the page's
// print stylesheet instead of its screen stylesheet
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
```
<hr class="separator" />
## Gere um PDF a partir de uma Página HTML
Também podemos renderizar qualquer página HTML para PDF em nosso disco rígido. Todos os ativos relativos, como CSS, imagens e js, serão renderizados como se o arquivo tivesse sido aberto usando o protocolo **file://**.
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// Render an HTML file from disk. Relative CSS, image and script paths
// resolve against the file's own folder, as if opened with file://
var pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html");
pdf.SaveAs("Invoice.pdf");
```
Este método tem a vantagem de permitir que o desenvolvedor teste o conteúdo HTML em um navegador durante o desenvolvimento. Recomendamos o Chrome, pois é o navegador da web no qual o motor de renderização do IronPDF é baseado.
Para converter [XML para PDF, você pode usar a modelagem XSLT para imprimir seu conteúdo XML em PDF](/how-to/xml-to-pdf/).
<hr class="separator" />
## Adicione Cabeçalhos e Rodapés Personalizados
Cabeçalhos e rodapés podem ser adicionados aos PDFs quando eles são renderizados, ou a arquivos PDF existentes usando o IronPDF.
Com o IronPDF, cabeçalhos e rodapés podem conter conteúdo simples baseado em texto usando a classe *`TextHeaderFooter`* - ou com imagens e conteúdo HTML rico usando a classe *`HtmlHeaderFooter`*.
```csharp
using IronPdf;
using IronPdf.Rendering;
// Create a PDF from an existing HTML file with rendering options set up front
var renderer = new ChromePdfRenderer
{
RenderingOptions = new ChromePdfRenderOptions
{
// Margins are in millimeters
MarginTop = 50,
MarginBottom = 50,
// Render the page's print stylesheet
CssMediaType = PdfCssMediaType.Print,
// Plain-text header: the document title, centered, above a divider line
TextHeader = new TextHeaderFooter
{
CenterText = "{pdf-title}",
DrawDividerLine = true,
FontSize = 16
},
// Plain-text footer: date and time on the left, page numbers on the right
TextFooter = new TextHeaderFooter
{
LeftText = "{date} {time}",
RightText = "Page {page} of {total-pages}",
DrawDividerLine = true,
FontSize = 14
}
}
};
var pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html");
pdf.SaveAs("Invoice.pdf");
// Open the result in the default PDF viewer
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo
{
FileName = "Invoice.pdf",
UseShellExecute = true
});
```
Explore todas as opções de renderização no seguinte artigo de como fazer: [Como Usar as Opções de Renderização](/how-to/rendering-options/).
### Cabeçalhos e Rodapés HTML
A classe `HtmlHeaderFooter` permite que cabeçalhos e rodapés ricos sejam gerados usando conteúdo HTML5 que pode até incluir imagens e folhas de estilo.
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// An HTML footer can carry markup, styles and images.
// {page} and {total-pages} are filled in for every page.
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align:right'><em style='color:pink'>page {page} of {total-pages}</em></div>"
};
```
### Dados Dinâmicos em Cabeçalhos e Rodapés de PDF
Podemos "mesclar" conteúdo no texto e até mesmo no HTML de cabeçalhos e rodapés usando marcadores como:
- `{page}` para o número da página atual
- `{total-pages}` para o total de páginas no PDF
- `{url}` para a URL do PDF renderizado se renderizado a partir de uma página da web
- `{date}` para a data de hoje
- `{time}` para a hora atual
- `{html-title}` para o `<title>` do documento HTML renderizado
- `{pdf-title}` para o título do documento, que pode ser definido via ChromePdfRenderOptions
<hr class="separator" />
## Configurações de Conversão de HTML para PDF em C#
Existem muitas nuances sobre como nossos usuários e clientes podem esperar que o conteúdo do PDF seja renderizado.
A classe `ChromePdfRenderer` contém uma propriedade **RenderingOptions** que pode ser usada para definir essas opções.
Por exemplo, podemos querer escolher aceitar apenas diretivas CSS3 de "`print`":
```csharp
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Render the page's @media print CSS rather than its screen styles
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
renderer.RenderHtmlAsPdf("<html><body><h1>Hello, World!</h1></body></html>").SaveAs("Output.pdf");
```
Também podemos querer alterar o tamanho das margens de impressão para criar mais espaço em branco na página, para dar espaço para cabeçalhos ou rodapés grandes, ou até mesmo definir margens zero para impressão comercial de brochuras ou pôsteres:
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// Page margins in millimeters. Larger margins leave room for headers and
// footers; set them to 0 for edge-to-edge brochures and posters.
renderer.RenderingOptions.MarginTop = 50;
renderer.RenderingOptions.MarginBottom = 50;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
```
Podemos querer ativar ou desativar imagens de fundo de elementos HTML:
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// Include CSS background colors and images in the PDF (set false to drop them)
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
var pdf = renderer.RenderHtmlAsPdf("<h1 style='background:#eee'>Hello, PDF!</h1>");
pdf.SaveAs("output.pdf");
```
Também é possível definir nossos PDFs de saída para serem renderizados em qualquer tamanho de papel virtual - incluindo tamanhos retrato e paisagem e até mesmo tamanhos personalizados que podem ser definidos em milímetros ou polegadas.
```csharp
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Standard paper sizes and orientation
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
// Or a custom size, in millimeters or inches
// renderer.RenderingOptions.SetCustomPaperSizeinMilimeters(210, 297);
// renderer.RenderingOptions.SetCustomPaperSizeInInches(8.5, 11);
```
Explore todas as opções de renderização no seguinte artigo de como fazer: "[Como Usar as Opções de Renderização](/how-to/rendering-options/)."
<hr class="separator" />
## Aplicar Modelagem HTML
Modelar ou "criar em lote" PDFs é um requisito comum para desenvolvedores de Internet e sites.
Em vez de modelar um documento PDF em si, com o IronPDF podemos modelar nosso HTML usando tecnologias existentes e bem testadas. Quando o modelo HTML é combinado com dados de uma query-string ou banco de dados, acabamos com um documento PDF gerado dinamicamente.
No caso mais simples, usar o método C# String.Format é eficaz para amostras básicas.
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// Insert a value into an HTML template with string.Format
string html = string.Format("<h1>Hello {0}!</h1>", "World");
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("Hello.pdf");
```
Se o arquivo HTML for mais longo, muitas vezes podemos usar marcadores arbitrários como `[[NAME]]` e substituí-los por dados reais mais tarde.
O exemplo a seguir criará 3 PDFs, cada um personalizado para um usuário.
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// A template with a placeholder to replace
var htmlTemplate = "<p>[[NAME]]</p>";
var names = new[] { "John", "James", "Jenny" };
// One personalized PDF per name
foreach (var name in names)
{
var htmlInstance = htmlTemplate.Replace("[[NAME]]", name);
var pdf = renderer.RenderHtmlAsPdf(htmlInstance);
pdf.SaveAs(name + ".pdf");
}
```
### Modelagem Avançada Com Handlebars.NET
Um método sofisticado para mesclar dados C# com HTML para geração de PDF é usar a linguagem de modelagem Handlebars.
Handlebars torna possível criar HTML dinâmico a partir de objetos e instâncias de classe C#, incluindo registros de banco de dados. Handlebars é particularmente eficaz onde uma consulta pode retornar um número desconhecido de linhas, como na geração de uma fatura.
Devemos primeiro adicionar um Pacote NuGet adicional ao nosso projeto: [https://www.nuget.org/packages/Handlebars.NET/](https://www.nuget.org/packages/Handlebars.NET/)
```csharp
using HandlebarsDotNet;
// A Handlebars template with two placeholders
var source =
@"<div class=""entry"">
<h1>{{title}}</h1>
<div class=""body"">
{{body}}
</div>
</div>";
// Compile it once, then fill it with any object that has matching properties
var template = Handlebars.Compile(source);
var data = new { title = "My new post", body = "This is my first post!" };
string html = template(data);
// html now contains:
//
// <div class="entry">
// <h1>My new post</h1>
// <div class="body">
// This is my first post!
// </div>
// </div>
```
Para renderizar este HTML, podemos simplesmente usar o método `RenderHtmlAsPdf`.
```csharp
using HandlebarsDotNet;
using IronPdf;
// Fill the Handlebars template, then render the resulting HTML
var template = Handlebars.Compile("<h1>{{title}}</h1><p>{{body}}</p>");
string html = template(new { title = "My new post", body = "This is my first post!" });
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("Handlebars.pdf");
```
Você pode aprender mais sobre a linguagem de modelagem Handlebars e sua implementação em C# no [GitHub](https://github.com/Handlebars-Net/Handlebars.Net).
### Adicionar Quebras de Página usando HTML5
Um requisito comum em um documento PDF é a paginação. Os desenvolvedores precisam controlar onde as páginas do PDF começam e terminam para um layout limpo e legível.
A maneira mais fácil de fazer isso é com um truque CSS menos conhecido que renderizará uma quebra de página em qualquer documento HTML impresso.
```html
<div style='page-break-after: always;'> </div>
```
O HTML fornecido funciona, mas dificilmente é uma prática recomendada. Aconselhamos ajustar o atributo de mídia como no exemplo a seguir. Uma maneira tão limpa e organizada de dispor conteúdo HTML de várias páginas. Como o IronPDF renderiza com o tipo de mídia `screen` por padrão, uma folha de estilo `media="print"` só é aplicada quando `RenderingOptions.CssMediaType` é definido como `PdfCssMediaType.Print` (veja [Configurações de Conversão](#anchor-c-html-to-pdf-conversion-settings) acima).
```html
<!DOCTYPE html>
<html>
<head>
<style type="text/css" media="print">
.page {
page-break-after: always;
page-break-inside: avoid;
}
</style>
</head>
<body>
<div class="page">
<h1>This is Page 1</h1>
</div>
<div class="page">
<h1>This is Page 2</h1>
</div>
<div class="page">
<h1>This is Page 3</h1>
</div>
</body>
</html>
```
O Como Fazer descreve mais [dicas e truques com Quebras de Página](/how-to/html-to-pdf-page-breaks/).
<hr class="separator" />
## Anexar uma Página de Capa a um PDF
O IronPDF facilita a Mesclagem de documentos PDF. O uso mais comum dessa técnica é adicionar uma página de capa ou página final a um documento PDF renderizado existente.
Para fazer isso, primeiro renderizamos uma página de capa e, em seguida, usamos o método estático `PdfDocument.Merge()` para combinar os dois documentos.
```csharp
using IronPdf;
var renderer = new ChromePdfRenderer();
// The document body, rendered from a web page
var pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf/");
// Prepend an existing PDF as the cover page. Merge returns a new document.
var cover = PdfDocument.FromFile("CoverPage.pdf");
var pdfMerged = PdfDocument.Merge(cover, pdf);
pdfMerged.SaveAs("Combined.pdf");
```
Um exemplo de código completo pode ser encontrado aqui: [Exemplo de Código de Página de Capa de PDF](/examples/pdf-cover-page/).
<hr class="separator" />
## Adicionar uma Marca d'Água
Um recurso final de [PDF em C#](/use-case/csharp-pdf/) que o IronPDF suporta é adicionar uma marca d'água aos documentos. Isso pode ser usado para adicionar um aviso a cada página de que um documento é "confidencial" ou uma "amostra".
```csharp
using IronPdf;
using IronPdf.Editing;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf");
// Stamp every page with a red "SAMPLE" in the middle, rotated 30 degrees at 50% opacity.
// The watermark is HTML, so any markup, styling or image can be used.
pdf.ApplyWatermark(
"<h2 style='color:red; font-size:50px'>SAMPLE</h2>",
rotation: 30,
opacity: 50,
verticalAlignment: VerticalAlignment.Middle,
horizontalAlignment: HorizontalAlignment.Center);
pdf.SaveAs(@"C:\Path\To\Watermarked.pdf");
```
Um exemplo de código completo pode ser encontrado aqui: [Exemplo de Código de Marca d'Água de PDF](/examples/pdf-watermarking/).
<hr class="separator" />
## Baixar Código Fonte em C#
O **código fonte gratuito do conversor de HTML para PDF em C#** completo para este tutorial está disponível para download como um arquivo de projeto do Visual Studio 2022 compactado. Ele usará seu motor de renderização para gerar objetos de documento PDF em C#.
[Baixe este tutorial como um projeto do Visual Studio](/tutorials/html-to-pdf/downloads/CSharp-Html-To-Pdf-Tutorial.zip)
O download gratuito contém tudo o que você precisa para criar um PDF a partir de HTML - incluindo exemplos de código PDF em C# funcionais para:
1. Converter uma String HTML para PDF usando C#
2. Arquivo HTML para PDF em C# (suportando CSS, JavaScript e imagens)
3. HTML para PDF em C# usando uma URL ("URL para PDF")
4. Exemplos de edição e configurações de PDF em C#
5. Renderização de gráficos de canvas JavaScript como d3.js para um PDF
6. A Biblioteca de PDF para C#
### Referência de Classe
Os desenvolvedores também podem se interessar pela referência da Classe `IronPdf.PdfDocument`:
[https://ironpdf.com/object-reference/api/IronPdf.PdfDocument.html](https://ironpdf.com/object-reference/api/IronPdf.PdfDocument.html)
Este modelo de objeto mostra como os documentos PDF podem ser:
- Criptografados e protegidos por senha
- Editados ou 'carimbados' com novo conteúdo HTML
- Aprimorados com imagens de primeiro plano e de fundo
- Mesclados, unidos, truncados e emendados em nível de página ou documento
- Analisados para extrair texto simples e imagens, ou processados por OCR com o pacote IronOCR
<hr class="separator" />
## Blazor HTML para PDF
Adicionar funcionalidade de HTML para PDF ao seu servidor Blazor é fácil, simplesmente:
1. Crie um novo projeto de servidor Blazor ou use um existente
2. Adicione a biblioteca IronPDF ao seu projeto usando o NuGet
3. Adicione um novo Componente Razor ou use um existente
4. Adicione um `InputTextArea` e vincule-o ao IronPDF
5. Deixe o IronPDF cuidar do resto e implante
Para leitura adicional, continue para o [guia passo a passo completo](/how-to/blazor-tutorial/) para [converter HTML para PDF em aplicações Blazor](/how-to/blazor-tutorial/).
<img src="/static-assets/pdf/tutorials/blazor-tutorial/blazor-tutorial-3.webp" alt="PDF gerado a partir de uma página do Servidor Blazor com IronPDF" />
<hr class="separator" />
## Comparar com Outras Bibliotecas de PDF
O IronPDF é uma biblioteca de PDF poderosa e completa, adaptada para desenvolvedores modernos de .NET. Com conversão nativa de HTML para PDF alimentada por um motor Chromium avançado, uma API intuitiva e atualizações regulares, ele simplifica o desenvolvimento enquanto garante resultados de alta qualidade. Vamos dar uma olhada mais de perto em como ele se compara a outras ferramentas:
### PDFSharp
- **Recursos Principais**: PDFsharp é uma biblioteca de código aberto (MIT) para criar e editar documentos PDF em código gerenciado. Não possui um motor de renderização HTML, então converter conteúdo da web para PDF precisa de um renderizador de terceiros separado.
- **Padrões Modernos**: O IronPDF aproveita as tecnologias web modernas, incluindo HTML, CSS e JavaScript, através de seu motor baseado em Chromium, garantindo que os PDFs mantenham uma aparência e sensação contemporâneas.
- **Suporte & Atualizações**: PDFsharp é de código aberto e lança uma versão a cada poucos meses, com suporte comercial vendido separadamente por seu mantenedor. O IronPDF lança atualizações mensais e patches de segurança, e cada licença inclui suporte profissional de engenharia, o que é importante para aplicações empresariais.
### wkhtmltopdf
- **Facilidade de Integração**: wkhtmltopdf é uma ferramenta de linha de comando com uma biblioteca C; não há pacote oficial .NET, então usá-lo a partir de .NET significa lançar o binário nativo (ou chamá-lo através de um wrapper de terceiros como DinkToPdf) e enviar esse binário para cada plataforma em que você implanta.
- **Tecnologia de Renderização**: wkhtmltopdf renderiza com QtWebKit, um fork do WebKit que o Qt descontinuou em 2015 e abandonou no Qt 5.6, então recursos modernos de JavaScript e CSS não são suportados, especialmente em sites dinâmicos e ricos em conteúdo. O motor Chromium do IronPDF renderiza padrões web atuais.
- **Desenvolvimento Contínuo**: a última versão do wkhtmltopdf foi 0.12.6 em junho de 2020 e seu repositório no GitHub foi arquivado em janeiro de 2023, então não há suporte do fornecedor. O IronPDF continua a evoluir com atualizações mensais e serviço ao cliente dedicado.
### iTextSharp
- **Renderização de HTML para PDF**: o iText converte HTML através de seu add-on pdfHTML separado, um motor de layout CSS em vez de um navegador, e a linha iTextSharp 5 legada agora recebe apenas correções de segurança. O IronPDF renderiza HTML com um motor Chromium embutido no pacote principal, sem necessidade de add-on.
- **Experiência do Desenvolvedor**: a API do iText funciona no nível de objetos PDF e elementos de layout, o que é poderoso, mas significa mais código para tarefas do dia a dia. O IronPDF oferece uma API C# limpa e intuitiva, simplificando a codificação e acelerando a entrega do projeto.
- **Manutenção & Suporte**: o uso gratuito do iText está sob a AGPL, com suporte do fornecedor reservado para licenças comerciais, e o iTextSharp 5.x está no fim da vida útil, exceto por correções de segurança. O IronPDF inclui suporte profissional e atualizações mensais com cada licença.
### Aspose.PDF
- **Qualidade de Conversão**: o Aspose.PDF converte HTML com seu próprio motor de layout em vez de um navegador. Sua documentação converte uma página da web primeiro buscando o HTML com `HttpClient` em um fluxo e passando isso para `Document` com `HtmlLoadOptions`, em vez de renderizar diretamente de uma URL. Em nosso teste r/nfl abaixo, a saída estava quase vazia: o logotipo da comunidade, uma manchete e algumas caixas vazias. O motor Chromium do IronPDF renderiza uma URL diretamente, incluindo JavaScript.
- **Usabilidade da API**: a API do Aspose.PDF pode ser verbosa, enquanto o IronPDF foca em uma experiência amigável ao desenvolvedor que minimiza o tempo de configuração e aumenta a produtividade.
- **Fidelidade de Saída**: Como o IronPDF renderiza com Chromium, o PDF corresponde ao que o Chrome mostra para o mesmo HTML, o que torna o design e a depuração previsíveis para geração de PDF em grande volume.
### Syncfusion PDF
- **Complexidade da API**: o Syncfusion PDF é uma biblioteca capaz com uma superfície de API maior para aprender. O IronPDF, por outro lado, fornece uma API direta para integração rápida.
- **Motor de Renderização**: o conversor HTML do Syncfusion agora usa o motor Chromium Blink; seus motores WebKit e Internet Explorer mais antigos foram marcados como obsoletos no Essential Studio 2022 Volume 3. Em nosso teste r/nfl abaixo, a saída do Syncfusion manteve o feed principal, mas deixou de lado os painéis de navegação e comunidade, enquanto o motor Chromium do IronPDF renderizou a página inteira.
- **Além da Conversão**: o pacote do IronPDF também cobre assinaturas digitais, anotações, preenchimento de formulários e carimbos de código de barras, então a mesma biblioteca lida com o restante do fluxo de trabalho do documento.
### Comparação de Renderização
Para comparar a qualidade de conversão de HTML para PDF dessas bibliotecas, usamos uma página da comunidade Reddit, r/nfl, que contém conteúdo dinâmico, atualizações ao vivo, CSS moderno e elementos baseados em JavaScript:
`https://www.reddit.com/r/nfl/`

Aqui estão os resultados de uma única execução com as configurações padrão de cada biblioteca. Syncfusion e Aspose.PDF foram executados como builds de avaliação, por isso suas saídas carregam marcas d'água de avaliação (*clique em cada imagem para visualizá-la ampliada*):
<div class="competitors-section__wrapper">
<div class="competitors__card half">
<p class="competitors__header">IronPDF</p>
<img
class="competitors__image img-popup"
src="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-2.webp"
alt="Saída da conversão do IronPDF da página Reddit r/nfl de HTML para PDF"
data-fullsize="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-2.webp" />
<small><strong>PDF bem formatado e visualmente preciso, preservando conteúdo dinâmico e estilo moderno.</strong></small>
</div>
<div class="competitors__card half">
<p class="competitors__header">SyncFusion</p>
<img
class="competitors__image img-popup"
src="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-3.webp"
alt="Saída da conversão do Syncfusion da página Reddit r/nfl de HTML para PDF"
data-fullsize="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-3.webp" />
<small><strong>Convertido com um build de teste. O feed principal, conteúdo das postagens e estilo foram mantidos em um layout de coluna única estreita, mas a navegação à esquerda e o painel da comunidade à direita foram descartados.</strong></small>
</div>
</div>
<div class="competitors-section__wrapper">
<div class="competitors__card half">
<p class="competitors__header">Aspose.PDF</p>
<img
class="competitors__image img-popup"
src="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-4.webp"
alt="Saída da conversão do Aspose.PDF da página Reddit r/nfl de HTML para PDF"
data-fullsize="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-4.webp" />
<small><strong>Build de avaliação; exigiu baixar o HTML primeiro (Aspose.PDF carrega HTML de um fluxo em vez de uma URL). A saída estava quase vazia: o logotipo da comunidade, uma manchete e algumas caixas vazias.</strong></small>
</div>
<div class="competitors__card half">
<p class="competitors__header">Wkhtmltopdf</p>
<img
class="competitors__image img-popup"
src="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-5.webp"
alt="Saída da conversão do wkhtmltopdf da página Reddit r/nfl de HTML para PDF"
data-fullsize="/static-assets/pdf/tutorials/html-to-pdf/html-to-pdf-5.webp" />
<small><strong>O wkhtmltopdf completou a conversão, mas o resultado é o texto e as imagens da página sem seu layout, estilo, elementos dinâmicos ou interatividade. Isso torna o wkhtmltopdf inadequado para páginas da web modernas e dinâmicas.</strong></small>
</div>
</div>
[{i:(PDFsharp não possui um motor de renderização HTML, e o iText converte HTML apenas através de seu add-on pdfHTML separado, então nenhum dos dois foi incluído neste teste de renderização de navegador.)}]
### Conclusão
Para desenvolvedores .NET que buscam uma solução de PDF moderna e confiável, o IronPDF é uma escolha forte. Sua conversão de HTML para PDF baseada em Chromium, facilidade de uso, atualizações regulares e conjunto amplo de recursos o tornam uma escolha de destaque. Seja você trabalhando em um pequeno projeto ou em uma aplicação empresarial de grande escala, o IronPDF aumenta a produtividade enquanto evita os riscos associados a bibliotecas desatualizadas ou não suportadas. Projetado para aplicações comerciais, o IronPDF mantém seus projetos em uma biblioteca mantida e suportada.
Em nosso teste com uma página da web dinâmica do mundo real, o IronPDF produziu a renderização mais completa e precisa. O Syncfusion deixou de lado os painéis de navegação e comunidade. O Aspose.PDF exigiu baixar o HTML primeiro e ainda assim renderizou quase nada da página. O wkhtmltopdf produziu o texto e as imagens sem o estilo da página, um ajuste ruim para sites modernos.
Para fluxos de trabalho modernos de HTML para PDF, essa combinação de precisão de renderização e uma API pequena e legível é o que diferencia o IronPDF.
**Experimente o conjunto completo de recursos do IronPDF que converte HTML dinâmico e pesado em CSS para PDF com facilidade. Teste agora com nosso [teste gratuito](trial-license).**
<hr class="separator" />
## Assista ao Vídeo Tutorial de HTML para PDF em C#
<a name="video"></a>
Com o documento PDF, você pode visitar o seguinte link para aprender como [configurar o Chrome para abrir PDFs no navegador em vez de baixá-los](https://support.google.com/chrome/answer/114662).
!!!--LIBRARY_GET_STARTED_WITH_PRODUCT_TRIAL_EXTENDED_BLOCK--!!!
Como desenvolvedores do IronPDF, sabemos o quão importante é para a conversão de HTML para PDF produzir resultados precisos e de alta qualidade que atendam às expectativas dos clientes. Este tutorial em C# irá guiá-lo na construção de um conversor de HTML para PDF para suas aplicações, projetos e sites. Vamos desenvolver um conversor de HTML para PDF em C#, e os documentos PDF de saída do IronPDF serão pixel perfect em relação aos PDFs gerados pelo navegador Google Chrome.
Criar arquivos PDF programaticamente em .NET pode ser uma tarefa frustrante. O formato de arquivo de documento PDF foi projetado mais para impressoras do que para desenvolvedores. E o C# não possui muitas bibliotecas ou recursos adequados para geração de PDF embutidos, muitas bibliotecas precisam de configuração extra, e causam mais frustração quando exigem múltiplas linhas de código para realizar uma tarefa simples.
A ferramenta de conversão de HTML para PDF em C# que usaremos neste tutorial é o IronPDF da Iron Software, uma biblioteca de geração e edição de PDF em C# altamente popular. Esta biblioteca possui funcionalidade completa de edição e geração de PDF, funciona imediatamente, faz exatamente o que você precisa com o menor número de linhas, e possui documentação excepcional de suas 50+ funcionalidades. O IronPDF se destaca por suportar .NET 10, .NET 9, .NET 8, .NET 7, .NET 6, e .NET 5, .NET Core, .NET Standard, e .NET Framework no Windows, macOS, Linux, Docker, Azure, e AWS.
Com C# e IronPDF, a lógica para "gerar um documento PDF" ou "conversão de HTML para PDF" é direta. Devido ao avançado Chrome Renderer do IronPDF, a maior parte ou todo o design e layout do documento PDF usará ativos HTML existentes.
Este método de geração dinâmica de PDF em .NET com HTML5 funciona igualmente bem em aplicações de console, aplicações Windows Forms, WPF, bem como em sites e MVC.
O IronPDF também suporta depuração do seu HTML com o Chrome para PDFs Pixel Perfect. Um tutorial para configurar isso pode ser encontrado aqui.
O IronPDF está disponível em várias linguagens, tanto dentro quanto fora do ecossistema .NET.
No Visual Studio, clique com o botão direito no explorador de soluções do seu projeto e selecione "Gerenciar Pacotes NuGet...". A partir daí, basta procurar por IronPDF e instalar a versão mais recente na sua solução... clique em OK para qualquer caixa de diálogo que aparecer. Isso também funcionará igualmente bem em projetos VB.NET.
PM > Install-Package IronPdf
Install-Package IronPdf
IronPDF no Site do NuGet
Para uma visão completa das funcionalidades, compatibilidade e downloads do IronPDF, por favor, confira o IronPDF no site oficial do NuGet: https://www.nuget.org/packages/IronPdf
Instalar via DLL
Outra opção é instalar o DLL do IronPDF diretamente. O IronPDF pode ser baixado e instalado manualmente no projeto ou GAC a partir de https://ironpdf.com/packages/IronPdf.zip
Tutoriais de Como Fazer
Crie um PDF com uma String HTML em C# .NET
Como: Converter String HTML para PDF? É uma habilidade muito eficiente e gratificante criar um novo arquivo PDF em C#.
Podemos simplesmente usar o método ChromePdfRenderer.RenderHtmlAsPdf para transformar qualquer string HTML (HTML5) em um PDF. A renderização de HTML para PDF em C# é realizada por uma versão totalmente funcional do motor Google Chromium que acompanha o pacote NuGet do IronPDF.
using IronPdf;// ChromePdfRenderer turns HTML into a PDF using IronPDF's embedded Chrome enginevar renderer = new ChromePdfRenderer();// Render an HTML string. The result is a PdfDocument held in memoryvar pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>");// Write the PDF to diskpdf.SaveAs("pixel-perfect.pdf");
using IronPdf;
// ChromePdfRenderer turns HTML into a PDF using IronPDF's embedded Chrome engine
var renderer = new ChromePdfRenderer();
// Render an HTML string. The result is a PdfDocument held in memory
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>");
// Write the PDF to disk
pdf.SaveAs("pixel-perfect.pdf");
ImportsIronPdf' ChromePdfRenderer turns HTML into a PDF using IronPDF's embedded Chrome engineDim renderer = New ChromePdfRenderer()' Render an HTML string. The result is a PdfDocument held in memoryDim pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>")' Write the PDF to diskpdf.SaveAs("pixel-perfect.pdf")
Imports IronPdf
' ChromePdfRenderer turns HTML into a PDF using IronPDF's embedded Chrome engine
Dim renderer = New ChromePdfRenderer()
' Render an HTML string. The result is a PdfDocument held in memory
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>")
' Write the PDF to disk
pdf.SaveAs("pixel-perfect.pdf")
RenderHtmlAsPdf suporta totalmente HTML5, CSS3, JavaScript e imagens. Se esses ativos estiverem em um disco rígido, podemos querer definir o segundo parâmetro de RenderHtmlAsPdf para o diretório contendo os ativos. Este método retorna um objeto PdfDocument, que é uma classe usada para armazenar informações de PDF.
O IronPDF renderizará seu HTML exatamente como aparece no Chrome
Temos um tutorial completo dedicado a permitir que você configure o Chrome para depuração completa de HTML para garantir que as alterações que você vê ao editar seu HTML, CSS e JavaScript sejam pixel-perfect iguais ao PDF de saída do IronPDF quando você escolher renderizar. Por favor, encontre o tutorial aqui: Como Depurar HTML no Chrome para Criar PDFs Pixel Perfect.
Caminho Base URL (o argumento BaseUrlOrPath):
using IronPdf;var renderer = new ChromePdfRenderer();// The second argument is the base path. Relative URLs in the HTML (the image// below, but also stylesheets, scripts and fonts) are resolved against it.var pdf = renderer.RenderHtmlAsPdf("<img src='image1.png'/>", @"C:\MyProject\Assets\");pdf.SaveAs(@"C:\MyProject\Assets\output.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// The second argument is the base path. Relative URLs in the HTML (the image
// below, but also stylesheets, scripts and fonts) are resolved against it.
var pdf = renderer.RenderHtmlAsPdf("<img src='image1.png'/>", @"C:\MyProject\Assets\");
pdf.SaveAs(@"C:\MyProject\Assets\output.pdf");
Dim renderer = New ChromePdfRenderer()' The second argument is the base path. Relative URLs in the HTML (the image' below, but also stylesheets, scripts and fonts) are resolved against it.Dim pdf = renderer.RenderHtmlAsPdf("<img src='image1.png'/>", "C:\MyProject\Assets\")pdf.SaveAs("C:\MyProject\Assets\output.pdf")
Dim renderer = New ChromePdfRenderer()
' The second argument is the base path. Relative URLs in the HTML (the image
' below, but also stylesheets, scripts and fonts) are resolved against it.
Dim pdf = renderer.RenderHtmlAsPdf("<img src='image1.png'/>", "C:\MyProject\Assets\")
pdf.SaveAs("C:\MyProject\Assets\output.pdf")
Todas as folhas de estilo CSS, imagens e arquivos JavaScript referenciados serão relativos a esse caminho base e podem ser mantidos em uma estrutura organizada e lógica. Você também pode, é claro, optar por referenciar imagens, folhas de estilo e ativos online, incluindo web-fonts como Google Fonts e até mesmo jQuery.
Exporte um PDF Usando URL Existente | URL para PDF
Renderizar URLs existentes como PDFs com C# é muito eficiente e intuitivo. Isso também permite que as equipes dividam o trabalho de design de PDF e renderização de PDF no back-end entre várias equipes.
Vamos renderizar uma página do Wikipedia.com no exemplo a seguir:
using IronPdf;var renderer = new ChromePdfRenderer();// Render a live web page straight from its URLvar pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF");// The PDF is written next to the executablepdf.SaveAs("wikipedia.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Render a live web page straight from its URL
var pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF");
// The PDF is written next to the executable
pdf.SaveAs("wikipedia.pdf");
ImportsIronPdfDim renderer = New ChromePdfRenderer()' Render a live web page straight from its URLDim pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF")' The PDF is written next to the executablepdf.SaveAs("wikipedia.pdf")
Imports IronPdf
Dim renderer = New ChromePdfRenderer()
' Render a live web page straight from its URL
Dim pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/PDF")
' The PDF is written next to the executable
pdf.SaveAs("wikipedia.pdf")
Você notará que hiperlinks e até mesmo formulários HTML são preservados dentro do PDF gerado pelo nosso código C#.
Ao renderizar páginas da web existentes, temos alguns truques que podemos querer aplicar:
CSS de Impressão e Tela
Os tipos de mídia CSS permitem que uma página carregue estilos separados para impressão e tela. Podemos instruir o IronPDF a renderizar o CSS de "Impressão", que geralmente é mais simples. Por padrão, os estilos CSS de "Tela" serão renderizados, o que corresponde ao que você vê no navegador.
using IronPdf;using IronPdf.Rendering;var renderer = new ChromePdfRenderer();// Choose which CSS media type the page is rendered with.// Screen (the default) renders the page as a browser displays it;// Print applies the page's @media print rules instead.// renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen;renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Choose which CSS media type the page is rendered with.
// Screen (the default) renders the page as a browser displays it;
// Print applies the page's @media print rules instead.
// renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen;
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
ImportsIronPdfImportsIronPdf.RenderingDim renderer = New ChromePdfRenderer()' Choose which CSS media type the page is rendered with.' Screen (the default) renders the page as a browser displays it;' Print applies the page's @media print rules instead.' renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screenrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
Imports IronPdf
Imports IronPdf.Rendering
Dim renderer = New ChromePdfRenderer()
' Choose which CSS media type the page is rendered with.
' Screen (the default) renders the page as a browser displays it;
' Print applies the page's @media print rules instead.
' renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
O IronPDF suporta JavaScript, jQuery e até mesmo AJAX. Podemos precisar instruir o IronPDF a esperar pelo JS ou ajax para terminar de executar antes de renderizar uma captura de tela da nossa página da web.
using IronPdf;var renderer = new ChromePdfRenderer();// Let the page's JavaScript run before the snapshot is takenrenderer.RenderingOptions.EnableJavaScript = true;// Give scripts and AJAX calls 500 milliseconds to finish before rendering.// For event-driven pages, WaitFor.NetworkIdle() or WaitFor.JavaScript() wait// for a signal instead of a fixed delay.renderer.RenderingOptions.WaitFor.RenderDelay(500);
using IronPdf;
var renderer = new ChromePdfRenderer();
// Let the page's JavaScript run before the snapshot is taken
renderer.RenderingOptions.EnableJavaScript = true;
// Give scripts and AJAX calls 500 milliseconds to finish before rendering.
// For event-driven pages, WaitFor.NetworkIdle() or WaitFor.JavaScript() wait
// for a signal instead of a fixed delay.
renderer.RenderingOptions.WaitFor.RenderDelay(500);
Dim renderer = New ChromePdfRenderer()' Let the page's JavaScript run before the snapshot is takenrenderer.RenderingOptions.EnableJavaScript = True' Give scripts and AJAX calls 500 milliseconds to finish before rendering.' For event-driven pages, WaitFor.NetworkIdle() or WaitFor.JavaScript() wait' for a signal instead of a fixed delay.renderer.RenderingOptions.WaitFor.RenderDelay(500)
Dim renderer = New ChromePdfRenderer()
' Let the page's JavaScript run before the snapshot is taken
renderer.RenderingOptions.EnableJavaScript = True
' Give scripts and AJAX calls 500 milliseconds to finish before rendering.
' For event-driven pages, WaitFor.NetworkIdle() or WaitFor.JavaScript() wait
' for a signal instead of a fixed delay.
renderer.RenderingOptions.WaitFor.RenderDelay(500)
using IronPdf;var renderer = new ChromePdfRenderer();// The chart is drawn by JavaScript, so let it run and give it a moment to finishrenderer.RenderingOptions.EnableJavaScript = true;renderer.RenderingOptions.WaitFor.RenderDelay(500);// Render the d3.js chord-diagram documentation page, whose charts are drawn by JavaScriptvar pdf = renderer.RenderUrlAsPdf("https://d3js.org/d3-chord");pdf.SaveAs("chart.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// The chart is drawn by JavaScript, so let it run and give it a moment to finish
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay(500);
// Render the d3.js chord-diagram documentation page, whose charts are drawn by JavaScript
var pdf = renderer.RenderUrlAsPdf("https://d3js.org/d3-chord");
pdf.SaveAs("chart.pdf");
ImportsIronPdfDim renderer = New ChromePdfRenderer()' The chart is drawn by JavaScript, so let it run and give it a moment to finishrenderer.RenderingOptions.EnableJavaScript = Truerenderer.RenderingOptions.WaitFor.RenderDelay(500)' Render the d3.js chord-diagram documentation page, whose charts are drawn by JavaScriptDim pdf = renderer.RenderUrlAsPdf("https://d3js.org/d3-chord")pdf.SaveAs("chart.pdf")
Imports IronPdf
Dim renderer = New ChromePdfRenderer()
' The chart is drawn by JavaScript, so let it run and give it a moment to finish
renderer.RenderingOptions.EnableJavaScript = True
renderer.RenderingOptions.WaitFor.RenderDelay(500)
' Render the d3.js chord-diagram documentation page, whose charts are drawn by JavaScript
Dim pdf = renderer.RenderUrlAsPdf("https://d3js.org/d3-chord")
pdf.SaveAs("chart.pdf")
CSS Responsivo
HTML para PDF usando CSS responsivo em .NET! Páginas da web responsivas são projetadas para serem visualizadas em um navegador. O IronPDF não abre uma janela de navegador real dentro do sistema operacional do seu servidor. Sem uma viewport de navegador, layouts responsivos podem voltar ao seu ponto de interrupção mais estreito.
Recomendamos usar tipos de mídia CSS de Impressão para navegar por esse problema. O CSS de impressão normalmente não deve ser responsivo.
using IronPdf;using IronPdf.Rendering;var renderer = new ChromePdfRenderer();// Responsive layouts are designed for a browser viewport, so render the page's// print stylesheet instead of its screen stylesheetrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Responsive layouts are designed for a browser viewport, so render the page's
// print stylesheet instead of its screen stylesheet
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
ImportsIronPdfImportsIronPdf.RenderingDim renderer As New ChromePdfRenderer()' Responsive layouts are designed for a browser viewport, so render the page's' print stylesheet instead of its screen stylesheetrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
Imports IronPdf
Imports IronPdf.Rendering
Dim renderer As New ChromePdfRenderer()
' Responsive layouts are designed for a browser viewport, so render the page's
' print stylesheet instead of its screen stylesheet
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
Gere um PDF a partir de uma Página HTML
Também podemos renderizar qualquer página HTML para PDF em nosso disco rígido. Todos os ativos relativos, como CSS, imagens e js, serão renderizados como se o arquivo tivesse sido aberto usando o protocolo file://.
using IronPdf;var renderer = new ChromePdfRenderer();// Render an HTML file from disk. Relative CSS, image and script paths// resolve against the file's own folder, as if opened with file://var pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html");pdf.SaveAs("Invoice.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Render an HTML file from disk. Relative CSS, image and script paths
// resolve against the file's own folder, as if opened with file://
var pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html");
pdf.SaveAs("Invoice.pdf");
Dim renderer = New ChromePdfRenderer()' Render an HTML file from disk. Relative CSS, image and script paths' resolve against the file's own folder, as if opened with file://Dim pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html")pdf.SaveAs("Invoice.pdf")
Dim renderer = New ChromePdfRenderer()
' Render an HTML file from disk. Relative CSS, image and script paths
' resolve against the file's own folder, as if opened with file://
Dim pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html")
pdf.SaveAs("Invoice.pdf")
Este método tem a vantagem de permitir que o desenvolvedor teste o conteúdo HTML em um navegador durante o desenvolvimento. Recomendamos o Chrome, pois é o navegador da web no qual o motor de renderização do IronPDF é baseado.
Cabeçalhos e rodapés podem ser adicionados aos PDFs quando eles são renderizados, ou a arquivos PDF existentes usando o IronPDF.
Com o IronPDF, cabeçalhos e rodapés podem conter conteúdo simples baseado em texto usando a classe TextHeaderFooter - ou com imagens e conteúdo HTML rico usando a classe HtmlHeaderFooter.
using IronPdf;using IronPdf.Rendering;// Create a PDF from an existing HTML file with rendering options set up frontvar renderer = new ChromePdfRenderer{RenderingOptions = new ChromePdfRenderOptions { // Margins are in millimetersMarginTop = 50,MarginBottom = 50, // Render the page's print stylesheetCssMediaType = PdfCssMediaType.Print, // Plain-text header: the document title, centered, above a divider lineTextHeader = new TextHeaderFooter {CenterText = "{pdf-title}",DrawDividerLine = true,FontSize = 16 }, // Plain-text footer: date and time on the left, page numbers on the rightTextFooter = new TextHeaderFooter {LeftText = "{date} {time}",RightText = "Page {page} of {total-pages}",DrawDividerLine = true,FontSize = 14 } }};var pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html");pdf.SaveAs("Invoice.pdf");// Open the result in the default PDF viewerSystem.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo{FileName = "Invoice.pdf",UseShellExecute = true});
using IronPdf;
using IronPdf.Rendering;
// Create a PDF from an existing HTML file with rendering options set up front
var renderer = new ChromePdfRenderer
{
RenderingOptions = new ChromePdfRenderOptions
{
// Margins are in millimeters
MarginTop = 50,
MarginBottom = 50,
// Render the page's print stylesheet
CssMediaType = PdfCssMediaType.Print,
// Plain-text header: the document title, centered, above a divider line
TextHeader = new TextHeaderFooter
{
CenterText = "{pdf-title}",
DrawDividerLine = true,
FontSize = 16
},
// Plain-text footer: date and time on the left, page numbers on the right
TextFooter = new TextHeaderFooter
{
LeftText = "{date} {time}",
RightText = "Page {page} of {total-pages}",
DrawDividerLine = true,
FontSize = 14
}
}
};
var pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html");
pdf.SaveAs("Invoice.pdf");
// Open the result in the default PDF viewer
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo
{
FileName = "Invoice.pdf",
UseShellExecute = true
});
ImportsIronPdfImportsIronPdf.Rendering' Create a PDF from an existing HTML file with rendering options set up frontDim renderer = New ChromePdfRendererWith { .RenderingOptions = New ChromePdfRenderOptionsWith { ' Margins are in millimeters .MarginTop = 50, .MarginBottom = 50, ' Render the page's print stylesheet .CssMediaType = PdfCssMediaType.Print, ' Plain-text header: the document title, centered, above a divider line .TextHeader = New TextHeaderFooterWith { .CenterText = "{pdf-title}", .DrawDividerLine = True, .FontSize = 16 }, ' Plain-text footer: date and time on the left, page numbers on the right .TextFooter = New TextHeaderFooterWith { .LeftText = "{date} {time}", .RightText = "Page {page} of {total-pages}", .DrawDividerLine = True, .FontSize = 14 } }}Dim pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html")pdf.SaveAs("Invoice.pdf")' Open the result in the default PDF viewerSystem.Diagnostics.Process.Start(New System.Diagnostics.ProcessStartInfoWith { .FileName = "Invoice.pdf", .UseShellExecute = True})
Imports IronPdf
Imports IronPdf.Rendering
' Create a PDF from an existing HTML file with rendering options set up front
Dim renderer = New ChromePdfRenderer With {
.RenderingOptions = New ChromePdfRenderOptions With {
' Margins are in millimeters
.MarginTop = 50,
.MarginBottom = 50,
' Render the page's print stylesheet
.CssMediaType = PdfCssMediaType.Print,
' Plain-text header: the document title, centered, above a divider line
.TextHeader = New TextHeaderFooter With {
.CenterText = "{pdf-title}",
.DrawDividerLine = True,
.FontSize = 16
},
' Plain-text footer: date and time on the left, page numbers on the right
.TextFooter = New TextHeaderFooter With {
.LeftText = "{date} {time}",
.RightText = "Page {page} of {total-pages}",
.DrawDividerLine = True,
.FontSize = 14
}
}
}
Dim pdf = renderer.RenderHtmlFileAsPdf("Assets/TestInvoice1.html")
pdf.SaveAs("Invoice.pdf")
' Open the result in the default PDF viewer
System.Diagnostics.Process.Start(New System.Diagnostics.ProcessStartInfo With {
.FileName = "Invoice.pdf",
.UseShellExecute = True
})
A classe HtmlHeaderFooter permite que cabeçalhos e rodapés ricos sejam gerados usando conteúdo HTML5 que pode até incluir imagens e folhas de estilo.
using IronPdf;var renderer = new ChromePdfRenderer();// An HTML footer can carry markup, styles and images.// {page} and {total-pages} are filled in for every page.renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter{HtmlFragment = "<div style='text-align:right'><em style='color:pink'>page {page} of {total-pages}</em></div>"};
using IronPdf;
var renderer = new ChromePdfRenderer();
// An HTML footer can carry markup, styles and images.
// {page} and {total-pages} are filled in for every page.
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align:right'><em style='color:pink'>page {page} of {total-pages}</em></div>"
};
Dim renderer = New ChromePdfRenderer()' An HTML footer can carry markup, styles and images.' {page} and {total-pages} are filled in for every page.renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooterWith { .HtmlFragment = "<div style='text-align:right'><em style='color:pink'>page {page} of {total-pages}</em></div>"}
Dim renderer = New ChromePdfRenderer()
' An HTML footer can carry markup, styles and images.
' {page} and {total-pages} are filled in for every page.
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
.HtmlFragment = "<div style='text-align:right'><em style='color:pink'>page {page} of {total-pages}</em></div>"
}
Dados Dinâmicos em Cabeçalhos e Rodapés de PDF
Podemos "mesclar" conteúdo no texto e até mesmo no HTML de cabeçalhos e rodapés usando marcadores como:
{page} para o número da página atual
{total-pages} para o total de páginas no PDF
{url} para a URL do PDF renderizado se renderizado a partir de uma página da web
{date} para a data de hoje
{time} para a hora atual
{html-title} para o <title> do documento HTML renderizado
{pdf-title} para o título do documento, que pode ser definido via ChromePdfRenderOptions
Configurações de Conversão de HTML para PDF em C#
Existem muitas nuances sobre como nossos usuários e clientes podem esperar que o conteúdo do PDF seja renderizado.
A classe ChromePdfRenderer contém uma propriedade RenderingOptions que pode ser usada para definir essas opções.
Por exemplo, podemos querer escolher aceitar apenas diretivas CSS3 de "print":
using IronPdf;using IronPdf.Rendering;var renderer = new ChromePdfRenderer();// Render the page's @media print CSS rather than its screen stylesrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;renderer.RenderHtmlAsPdf("<html><body><h1>Hello, World!</h1></body></html>").SaveAs("Output.pdf");
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Render the page's @media print CSS rather than its screen styles
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
renderer.RenderHtmlAsPdf("<html><body><h1>Hello, World!</h1></body></html>").SaveAs("Output.pdf");
ImportsIronPdfImportsIronPdf.RenderingDim renderer = New ChromePdfRenderer()' Render the page's @media print CSS rather than its screen stylesrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Printrenderer.RenderHtmlAsPdf("<html><body><h1>Hello, World!</h1></body></html>").SaveAs("Output.pdf")
Imports IronPdf
Imports IronPdf.Rendering
Dim renderer = New ChromePdfRenderer()
' Render the page's @media print CSS rather than its screen styles
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
renderer.RenderHtmlAsPdf("<html><body><h1>Hello, World!</h1></body></html>").SaveAs("Output.pdf")
Também podemos querer alterar o tamanho das margens de impressão para criar mais espaço em branco na página, para dar espaço para cabeçalhos ou rodapés grandes, ou até mesmo definir margens zero para impressão comercial de brochuras ou pôsteres:
using IronPdf;var renderer = new ChromePdfRenderer();// Page margins in millimeters. Larger margins leave room for headers and// footers; set them to 0 for edge-to-edge brochures and posters.renderer.RenderingOptions.MarginTop = 50;renderer.RenderingOptions.MarginBottom = 50;renderer.RenderingOptions.MarginLeft = 20;renderer.RenderingOptions.MarginRight = 20;
using IronPdf;
var renderer = new ChromePdfRenderer();
// Page margins in millimeters. Larger margins leave room for headers and
// footers; set them to 0 for edge-to-edge brochures and posters.
renderer.RenderingOptions.MarginTop = 50;
renderer.RenderingOptions.MarginBottom = 50;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
ImportsIronPdfDim renderer = New ChromePdfRenderer()' Page margins in millimeters. Larger margins leave room for headers and' footers; set them to 0 for edge-to-edge brochures and posters.renderer.RenderingOptions.MarginTop = 50renderer.RenderingOptions.MarginBottom = 50renderer.RenderingOptions.MarginLeft = 20renderer.RenderingOptions.MarginRight = 20
Imports IronPdf
Dim renderer = New ChromePdfRenderer()
' Page margins in millimeters. Larger margins leave room for headers and
' footers; set them to 0 for edge-to-edge brochures and posters.
renderer.RenderingOptions.MarginTop = 50
renderer.RenderingOptions.MarginBottom = 50
renderer.RenderingOptions.MarginLeft = 20
renderer.RenderingOptions.MarginRight = 20
Podemos querer ativar ou desativar imagens de fundo de elementos HTML:
using IronPdf;var renderer = new ChromePdfRenderer();// Include CSS background colors and images in the PDF (set false to drop them)renderer.RenderingOptions.PrintHtmlBackgrounds = true;var pdf = renderer.RenderHtmlAsPdf("<h1 style='background:#eee'>Hello, PDF!</h1>");pdf.SaveAs("output.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Include CSS background colors and images in the PDF (set false to drop them)
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
var pdf = renderer.RenderHtmlAsPdf("<h1 style='background:#eee'>Hello, PDF!</h1>");
pdf.SaveAs("output.pdf");
ImportsIronPdfDim renderer = New ChromePdfRenderer()' Include CSS background colors and images in the PDF (set false to drop them)renderer.RenderingOptions.PrintHtmlBackgrounds = TrueDim pdf = renderer.RenderHtmlAsPdf("<h1 style='background:#eee'>Hello, PDF!</h1>")pdf.SaveAs("output.pdf")
Imports IronPdf
Dim renderer = New ChromePdfRenderer()
' Include CSS background colors and images in the PDF (set false to drop them)
renderer.RenderingOptions.PrintHtmlBackgrounds = True
Dim pdf = renderer.RenderHtmlAsPdf("<h1 style='background:#eee'>Hello, PDF!</h1>")
pdf.SaveAs("output.pdf")
Também é possível definir nossos PDFs de saída para serem renderizados em qualquer tamanho de papel virtual - incluindo tamanhos retrato e paisagem e até mesmo tamanhos personalizados que podem ser definidos em milímetros ou polegadas.
using IronPdf;using IronPdf.Rendering;var renderer = new ChromePdfRenderer();// Standard paper sizes and orientationrenderer.RenderingOptions.PaperSize = PdfPaperSize.A4;renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;// Or a custom size, in millimeters or inches// renderer.RenderingOptions.SetCustomPaperSizeinMilimeters(210, 297);// renderer.RenderingOptions.SetCustomPaperSizeInInches(8.5, 11);
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
// Standard paper sizes and orientation
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
// Or a custom size, in millimeters or inches
// renderer.RenderingOptions.SetCustomPaperSizeinMilimeters(210, 297);
// renderer.RenderingOptions.SetCustomPaperSizeInInches(8.5, 11);
ImportsIronPdfImportsIronPdf.RenderingDim renderer = New ChromePdfRenderer()' Standard paper sizes and orientationrenderer.RenderingOptions.PaperSize = PdfPaperSize.A4renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape' Or a custom size, in millimeters or inches' renderer.RenderingOptions.SetCustomPaperSizeinMilimeters(210, 297)' renderer.RenderingOptions.SetCustomPaperSizeInInches(8.5, 11)
Imports IronPdf
Imports IronPdf.Rendering
Dim renderer = New ChromePdfRenderer()
' Standard paper sizes and orientation
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
' Or a custom size, in millimeters or inches
' renderer.RenderingOptions.SetCustomPaperSizeinMilimeters(210, 297)
' renderer.RenderingOptions.SetCustomPaperSizeInInches(8.5, 11)
Minha biblioteca favorita desse tipo é o IronPDF. Ele permite a manipulação rápida e eficiente de arquivos PDF. Além disso, possui muitos recursos valiosos, como a exportação para o formato PDF/A e a assinatura digital de documentos PDF.
Com o IronOCR, podemos economizar US$ 40.000 por ano em processamento manual, ao mesmo tempo que aumentamos a produtividade e liberamos recursos para tarefas de alto impacto. Eu o recomendo fortemente.
Modelar ou "criar em lote" PDFs é um requisito comum para desenvolvedores de Internet e sites.
Em vez de modelar um documento PDF em si, com o IronPDF podemos modelar nosso HTML usando tecnologias existentes e bem testadas. Quando o modelo HTML é combinado com dados de uma query-string ou banco de dados, acabamos com um documento PDF gerado dinamicamente.
No caso mais simples, usar o método C# String.Format é eficaz para amostras básicas.
using IronPdf;var renderer = new ChromePdfRenderer();// Insert a value into an HTML template with string.Formatstring html = string.Format("<h1>Hello {0}!</h1>", "World");var pdf = renderer.RenderHtmlAsPdf(html);pdf.SaveAs("Hello.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// Insert a value into an HTML template with string.Format
string html = string.Format("<h1>Hello {0}!</h1>", "World");
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("Hello.pdf");
Dim renderer As New ChromePdfRenderer()' Insert a value into an HTML template with string.FormatDim html AsString = String.Format("<h1>Hello {0}!</h1>", "World")Dim pdf = renderer.RenderHtmlAsPdf(html)pdf.SaveAs("Hello.pdf")
Dim renderer As New ChromePdfRenderer()
' Insert a value into an HTML template with string.Format
Dim html As String = String.Format("<h1>Hello {0}!</h1>", "World")
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("Hello.pdf")
Se o arquivo HTML for mais longo, muitas vezes podemos usar marcadores arbitrários como [[NAME]] e substituí-los por dados reais mais tarde.
O exemplo a seguir criará 3 PDFs, cada um personalizado para um usuário.
using IronPdf;var renderer = new ChromePdfRenderer();// A template with a placeholder to replacevar htmlTemplate = "<p>[[NAME]]</p>";var names = new[] { "John", "James", "Jenny" };// One personalized PDF per nameforeach (var name in names){ var htmlInstance = htmlTemplate.Replace("[[NAME]]", name); var pdf = renderer.RenderHtmlAsPdf(htmlInstance); pdf.SaveAs(name + ".pdf");}
using IronPdf;
var renderer = new ChromePdfRenderer();
// A template with a placeholder to replace
var htmlTemplate = "<p>[[NAME]]</p>";
var names = new[] { "John", "James", "Jenny" };
// One personalized PDF per name
foreach (var name in names)
{
var htmlInstance = htmlTemplate.Replace("[[NAME]]", name);
var pdf = renderer.RenderHtmlAsPdf(htmlInstance);
pdf.SaveAs(name + ".pdf");
}
ImportsIronPdfDim renderer = New ChromePdfRenderer()' A template with a placeholder to replaceDim htmlTemplate = "<p>[[NAME]]</p>"Dim names = New String() {"John", "James", "Jenny"}' One personalized PDF per nameFor Each name In names Dim htmlInstance = htmlTemplate.Replace("[[NAME]]", name) Dim pdf = renderer.RenderHtmlAsPdf(htmlInstance) pdf.SaveAs(name & ".pdf")Next
Imports IronPdf
Dim renderer = New ChromePdfRenderer()
' A template with a placeholder to replace
Dim htmlTemplate = "<p>[[NAME]]</p>"
Dim names = New String() {"John", "James", "Jenny"}
' One personalized PDF per name
For Each name In names
Dim htmlInstance = htmlTemplate.Replace("[[NAME]]", name)
Dim pdf = renderer.RenderHtmlAsPdf(htmlInstance)
pdf.SaveAs(name & ".pdf")
Next
Modelagem Avançada Com Handlebars.NET
Um método sofisticado para mesclar dados C# com HTML para geração de PDF é usar a linguagem de modelagem Handlebars.
Handlebars torna possível criar HTML dinâmico a partir de objetos e instâncias de classe C#, incluindo registros de banco de dados. Handlebars é particularmente eficaz onde uma consulta pode retornar um número desconhecido de linhas, como na geração de uma fatura.
using HandlebarsDotNet;// A Handlebars template with two placeholdersvar source = @"<div class=""entry""> <h1>{{title}}</h1> <div class=""body""> {{body}} </div> </div>";// Compile it once, then fill it with any object that has matching propertiesvar template = Handlebars.Compile(source);var data = new { title = "My new post", body = "This is my first post!" };string html = template(data);// html now contains://// <div class="entry">// <h1>My new post</h1>// <div class="body">// This is my first post!// </div>// </div>
using HandlebarsDotNet;
// A Handlebars template with two placeholders
var source =
@"<div class=""entry"">
<h1>{{title}}</h1>
<div class=""body"">
{{body}}
</div>
</div>";
// Compile it once, then fill it with any object that has matching properties
var template = Handlebars.Compile(source);
var data = new { title = "My new post", body = "This is my first post!" };
string html = template(data);
// html now contains:
//
// <div class="entry">
// <h1>My new post</h1>
// <div class="body">
// This is my first post!
// </div>
// </div>
ImportsHandlebarsDotNet' A Handlebars template with two placeholdersDim source = "<div class=""entry""> <h1>{{title}}</h1> <div class=""body""> {{body}} </div> </div>"' Compile it once, then fill it with any object that has matching propertiesDim template = Handlebars.Compile(source)Dim data = New With {.title = "My new post", .body = "This is my first post!"}Dim html AsString = template(data)' html now contains:'' <div class="entry">' <h1>My new post</h1>' <div class="body">' This is my first post!' </div>' </div>
Imports HandlebarsDotNet
' A Handlebars template with two placeholders
Dim source = "<div class=""entry"">
<h1>{{title}}</h1>
<div class=""body"">
{{body}}
</div>
</div>"
' Compile it once, then fill it with any object that has matching properties
Dim template = Handlebars.Compile(source)
Dim data = New With {.title = "My new post", .body = "This is my first post!"}
Dim html As String = template(data)
' html now contains:
'
' <div class="entry">
' <h1>My new post</h1>
' <div class="body">
' This is my first post!
' </div>
' </div>
Para renderizar este HTML, podemos simplesmente usar o método RenderHtmlAsPdf.
using HandlebarsDotNet;using IronPdf;// Fill the Handlebars template, then render the resulting HTMLvar template = Handlebars.Compile("<h1>{{title}}</h1><p>{{body}}</p>");string html = template(new { title = "My new post", body = "This is my first post!" });var renderer = new ChromePdfRenderer();var pdf = renderer.RenderHtmlAsPdf(html);pdf.SaveAs("Handlebars.pdf");
using HandlebarsDotNet;
using IronPdf;
// Fill the Handlebars template, then render the resulting HTML
var template = Handlebars.Compile("<h1>{{title}}</h1><p>{{body}}</p>");
string html = template(new { title = "My new post", body = "This is my first post!" });
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("Handlebars.pdf");
ImportsHandlebarsDotNetImportsIronPdf' Fill the Handlebars template, then render the resulting HTMLDim template = Handlebars.Compile("<h1>{{title}}</h1><p>{{body}}</p>")Dim html AsString = template(New With {.title = "My new post", .body = "This is my first post!"})Dim renderer = New ChromePdfRenderer()Dim pdf = renderer.RenderHtmlAsPdf(html)pdf.SaveAs("Handlebars.pdf")
Imports HandlebarsDotNet
Imports IronPdf
' Fill the Handlebars template, then render the resulting HTML
Dim template = Handlebars.Compile("<h1>{{title}}</h1><p>{{body}}</p>")
Dim html As String = template(New With {.title = "My new post", .body = "This is my first post!"})
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("Handlebars.pdf")
Você pode aprender mais sobre a linguagem de modelagem Handlebars e sua implementação em C# no GitHub.
Adicionar Quebras de Página usando HTML5
Um requisito comum em um documento PDF é a paginação. Os desenvolvedores precisam controlar onde as páginas do PDF começam e terminam para um layout limpo e legível.
A maneira mais fácil de fazer isso é com um truque CSS menos conhecido que renderizará uma quebra de página em qualquer documento HTML impresso.
O HTML fornecido funciona, mas dificilmente é uma prática recomendada. Aconselhamos ajustar o atributo de mídia como no exemplo a seguir. Uma maneira tão limpa e organizada de dispor conteúdo HTML de várias páginas. Como o IronPDF renderiza com o tipo de mídia screen por padrão, uma folha de estilo media="print" só é aplicada quando RenderingOptions.CssMediaType é definido como PdfCssMediaType.Print (veja Configurações de Conversão acima).
O IronPDF facilita a Mesclagem de documentos PDF. O uso mais comum dessa técnica é adicionar uma página de capa ou página final a um documento PDF renderizado existente.
Para fazer isso, primeiro renderizamos uma página de capa e, em seguida, usamos o método estático PdfDocument.Merge() para combinar os dois documentos.
using IronPdf;var renderer = new ChromePdfRenderer();// The document body, rendered from a web pagevar pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf/");// Prepend an existing PDF as the cover page. Merge returns a new document.var cover = PdfDocument.FromFile("CoverPage.pdf");var pdfMerged = PdfDocument.Merge(cover, pdf);pdfMerged.SaveAs("Combined.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// The document body, rendered from a web page
var pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf/");
// Prepend an existing PDF as the cover page. Merge returns a new document.
var cover = PdfDocument.FromFile("CoverPage.pdf");
var pdfMerged = PdfDocument.Merge(cover, pdf);
pdfMerged.SaveAs("Combined.pdf");
ImportsIronPdfDim renderer = New ChromePdfRenderer()' The document body, rendered from a web pageDim pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf/")' Prepend an existing PDF as the cover page. Merge returns a new document.Dim cover = PdfDocument.FromFile("CoverPage.pdf")Dim pdfMerged = PdfDocument.Merge(cover, pdf)pdfMerged.SaveAs("Combined.pdf")
Imports IronPdf
Dim renderer = New ChromePdfRenderer()
' The document body, rendered from a web page
Dim pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf/")
' Prepend an existing PDF as the cover page. Merge returns a new document.
Dim cover = PdfDocument.FromFile("CoverPage.pdf")
Dim pdfMerged = PdfDocument.Merge(cover, pdf)
pdfMerged.SaveAs("Combined.pdf")
Um recurso final de PDF em C# que o IronPDF suporta é adicionar uma marca d'água aos documentos. Isso pode ser usado para adicionar um aviso a cada página de que um documento é "confidencial" ou uma "amostra".
using IronPdf;using IronPdf.Editing;var renderer = new ChromePdfRenderer();var pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf");// Stamp every page with a red "SAMPLE" in the middle, rotated 30 degrees at 50% opacity.// The watermark is HTML, so any markup, styling or image can be used.pdf.ApplyWatermark( "<h2 style='color:red; font-size:50px'>SAMPLE</h2>", rotation: 30, opacity: 50, verticalAlignment: VerticalAlignment.Middle, horizontalAlignment: HorizontalAlignment.Center);pdf.SaveAs(@"C:\Path\To\Watermarked.pdf");
using IronPdf;
using IronPdf.Editing;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf");
// Stamp every page with a red "SAMPLE" in the middle, rotated 30 degrees at 50% opacity.
// The watermark is HTML, so any markup, styling or image can be used.
pdf.ApplyWatermark(
"<h2 style='color:red; font-size:50px'>SAMPLE</h2>",
rotation: 30,
opacity: 50,
verticalAlignment: VerticalAlignment.Middle,
horizontalAlignment: HorizontalAlignment.Center);
pdf.SaveAs(@"C:\Path\To\Watermarked.pdf");
ImportsIronPdfImportsIronPdf.EditingDim renderer = New ChromePdfRenderer()Dim pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf")' Stamp every page with a red "SAMPLE" in the middle, rotated 30 degrees at 50% opacity.' The watermark is HTML, so any markup, styling or image can be used.pdf.ApplyWatermark("<h2 style='color:red; font-size:50px'>SAMPLE</h2>", rotation:=30, opacity:=50, verticalAlignment:=VerticalAlignment.Middle, horizontalAlignment:=HorizontalAlignment.Center)pdf.SaveAs("C:\Path\To\Watermarked.pdf")
Imports IronPdf
Imports IronPdf.Editing
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf")
' Stamp every page with a red "SAMPLE" in the middle, rotated 30 degrees at 50% opacity.
' The watermark is HTML, so any markup, styling or image can be used.
pdf.ApplyWatermark("<h2 style='color:red; font-size:50px'>SAMPLE</h2>", rotation:=30, opacity:=50, verticalAlignment:=VerticalAlignment.Middle, horizontalAlignment:=HorizontalAlignment.Center)
pdf.SaveAs("C:\Path\To\Watermarked.pdf")
O código fonte gratuito do conversor de HTML para PDF em C# completo para este tutorial está disponível para download como um arquivo de projeto do Visual Studio 2022 compactado. Ele usará seu motor de renderização para gerar objetos de documento PDF em C#.
O IronPDF é uma biblioteca de PDF poderosa e completa, adaptada para desenvolvedores modernos de .NET. Com conversão nativa de HTML para PDF alimentada por um motor Chromium avançado, uma API intuitiva e atualizações regulares, ele simplifica o desenvolvimento enquanto garante resultados de alta qualidade. Vamos dar uma olhada mais de perto em como ele se compara a outras ferramentas:
PDFSharp
Recursos Principais: PDFsharp é uma biblioteca de código aberto (MIT) para criar e editar documentos PDF em código gerenciado. Não possui um motor de renderização HTML, então converter conteúdo da web para PDF precisa de um renderizador de terceiros separado.
Padrões Modernos: O IronPDF aproveita as tecnologias web modernas, incluindo HTML, CSS e JavaScript, através de seu motor baseado em Chromium, garantindo que os PDFs mantenham uma aparência e sensação contemporâneas.
Suporte & Atualizações: PDFsharp é de código aberto e lança uma versão a cada poucos meses, com suporte comercial vendido separadamente por seu mantenedor. O IronPDF lança atualizações mensais e patches de segurança, e cada licença inclui suporte profissional de engenharia, o que é importante para aplicações empresariais.
wkhtmltopdf
Facilidade de Integração: wkhtmltopdf é uma ferramenta de linha de comando com uma biblioteca C; não há pacote oficial .NET, então usá-lo a partir de .NET significa lançar o binário nativo (ou chamá-lo através de um wrapper de terceiros como DinkToPdf) e enviar esse binário para cada plataforma em que você implanta.
Tecnologia de Renderização: wkhtmltopdf renderiza com QtWebKit, um fork do WebKit que o Qt descontinuou em 2015 e abandonou no Qt 5.6, então recursos modernos de JavaScript e CSS não são suportados, especialmente em sites dinâmicos e ricos em conteúdo. O motor Chromium do IronPDF renderiza padrões web atuais.
Desenvolvimento Contínuo: a última versão do wkhtmltopdf foi 0.12.6 em junho de 2020 e seu repositório no GitHub foi arquivado em janeiro de 2023, então não há suporte do fornecedor. O IronPDF continua a evoluir com atualizações mensais e serviço ao cliente dedicado.
iTextSharp
Renderização de HTML para PDF: o iText converte HTML através de seu add-on pdfHTML separado, um motor de layout CSS em vez de um navegador, e a linha iTextSharp 5 legada agora recebe apenas correções de segurança. O IronPDF renderiza HTML com um motor Chromium embutido no pacote principal, sem necessidade de add-on.
Experiência do Desenvolvedor: a API do iText funciona no nível de objetos PDF e elementos de layout, o que é poderoso, mas significa mais código para tarefas do dia a dia. O IronPDF oferece uma API C# limpa e intuitiva, simplificando a codificação e acelerando a entrega do projeto.
Manutenção & Suporte: o uso gratuito do iText está sob a AGPL, com suporte do fornecedor reservado para licenças comerciais, e o iTextSharp 5.x está no fim da vida útil, exceto por correções de segurança. O IronPDF inclui suporte profissional e atualizações mensais com cada licença.
Aspose.PDF
Qualidade de Conversão: o Aspose.PDF converte HTML com seu próprio motor de layout em vez de um navegador. Sua documentação converte uma página da web primeiro buscando o HTML com HttpClient em um fluxo e passando isso para Document com HtmlLoadOptions, em vez de renderizar diretamente de uma URL. Em nosso teste r/nfl abaixo, a saída estava quase vazia: o logotipo da comunidade, uma manchete e algumas caixas vazias. O motor Chromium do IronPDF renderiza uma URL diretamente, incluindo JavaScript.
Usabilidade da API: a API do Aspose.PDF pode ser verbosa, enquanto o IronPDF foca em uma experiência amigável ao desenvolvedor que minimiza o tempo de configuração e aumenta a produtividade.
Fidelidade de Saída: Como o IronPDF renderiza com Chromium, o PDF corresponde ao que o Chrome mostra para o mesmo HTML, o que torna o design e a depuração previsíveis para geração de PDF em grande volume.
Syncfusion PDF
Complexidade da API: o Syncfusion PDF é uma biblioteca capaz com uma superfície de API maior para aprender. O IronPDF, por outro lado, fornece uma API direta para integração rápida.
Motor de Renderização: o conversor HTML do Syncfusion agora usa o motor Chromium Blink; seus motores WebKit e Internet Explorer mais antigos foram marcados como obsoletos no Essential Studio 2022 Volume 3. Em nosso teste r/nfl abaixo, a saída do Syncfusion manteve o feed principal, mas deixou de lado os painéis de navegação e comunidade, enquanto o motor Chromium do IronPDF renderizou a página inteira.
Além da Conversão: o pacote do IronPDF também cobre assinaturas digitais, anotações, preenchimento de formulários e carimbos de código de barras, então a mesma biblioteca lida com o restante do fluxo de trabalho do documento.
Comparação de Renderização
Para comparar a qualidade de conversão de HTML para PDF dessas bibliotecas, usamos uma página da comunidade Reddit, r/nfl, que contém conteúdo dinâmico, atualizações ao vivo, CSS moderno e elementos baseados em JavaScript:
https://www.reddit.com/r/nfl/
Aqui estão os resultados de uma única execução com as configurações padrão de cada biblioteca. Syncfusion e Aspose.PDF foram executados como builds de avaliação, por isso suas saídas carregam marcas d'água de avaliação (clique em cada imagem para visualizá-la ampliada):
IronPDF
PDF bem formatado e visualmente preciso, preservando conteúdo dinâmico e estilo moderno.
SyncFusion
Convertido com um build de teste. O feed principal, conteúdo das postagens e estilo foram mantidos em um layout de coluna única estreita, mas a navegação à esquerda e o painel da comunidade à direita foram descartados.
Aspose.PDF
Build de avaliação; exigiu baixar o HTML primeiro (Aspose.PDF carrega HTML de um fluxo em vez de uma URL). A saída estava quase vazia: o logotipo da comunidade, uma manchete e algumas caixas vazias.
Wkhtmltopdf
O wkhtmltopdf completou a conversão, mas o resultado é o texto e as imagens da página sem seu layout, estilo, elementos dinâmicos ou interatividade. Isso torna o wkhtmltopdf inadequado para páginas da web modernas e dinâmicas.
Observe: PDFsharp não possui um motor de renderização HTML, e o iText converte HTML apenas através de seu add-on pdfHTML separado, então nenhum dos dois foi incluído neste teste de renderização de navegador.
Conclusão
Para desenvolvedores .NET que buscam uma solução de PDF moderna e confiável, o IronPDF é uma escolha forte. Sua conversão de HTML para PDF baseada em Chromium, facilidade de uso, atualizações regulares e conjunto amplo de recursos o tornam uma escolha de destaque. Seja você trabalhando em um pequeno projeto ou em uma aplicação empresarial de grande escala, o IronPDF aumenta a produtividade enquanto evita os riscos associados a bibliotecas desatualizadas ou não suportadas. Projetado para aplicações comerciais, o IronPDF mantém seus projetos em uma biblioteca mantida e suportada.
Em nosso teste com uma página da web dinâmica do mundo real, o IronPDF produziu a renderização mais completa e precisa. O Syncfusion deixou de lado os painéis de navegação e comunidade. O Aspose.PDF exigiu baixar o HTML primeiro e ainda assim renderizou quase nada da página. O wkhtmltopdf produziu o texto e as imagens sem o estilo da página, um ajuste ruim para sites modernos.
Para fluxos de trabalho modernos de HTML para PDF, essa combinação de precisão de renderização e uma API pequena e legível é o que diferencia o IronPDF.
Experimente o conjunto completo de recursos do IronPDF que converte HTML dinâmico e pesado em CSS para PDF com facilidade. Teste agora com nosso teste gratuito.
Como faço para converter HTML para PDF usando o IronPDF em C#?
Para converter HTML para PDF usando o IronPDF, você precisa inicializar o ChromePdfRenderer, renderizar o conteúdo HTML como um PDF usando o método RenderHtmlAsPdf e, em seguida, salvar o PDF em um arquivo.
Quais são os requisitos do sistema para o IronPDF?
O IronPDF suporta .NET 10, .NET 9, .NET 8, .NET 7, .NET 6, .NET 5, .NET Core, .NET Standard e .NET Framework no Windows, macOS, Linux, Docker, Azure e AWS.
Posso usar o IronPDF com outras linguagens de programação?
Sim, o IronPDF pode ser usado com várias linguagens tanto dentro quanto fora do ecossistema .NET, incluindo F#, VB.NET, Python, Java e Node.js.
Como posso adicionar cabeçalhos e rodapés personalizados a um PDF usando o IronPDF?
Com o IronPDF, você pode adicionar cabeçalhos e rodapés usando a classe TextHeaderFooter para conteúdo baseado em texto ou a classe HtmlHeaderFooter para conteúdo HTML rico.
É possível renderizar um PDF a partir de uma URL existente com o IronPDF?
Sim, você pode renderizar um PDF a partir de uma URL existente usando o método RenderUrlAsPdf no IronPDF.
O IronPDF suporta renderização avançada de CSS e JavaScript?
Sim, o IronPDF suporta CSS3 e JavaScript avançados, incluindo jQuery e AJAX, proporcionando uma renderização precisa de designs web modernos.
Posso aplicar modelagem HTML para criação em lote de PDFs no IronPDF?
Sim, você pode usar técnicas de modelagem em C#, incluindo String.Format e Handlebars.NET, para gerar PDFs dinamicamente com o IronPDF.
Como o IronPDF se compara com outras bibliotecas de PDF?
O IronPDF renderiza HTML com um motor Chromium embutido, lança atualizações mensais e possui uma API C# compacta. O tutorial o compara com PdfSharp, wkhtmltopdf, iTextSharp, Aspose.PDF e Syncfusion PDF, incluindo um teste de renderização lado a lado de uma página web dinâmica.
Posso adicionar marcas d'água a PDFs com o IronPDF?
Sim, o IronPDF permite que você adicione marcas d'água de texto ou imagem aos seus documentos PDF.
Existe uma versão de teste disponível para o IronPDF?
Sim, você pode se inscrever para uma chave de teste gratuita de 30 dias para testar os recursos do IronPDF antes de comprar uma licença.
Jacob Mellor é Diretor de Tecnologia da Iron Software e um engenheiro visionário pioneiro na tecnologia C# PDF. Como desenvolvedor original do código-fonte principal da Iron Software, ele moldou a arquitetura de produtos da empresa desde sua criação, transformando-a, juntamente com o CEO Cameron Rimington, em uma empresa com mais de 50 funcionários que atende à NASA, Tesla e agências governamentais globais.