Como converter HTML para PDF em uma View ASP.NET MVC
Migrar dePDFsharppara IronPDF transforma seu fluxo de trabalho de geração de PDF de desenho baseado em coordenadas manuais para modelagem moderna com HTML/CSS. Este guia fornece um caminho de migração passo a passo que substitui o posicionamento estilo GDI+ por tecnologias web, reduzindo o tempo de desenvolvimento e tornando a geração de PDF mais sustentável através de habilidades padrão de HTML/CSS.
Por que Migrar doPDFsharppara IronPDF
Compreendendo o PDFsharp
PDFsharp é uma biblioteca de criação de PDF de baixo nível que permite aos desenvolvedores gerar documentos PDF programaticamente. Lançado sob a licença MIT e mantido pela PDFsharp-Team (originalmente empira Software GmbH), oPDFsharp6.x visa .NET 8/9/10 e .NET Standard 2.0 e roda em múltiplas plataformas no Windows, Linux e macOS através da construção Core.PDFsharpfunciona principalmente como uma ferramenta para desenhar e compilar PDFs do zero usando uma API estilo GDI+, o que pode ser tanto benéfico quanto restritivo, dependendo da natureza do projeto.
PDFsharp às vezes é erroneamente considerado um conversor HTML-to-PDF, o que não é. Sua finalidade é dedicada exclusivamente à criação programática de documentos PDF. Enquanto existe um complemento da comunidade, HtmlRenderer.PdfSharp (por ArthurHub), destinado a fornecer capacidades de renderização HTML, ele cobre somente HTML 4.01 / CSS nível 2 — nenhum recurso CSS moderno como flexbox, grid ou JavaScript.
O Problema de Cálculo de Coordenadas
A abordagem GDI+ doPDFsharpsignifica que você deve:
- Calcular as posições exatas X,Y para cada elemento
- Monitorar manualmente a altura do conteúdo para evitar que a página ultrapasse o limite.
- Gerencie a quebra de linha e a medição do texto você mesmo
- Desenhar tabelas célula por célula com cálculos de borda
- Gerencie documentos com várias páginas com quebras de página manuais.
A arquitetura doPDFsharprequer uma compreensão aprofundada do posicionamento usando coordenadas, frequentemente apresentando desafios na criação de layouts complexos.
Comparação entrePDFsharpe IronPDF
| Recurso | PDFsharp | IronPDF |
|---|---|---|
| Licença | MIT (Gratuito) | Comercial |
| Suporte para conversão de HTML para PDF | Não | Sim (compatível com HTML5/CSS3) |
| Suporte a CSS moderno | Não (HTML 4.01 / CSS 2 via complemento HtmlRenderer) | Sim (CSS3 completo) |
| Criação de Documentos | Desenho baseado em coordenadas | Modelos HTML/CSS |
| Sistema de layout | Posicionamento manual em X,Y | Fluxo de CSS/Flexbox/Grid |
| Quebras de página | Cálculo manual | Controle automático + CSS |
| Tabelas | Desenhe as células individualmente | HTML <table> |
| Estilização | Fontes/cores baseadas em código | Folhas de estilo CSS |
| API de Documentos | Nível baixo (requer coordenadas) | API de alto nível (API simplificada) |
| Atualizações | Ativo (linha 6.x) | Regular |
O IronPDF se destaca em cenários onde documentos HTML precisam ser convertidos em PDFs com total fidelidade. Esta biblioteca .NET oferece suporte a HTML5 e CSS3, garantindo o atendimento aos padrões modernos da web. Suas funcionalidades nativas de conversão de HTML para PDF permitem que os desenvolvedores aproveitem o conteúdo ou os modelos da web existentes, criados com ferramentas web modernas.
Para equipes em .NET moderno, o IronPDF oferece uma abordagem que elimina cálculos de coordenadas enquanto aproveita habilidades de desenvolvimento web.
Antes de começar
Pré-requisitos
- Ambiente .NET : .NET Framework 4.6.2+ ou .NET Core 3.1+ / .NET 5/6/7/8/9+
- Acesso ao NuGet : Capacidade de instalar pacotes NuGet.
- Licença do IronPDF: Obtenha sua chave de licença em IronPDF
Alterações no pacote NuGet
# RemovePDFsharp(official PDFsharp-Team package IDs; case-sensitive on case-sensitive feeds)
dotnet remove package PDFsharp
# dotnet remove package PDFsharp-WPF # if you used the WPF build
# dotnet remove package PDFsharp-GDI # if you used the GDI build
# dotnet remove package PDFsharp-MigraDoc # if you used MigraDoc on top
# dotnet remove package PdfSharpCore # community .NET Standard port
# Add IronPDF
dotnet add package IronPdf
Configuração de licença
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";' Add at application startup (Program.vb or Startup.vb)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"Identificar Uso do PDFsharp
# Find allPDFsharpusages in your codebase
grep -r "PdfSharp\|XGraphics\|XFont\|XBrush\|XPen" --include="*.cs" .
Referência completa da API
Alterações de namespace
// Before: PDFsharp
using PdfSharp.Pdf;
using PdfSharp.Drawing;
using PdfSharp.Pdf.IO;
// After: IronPDF
using IronPdf;
using IronPdf.Editing;Imports IronPdf
Imports IronPdf.EditingMapeamentos da API principal
| API doPDFsharp | API IronPDF |
|---|---|
new PdfDocument() | ChromePdfRenderer.RenderHtmlAsPdf() |
document.AddPage() | Automático |
XGraphics.FromPdfPage() | Não é necessário |
XGraphics.DrawString() | HTML <p>, <h1>, etc. |
XGraphics.DrawImage() | HTML <img> tag |
XFont | CSS font-family, font-size |
XBrush, XPen | Cores/bordas CSS |
document.Save() | pdf.SaveAs() |
PdfReader.Open() | PdfDocument.FromFile() |
Exemplos de migração de código
Exemplo 1: Conversão de HTML para PDF
Before (PDFsharp):
// NuGet: Install-PackagePDFsharp (official PDFsharp-Team package, MIT)
//PDFsharpdoes NOT support HTML-to-PDF natively. The community add-on
// HtmlRenderer.PdfSharp covers HTML 4.01 / CSS level 2 only (no flexbox, grid, JS).
using PdfSharp.Pdf;
using PdfSharp.Drawing;
using System;
class Program
{
static void Main()
{
//PDFsharpdoes not have built-in HTML para PDF conversion
// You need to manually parse HTML and render content
PdfDocument document = new PdfDocument();
PdfPage page = document.AddPage();
XGraphics gfx = XGraphics.FromPdfPage(page);
XFont font = new XFont("Arial", 12);
//Manualtext rendering (no HTML support)
gfx.DrawString("Hello from PDFsharp", font, XBrushes.Black,
new XRect(0, 0, page.Width, page.Height),
XStringFormats.TopLeft);
document.Save("output.pdf");
}
}
Após (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
//IronPDF has native HTML para PDF rendering
var renderer = new ChromePdfRenderer();
string html = "<h1>Hello from IronPDF</h1><p>Easy HTML para PDF conversion</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}
Este exemplo destaca a diferença mais significativa entre as duas bibliotecas.PDFsharpnão fornece conversão HTML para PDF embutida—você deve criar manualmente um PdfDocument, adicionar um PdfPage, obter um objeto XGraphics, criar um XFont, e usar DrawString() com coordenadas XRect.
IronPDF oferece renderização nativa de HTML para PDF através de ChromePdfRenderer. O método RenderHtmlAsPdf() aceita strings HTML e as converte usando um mecanismo Chromium internamente. O IronPDF converte facilmente arquivos HTML em PDF, preservando todos os estilos definidos em HTML5 e CSS3, eliminando a necessidade de cálculos de coordenadas. Consulte a documentação de conversão de HTML para PDF para obter exemplos completos.
Exemplo 2: Adicionando texto/marca d'água a um PDF existente
Before (PDFsharp):
// NuGet: Install-PackagePDFsharp (official PDFsharp-Team package, MIT)
using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;
using PdfSharp.Drawing;
using System;
class Program
{
static void Main()
{
// Open existing PDF
PdfDocument document = PdfReader.Open("existing.pdf", PdfDocumentOpenMode.Modify);
PdfPage page = document.Pages[0];
// Get graphics object
XGraphics gfx = XGraphics.FromPdfPage(page);
// Note: inPDFsharp6.x, XFontStyle was renamed to XFontStyleEx
XFont font = new XFont("Arial", 20, XFontStyleEx.Bold);
// Draw text at specific position
gfx.DrawString("Watermark Text", font, XBrushes.Red,
new XPoint(200, 400));
document.Save("modified.pdf");
}
}
Após (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;
class Program
{
static void Main()
{
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Open existing PDF
var pdf = PdfDocument.FromFile("existing.pdf");
// Add text stamp/watermark
var textStamper = new TextStamper()
{
Text = "Watermark Text",
FontSize = 20,
FontFamily = "Arial",
IsBold = true,
FontColor = IronSoftware.Drawing.Color.Red,
VerticalAlignment = VerticalAlignment.Middle,
HorizontalAlignment = HorizontalAlignment.Center
};
pdf.ApplyStamp(textStamper);
pdf.SaveAs("modified.pdf");
}
}
PDFsharp exige abrir o PDF com PdfReader.Open() especificando PdfDocumentOpenMode.Modify, acessando uma página, criando um objeto XGraphics, criando um XFont com estilo, e usando DrawString() com um XPoint especificando coordenadas exatas X,Y (200, 400).
IronPDF simplifica isso com PdfDocument.FromFile(), um objeto TextStamper com propriedades declarativas (Text, FontSize, FontFamily, IsBold, FontColor, VerticalAlignment, HorizontalAlignment), e ApplyStamp(). Não são necessários cálculos de coordenadas — basta especificar o alinhamento e o IronPDF cuida do posicionamento. Note que o namespace IronPdf.Editing é necessário para a funcionalidade de carimbo.
Exemplo 3: Criando um PDF com imagens
Before (PDFsharp):
// NuGet: Install-PackagePDFsharp (official PDFsharp-Team package, MIT)
using PdfSharp.Pdf;
using PdfSharp.Drawing;
using System;
class Program
{
static void Main()
{
// Create new PDF document
PdfDocument document = new PdfDocument();
PdfPage page = document.AddPage();
XGraphics gfx = XGraphics.FromPdfPage(page);
// Load and draw image
XImage image = XImage.FromFile("image.jpg");
// Calculate size to fit page
double width = 200;
double height = 200;
gfx.DrawImage(image, 50, 50, width, height);
// Add text
XFont font = new XFont("Arial", 16);
gfx.DrawString("Image in PDF", font, XBrushes.Black,
new XPoint(50, 270));
document.Save("output.pdf");
}
}
Após (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Create PDF from HTML with image
var renderer = new ChromePdfRenderer();
string html = @"
<h1>Image in PDF</h1>
<img src='image.jpg' style='width:200px; height:200px;' />
<p>Easy image embedding with HTML</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// Alternative: Add image to existing PDF
var existingPdf = new ChromePdfRenderer().RenderHtmlAsPdf("<h1>Document</h1>");
var imageStamper = new IronPdf.Editing.ImageStamper(new Uri("image.jpg"))
{
VerticalAlignment = IronPdf.Editing.VerticalAlignment.Top
};
existingPdf.ApplyStamp(imageStamper);
}
}
PDFsharp exige a criação de um novo PdfDocument, adicionar um PdfPage, obter XGraphics, carregar um XImage do arquivo, calcular largura e altura, usar DrawImage() com coordenadas exatas (50, 50, 200, 200), e adicionar texto separadamente com DrawString().
IronPDF usa HTML padrão com uma tag <img> e estilização CSS (style='width:200px; altura:200px;'). Não são necessários cálculos de coordenadas — o CSS cuida do layout.IronPDF também fornece ImageStamper para adicionar imagens a PDFs existentes com propriedades de alinhamento declarativas. Saiba mais em nossos tutoriais .
Notas críticas sobre migração
Mudança de paradigma: coordenadas para HTML/CSS
A mudança mais significativa é a transição do desenho baseado em coordenadas para HTML/CSS:
// PDFsharp: manual positioning
gfx.DrawString("Invoice", titleFont, XBrushes.Black, new XPoint(50, 50));
gfx.DrawString("Customer: John", bodyFont, XBrushes.Black, new XPoint(50, 80));
// IronPDF: let CSS handle layout
var html = @"
<div style='padding: 50px;'>
<h1>Invoice</h1>
<p>Customer: John</p>
</div>";
var pdf = renderer.RenderHtmlAsPdf(html);Imports PdfSharp.Drawing
Imports IronPdf
' PDFsharp: manual positioning
gfx.DrawString("Invoice", titleFont, XBrushes.Black, New XPoint(50, 50))
gfx.DrawString("Customer: John", bodyFont, XBrushes.Black, New XPoint(50, 80))
' IronPDF: let CSS handle layout
Dim html As String = "
<div style='padding: 50px;'>
<h1>Invoice</h1>
<p>Customer: John</p>
</div>"
Dim pdf = renderer.RenderHtmlAsPdf(html)Migração de fontes
// PDFsharp: XFont objects (PDFsharp 6.x renamed XFontStyle to XFontStyleEx)
var titleFont = new XFont("Arial", 24, XFontStyleEx.Bold);
var bodyFont = new XFont("Times New Roman", 12);
// IronPDF: CSS font properties
var html = @"
<style>
h1 { font-family: Arial, sans-serif; font-size: 24px; font-weight: bold; }
p { font-family: 'Times New Roman', serif; font-size: 12px; }
</style>";' PDFsharp: XFont objects (PDFsharp 6.x renamed XFontStyle to XFontStyleEx)
Dim titleFont As New XFont("Arial", 24, XFontStyleEx.Bold)
Dim bodyFont As New XFont("Times New Roman", 12)
' IronPDF: CSS font properties
Dim html As String = "
<style>
h1 { font-family: Arial, sans-serif; font-size: 24px; font-weight: bold; }
p { font-family: 'Times New Roman', serif; font-size: 12px; }
</style>"Alteração de carregamento de documento
// PDFsharp: PdfReader.Open()
PdfDocument document = PdfReader.Open("existing.pdf", PdfDocumentOpenMode.Modify);
// IronPDF: PdfDocument.FromFile()
var pdf = PdfDocument.FromFile("existing.pdf");Imports PdfSharp.Pdf
Imports PdfSharp.Pdf.IO
Imports IronPdf
' PDFsharp: PdfReader.Open()
Dim document As PdfDocument = PdfReader.Open("existing.pdf", PdfDocumentOpenMode.Modify)
' IronPDF: PdfDocument.FromFile()
Dim pdf As PdfDocument = PdfDocument.FromFile("existing.pdf")Salvar alteração de método
// PDFsharp: document.Save()
document.Save("output.pdf");
// IronPDF: pdf.SaveAs()
pdf.SaveAs("output.pdf");' PDFsharp: document.Save()
document.Save("output.pdf")
' IronPDF: pdf.SaveAs()
pdf.SaveAs("output.pdf")Alteração de acesso à página
// PDFsharp: document.Pages[0]
PdfPage page = document.Pages[0];
// IronPDF: Automático page handling or pdf.Pages[0]
// Pages are created automatically from HTML content
Novas funcionalidades após a migração
Após a migração para IronPDF, você ganha capacidades que oPDFsharpnão pode fornecer:
HTML nativo para PDF
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Modern Web Content</h1>");Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Modern Web Content</h1>")URL para PDF
var pdf = renderer.RenderUrlAsPdf("https://example.com");Dim pdf = renderer.RenderUrlAsPdf("https://example.com")Fusão de PDFs
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);Dim pdf1 = PdfDocument.FromFile("document1.pdf")
Dim pdf2 = PdfDocument.FromFile("document2.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2)Marcas d'água com HTML
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>")Resumo da comparação de recursos
| Recurso | PDFsharp | IronPDF |
|---|---|---|
| Desenho baseado em coordenadas | ✓ | ✗ (use HTML) |
| HTML para PDF | ✗ | ✓ |
| Suporte a CSS3 | ✗ | ✓ |
| Layout Flexbox/Grid | ✗ | ✓ |
| Carimbo de texto | Manual XGraphics | Carimbo de texto |
| Carimbo de imagem | Manual XImage | Carimbo de Imagem |
| Mesclar PDFs | Manual | ✓ |
| URL para PDF | ✗ | ✓ |
| Renderização Web Moderna | ✗ | Motor Chromium |
| Quebras de página automáticas | ✗ | ✓ |
Lista de verificação para migração
Pré-migração
- Inventário de todo uso dePDFsharpna base de código
- Identificar os tipos de documentos que estão sendo gerados (relatórios, faturas, certificados)
- Anote quaisquer operações gráficas ou de desenho personalizadas.
- Planeje o armazenamento da chave de licença do IronPDF(variáveis de ambiente recomendadas)
- Teste primeiro com a licença de avaliação do IronPDF
Alterações no pacote
- Remover pacote NuGet
PDFsharp(pacote oficial do PDFsharp-Team) - Remover
PDFsharp-WPF,PDFsharp-GDI, ouPDFsharp-MigraDocse usados - Remover
PdfSharpCorese você estava usando o port da comunidade .NET Standard - Instalar pacote NuGet
IronPdf:dotnet add package IronPdf
Alterações no código
- Atualizar importações de namespace (
using PdfSharp.Pdf;→using IronPdf;) - Adicionar
using IronPdf.Editing;para funcionalidade de carimbo - Converter layouts baseados em coordenadas para HTML/CSS
- Substituir
XFontpor propriedades de fonte CSS - Substituir
XPenpor cores/bordas CSS - Substituir
XGraphics.DrawString()por elementos de texto HTML - Substituir
XGraphics.DrawImage()por tags HTML<img> - Substituir
PdfReader.Open()porPdfDocument.FromFile() - Substituir
document.Save()porpdf.SaveAs() - Converter código de desenho de tabela em tabelas HTML
Pós-migração
- Comparação visual dos PDFs gerados
- Testar documentos com várias páginas
- Verificar renderização da fonte
- Adicionar novas funcionalidades (HTML para PDF, mesclagem, marcas d'água) conforme necessário.

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 bem estruturados e visualmente atraentes.