Como migrar do QuestPDF para o IronPDF em C#
Full Comparison
Looking for a detailed feature-by-feature breakdown? See how IronPDF stacks up against QuestPDF on pricing, HTML support, and licensing.
A migração do QuestPDF para o IronPDF transforma seu fluxo de trabalho de geração de PDFs, passando de uma API proprietária em C# para uma abordagem padrão baseada em HTML/CSS com recursos abrangentes de manipulação de PDFs. Este guia fornece um caminho de migração completo, passo a passo, que permite aproveitar as habilidades web existentes, reutilizar modelos HTML e obter recursos que o QuestPDF simplesmente não pode oferecer.
Por que migrar do QuestPDF para o IronPDF?
Entendendo o QuestPDF
QuestPDF é uma API moderna e fluente criada especificamente para gerar PDFs programaticamente em C#. Diferentemente de alguns concorrentes que oferecem recursos abrangentes de conversão de HTML para PDF, o QuestPDF se limita às funcionalidades programáticas da API de layout. O QuestPDF se destaca em cenários onde os desenvolvedores precisam gerar documentos do zero usando código C#, sem depender de HTML.
A biblioteca é gratuita para empresas com faturamento inferior a US$ 1 milhão, mas exige a comprovação desse faturamento, o que pode representar um ônus burocrático para algumas. Usuários que ultrapassarem esse limite precisarão adquirir uma licença, o que deve ser levado em consideração no planejamento a longo prazo ao avaliar o QuestPDF como uma possível solução.
O problema principal: falta de suporte para HTML
O QuestPDF é frequentemente recomendado para conversão de HTML para PDF, mas não oferece suporte a HTML. Apesar de ser amplamente promovido em fóruns de desenvolvedores, o QuestPDF usa sua própria linguagem de layout proprietária, que exige o aprendizado de uma DSL completamente nova em vez de aproveitar as habilidades web existentes.
| Recurso | QuestPDF | IronPDF |
|---|---|---|
| HTML para PDF | NÃO SUPORTADO | Apoiado |
| Estilização CSS | NÃO SUPORTADO | CSS3 completo |
| Modelos existentes | Precisa ser reconstruído do zero. | Reutilize recursos HTML/CSS |
| Compatibilidade com ferramentas de design | Nenhum | Qualquer ferramenta de design web |
| Curva de Aprendizagem | Nova DSL proprietária | Transferência de habilidades web |
| Pré-visualização do layout | Requer plugin de IDE | Pré-visualização em qualquer navegador |
| Manipulação de PDF | Nenhum | Fusão, divisão, edição |
O IronPDF oferece renderização nativa de HTML para PDF, algo que o QuestPDF não possui, eliminando a necessidade de reconstruir documentos manualmente em código C#. Inclui recursos abrangentes de manipulação de PDF (mesclar, dividir, editar, proteger) que o QuestPDF não consegue realizar.
O Modelo de Licenciamento QuestPDF
A "Licença Comunitária" do QuestPDF é gratuita apenas se sua empresa tiver um faturamento bruto anual inferior a US$ 1 milhão. Seus clientes (e não apenas você como desenvolvedor) podem precisar comprar licenças caso ultrapassem os limites de receita. Diferentemente de uma licença comercial simples por desenvolvedor, o modelo da QuestPDF exige a divulgação da receita e o acompanhamento da conformidade.
A IronPDF oferece licenciamento simples: uma licença por desenvolvedor, sem auditorias de receita, sem requisitos de licenciamento para o cliente e custos claros e previsíveis.
Para equipes que planejam a adoção do .NET 10 e do C# 14 até 2025 e 2026, o IronPDF oferece licenciamento transparente, sem auditorias baseadas em receita, e uma abordagem padrão de HTML/CSS que aproveita as habilidades de desenvolvimento web existentes.
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
# Remove QuestPDF
dotnet remove package QuestPDF
# Add IronPDF
dotnet add package IronPdf
# Remove QuestPDF
dotnet remove package QuestPDF
# Add IronPDF
dotnet add package IronPdf
Configuração de licença
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Encontre o uso do QuestPDF
# Find all QuestPDF usages in your codebase
grep -r "QuestPDF\|Document.Create\|\.GeneratePdf" --include="*.cs" .
# Find all QuestPDF usages in your codebase
grep -r "QuestPDF\|Document.Create\|\.GeneratePdf" --include="*.cs" .
Referência completa da API
Alterações de namespace
// Before: QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
// After: IronPDF
using IronPdf;
// Before: QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
// After: IronPDF
using IronPdf;
Imports IronPdf
Mapeamentos da API principal
| Conceito QuestPDF | Equivalente ao IronPDF |
|---|---|
Document.Create() |
new ChromePdfRenderer() |
.Page() |
RenderHtmlAsPdf() |
.Text() |
HTML <p>, <h1>, <span> |
.Bold() |
CSS font-weight: bold |
.FontSize(24) |
CSS font-size: 24px |
.Image() |
HTML <img src="..."> |
.Table() |
HTML <table> |
.Column() |
CSS exibir: flexível; flex-direction: coluna |
.Row() |
CSS exibir: flexível; flex-direction: linha |
PageSizes.A4 |
RenderingOptions.PaperSize |
.Margin() |
RenderingOptions.Margin* |
.GeneratePdf() |
pdf.SaveAs() |
| N / D | PdfDocument.Merge() |
| N / D | PdfDocument.FromFile() |
| N / D | pdf.SecuritySettings |
Exemplos de migração de código
Exemplo 1: Criação básica de documentos (HTML para PDF)
Antes (QuestPDF):
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
class Program
{
static void Main()
{
QuestPDF.Settings.License = LicenseType.Community;
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Content().Column(column =>
{
column.Item().Text("Hello World").FontSize(20).Bold();
column.Item().Text("This is a paragraph of text.");
});
});
}).GeneratePdf("output.pdf");
}
}
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
class Program
{
static void Main()
{
QuestPDF.Settings.License = LicenseType.Community;
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Content().Column(column =>
{
column.Item().Text("Hello World").FontSize(20).Bold();
column.Item().Text("This is a paragraph of text.");
});
});
}).GeneratePdf("output.pdf");
}
}
Imports QuestPDF.Fluent
Imports QuestPDF.Helpers
Imports QuestPDF.Infrastructure
Module Program
Sub Main()
QuestPDF.Settings.License = LicenseType.Community
Document.Create(Sub(container)
container.Page(Sub(page)
page.Size(PageSizes.A4)
page.Margin(2, Unit.Centimetre)
page.Content().Column(Sub(column)
column.Item().Text("Hello World").FontSize(20).Bold()
column.Item().Text("This is a paragraph of text.")
End Sub)
End Sub)
End Sub).GeneratePdf("output.pdf")
End Sub
End Module
Após (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a paragraph of text.</p>");
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a paragraph of text.</p>");
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a paragraph of text.</p>")
pdf.SaveAs("output.pdf")
End Sub
End Class
Este exemplo demonstra a diferença fundamental de paradigma. O QuestPDF exige o aprendizado de sua API fluente: Document.Create(), container.Page(), page.Content().Column(), column.Item().Text(), com estilização por meio de encadeamento de métodos como .FontSize(20).Bold(). Você também deve definir o tipo de licença com QuestPDF.Settings.License = LicenseType.Community.
O IronPDF usa HTML padrão que qualquer desenvolvedor web conhece: <h1> para títulos, <p> para parágrafos. Sem necessidade de aprender DSL proprietária. A abordagem do IronPDF oferece uma sintaxe mais limpa e melhor integração com aplicativos .NET modernos. Consulte a documentação de conversão de HTML para PDF para obter exemplos completos.
Exemplo 2: Geração de faturas
Antes (QuestPDF):
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
class Program
{
static void Main()
{
QuestPDF.Settings.License = LicenseType.Community;
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Content().Column(column =>
{
column.Item().Text("INVOICE").FontSize(24).Bold();
column.Item().Text("Invoice #: 12345").FontSize(12);
column.Item().PaddingTop(20);
column.Item().Text("Customer: John Doe");
column.Item().Text("Total: $100.00").Bold();
});
});
}).GeneratePdf("invoice.pdf");
}
}
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
class Program
{
static void Main()
{
QuestPDF.Settings.License = LicenseType.Community;
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Content().Column(column =>
{
column.Item().Text("INVOICE").FontSize(24).Bold();
column.Item().Text("Invoice #: 12345").FontSize(12);
column.Item().PaddingTop(20);
column.Item().Text("Customer: John Doe");
column.Item().Text("Total: $100.00").Bold();
});
});
}).GeneratePdf("invoice.pdf");
}
}
Imports QuestPDF.Fluent
Imports QuestPDF.Helpers
Imports QuestPDF.Infrastructure
Module Program
Sub Main()
QuestPDF.Settings.License = LicenseType.Community
Document.Create(Sub(container)
container.Page(Sub(page)
page.Size(PageSizes.A4)
page.Margin(2, Unit.Centimetre)
page.Content().Column(Sub(column)
column.Item().Text("INVOICE").FontSize(24).Bold()
column.Item().Text("Invoice #: 12345").FontSize(12)
column.Item().PaddingTop(20)
column.Item().Text("Customer: John Doe")
column.Item().Text("Total: $100.00").Bold()
End Sub)
End Sub)
End Sub).GeneratePdf("invoice.pdf")
End Sub
End Module
Após (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var htmlContent = @"
<h1>INVOICE</h1>
<p>Invoice #: 12345</p>
<br/>
<p>Customer: John Doe</p>
<p><strong>Total: $100.00</strong></p>
";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("invoice.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var htmlContent = @"
<h1>INVOICE</h1>
<p>Invoice #: 12345</p>
<br/>
<p>Customer: John Doe</p>
<p><strong>Total: $100.00</strong></p>
";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("invoice.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim htmlContent As String = "
<h1>INVOICE</h1>
<p>Invoice #: 12345</p>
<br/>
<p>Customer: John Doe</p>
<p><strong>Total: $100.00</strong></p>
"
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("invoice.pdf")
End Sub
End Class
QuestPDF usa .Column() e .Item() para layout, com .PaddingTop(20) para espaçamento. O IronPDF usa HTML padrão: <h1> para o título, <p> para parágrafos, <br/> para espaçamento e <strong> para texto em negrito.
A verdadeira vantagem: com o IronPDF, os designers podem criar e modificar modelos HTML de forma independente. Com o QuestPDF, cada alteração de design exige que um desenvolvedor C# modifique o código. Saiba mais em nossos tutoriais .
Exemplo 3: Cabeçalhos e rodapés com números de página
Antes (QuestPDF):
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
class Program
{
static void Main()
{
QuestPDF.Settings.License = LicenseType.Community;
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Header().Text("Document Header").FontSize(14).Bold();
page.Content().Text("Main content of the document.");
page.Footer().AlignCenter().Text(text =>
{
text.Span("Page ");
text.CurrentPageNumber();
});
});
}).GeneratePdf("document.pdf");
}
}
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
class Program
{
static void Main()
{
QuestPDF.Settings.License = LicenseType.Community;
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Header().Text("Document Header").FontSize(14).Bold();
page.Content().Text("Main content of the document.");
page.Footer().AlignCenter().Text(text =>
{
text.Span("Page ");
text.CurrentPageNumber();
});
});
}).GeneratePdf("document.pdf");
}
}
Imports QuestPDF.Fluent
Imports QuestPDF.Helpers
Imports QuestPDF.Infrastructure
Module Program
Sub Main()
QuestPDF.Settings.License = LicenseType.Community
Document.Create(Sub(container)
container.Page(Sub(page)
page.Size(PageSizes.A4)
page.Margin(2, Unit.Centimetre)
page.Header().Text("Document Header").FontSize(14).Bold()
page.Content().Text("Main content of the document.")
page.Footer().AlignCenter().Text(Sub(text)
text.Span("Page ")
text.CurrentPageNumber()
End Sub)
End Sub)
End Sub).GeneratePdf("document.pdf")
End Sub
End Module
Após (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var htmlContent = "<p>Main content of the document.</p>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.Header = new TextHeaderFooter()
{
CenterText = "Document Header",
FontSize = 14
};
pdf.Footer = new TextHeaderFooter()
{
CenterText = "Page {page}"
};
pdf.SaveAs("document.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var htmlContent = "<p>Main content of the document.</p>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.Header = new TextHeaderFooter()
{
CenterText = "Document Header",
FontSize = 14
};
pdf.Footer = new TextHeaderFooter()
{
CenterText = "Page {page}"
};
pdf.SaveAs("document.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim htmlContent As String = "<p>Main content of the document.</p>"
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.Header = New TextHeaderFooter() With {
.CenterText = "Document Header",
.FontSize = 14
}
pdf.Footer = New TextHeaderFooter() With {
.CenterText = "Page {page}"
}
pdf.SaveAs("document.pdf")
End Sub
End Class
QuestPDF usa page.Header() e page.Footer() com métodos fluentes como .AlignCenter() e .CurrentPageNumber(). IronPDF usa objetos TextHeaderFooter com propriedades como CenterText e FontSize. O marcador {page} insere automaticamente o número da página atual.
Notas críticas sobre migração
A Mudança de Paradigma
A mudança fundamental é a transição de uma DSL proprietária em C# para HTML/CSS padrão:
// QuestPDF: Proprietary fluent API
container.Page(page =>
{
page.Content().Column(column =>
{
column.Item().Text("Invoice").Bold().FontSize(24);
column.Item().Row(row =>
{
row.RelativeItem().Text("Customer:");
row.RelativeItem().Text("Acme Corp");
});
});
});
// IronPDF: Standard HTML/CSS
var html = @"
<div style='font-family: Arial; padding: 40px;'>
<h1 style='font-weight: bold; font-size: 24px;'>Invoice</h1>
<div style='display: flex; justify-content: space-between;'>
<span>Customer:</span>
<span>Acme Corp</span>
</div>
</div>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
// QuestPDF: Proprietary fluent API
container.Page(page =>
{
page.Content().Column(column =>
{
column.Item().Text("Invoice").Bold().FontSize(24);
column.Item().Row(row =>
{
row.RelativeItem().Text("Customer:");
row.RelativeItem().Text("Acme Corp");
});
});
});
// IronPDF: Standard HTML/CSS
var html = @"
<div style='font-family: Arial; padding: 40px;'>
<h1 style='font-weight: bold; font-size: 24px;'>Invoice</h1>
<div style='display: flex; justify-content: space-between;'>
<span>Customer:</span>
<span>Acme Corp</span>
</div>
</div>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
' QuestPDF: Proprietary fluent API
container.Page(Sub(page)
page.Content().Column(Sub(column)
column.Item().Text("Invoice").Bold().FontSize(24)
column.Item().Row(Sub(row)
row.RelativeItem().Text("Customer:")
row.RelativeItem().Text("Acme Corp")
End Sub)
End Sub)
End Sub)
' IronPDF: Standard HTML/CSS
Dim html As String = "
<div style='font-family: Arial; padding: 40px;'>
<h1 style='font-weight: bold; font-size: 24px;'>Invoice</h1>
<div style='display: flex; justify-content: space-between;'>
<span>Customer:</span>
<span>Acme Corp</span>
</div>
</div>"
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
Conversões de padrões de layout
| Padrão QuestPDF | Equivalente em HTML/CSS |
|---|---|
.Column() |
exibir: flexível; flex-direction: coluna |
.Row() |
exibir: flexível; flex-direction: linha |
.RelativeItem() |
flex: 1 |
.Table() |
<table> elemento |
.PaddingTop(20) |
padding-top: 20px ou <br/> |
.AlignCenter() |
text-align: center |
.FontSize(24) |
font-size: 24px |
.Bold() |
font-weight: bold ou <strong> |
Conversão de configurações de página
// QuestPDF
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
// IronPDF
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20; // mm (2cm = 20mm)
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
// QuestPDF
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
// IronPDF
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20; // mm (2cm = 20mm)
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
' QuestPDF
page.Size(PageSizes.A4)
page.Margin(2, Unit.Centimetre)
' IronPDF
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 20 ' mm (2cm = 20mm)
renderer.RenderingOptions.MarginBottom = 20
renderer.RenderingOptions.MarginLeft = 20
renderer.RenderingOptions.MarginRight = 20
Novas funcionalidades após a migração
Após migrar para o IronPDF, você obtém recursos que o QuestPDF não pode oferecer:
Fusão de PDFs
var cover = renderer.RenderHtmlAsPdf("<h1>Cover</h1>");
var content = renderer.RenderHtmlAsPdf(reportHtml);
var existing = PdfDocument.FromFile("appendix.pdf");
var merged = PdfDocument.Merge(cover, content, existing);
merged.SaveAs("complete.pdf");
var cover = renderer.RenderHtmlAsPdf("<h1>Cover</h1>");
var content = renderer.RenderHtmlAsPdf(reportHtml);
var existing = PdfDocument.FromFile("appendix.pdf");
var merged = PdfDocument.Merge(cover, content, existing);
merged.SaveAs("complete.pdf");
Dim cover = renderer.RenderHtmlAsPdf("<h1>Cover</h1>")
Dim content = renderer.RenderHtmlAsPdf(reportHtml)
Dim existing = PdfDocument.FromFile("appendix.pdf")
Dim merged = PdfDocument.Merge(cover, content, existing)
merged.SaveAs("complete.pdf")
Segurança de PDF
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "reader";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SaveAs("protected.pdf");
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "reader";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SaveAs("protected.pdf");
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SecuritySettings.OwnerPassword = "admin"
pdf.SecuritySettings.UserPassword = "reader"
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights
pdf.SaveAs("protected.pdf")
URL para PDF
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
var pdf = renderer.RenderUrlAsPdf("https://example.com/report");
pdf.SaveAs("webpage.pdf");
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
var pdf = renderer.RenderUrlAsPdf("https://example.com/report");
pdf.SaveAs("webpage.pdf");
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.EnableJavaScript = True
Dim pdf = renderer.RenderUrlAsPdf("https://example.com/report")
pdf.SaveAs("webpage.pdf")
Carregar e editar PDFs existentes
var pdf = PdfDocument.FromFile("existing.pdf");
// Modify, merge, add security, etc.
pdf.SaveAs("modified.pdf");
var pdf = PdfDocument.FromFile("existing.pdf");
// Modify, merge, add security, etc.
pdf.SaveAs("modified.pdf");
Dim pdf = PdfDocument.FromFile("existing.pdf")
' Modify, merge, add security, etc.
pdf.SaveAs("modified.pdf")
Resumo da comparação de recursos
| Recurso | QuestPDF | IronPDF |
|---|---|---|
| HTML para PDF | Não suportado | Característica principal |
| Curva de Aprendizagem | DSL proprietária | Habilidades básicas na web |
| Pré-visualização do modelo | Plugin necessário | Qualquer navegador |
| Colaboração em Design | Apenas para desenvolvedores | Designers + Desenvolvedores |
| Ativos existentes | Precisa reconstruir | Reutilize HTML/CSS |
| Manipulação de PDF | Não suportado | Apoiado |
| Segurança/Assinatura | Não suportado | Apoiado |
| Modelo de licenciamento | Com base na receita | Por desenvolvedor |
| Impacto no cliente | Pode ser necessário obter licenças. | Nenhum |
| Bootstrap/Tailwind | Não suportado | Apoiado |
| URL para PDF | Não suportado | Apoiado |
Lista de verificação para migração
Pré-migração
- Identificar todos os modelos de documentos QuestPDF (
Document.Create,.GeneratePdf) - Documentar os padrões DSL usados (
.Column(),.Row(),.Table(),.Text()) - Mapear métodos de estilização para seus equivalentes em CSS
- Obtenha a chave de licença do IronPDF em IronPDF
Alterações no pacote
- Remover o pacote NuGet
QuestPDF - Instale o pacote NuGet
IronPdf:dotnet add package IronPdf
Alterações no código
- Atualizar importações de namespace
- Remover
QuestPDF.Settings.License = LicenseType.Community - Converter o padrão
Document.Create()paraChromePdfRenderer+ HTML - Substitua
.Column()/.Row()por CSS Flexbox - Substitua
.Table()por elementos HTML<table> - Converter
.Text().Bold().FontSize(24)para<h1 style='...'> - Substitua
page.Header()/page.Footer()porTextHeaderFooter - Substitua
.CurrentPageNumber()pelo marcador de posição{page} - Converter
.GeneratePdf()parapdf.SaveAs() - Adicionar inicialização de licença na inicialização do aplicativo
Pós-migração
- Comparação visual da saída em PDF
- Testar documentos com várias páginas para garantir que as quebras de página estejam corretas.
- Adicionar novas funcionalidades (segurança, mesclagem, URL para PDF) conforme necessário.

