Ir para o conteúdo do rodapé
GUIAS DE MIGRAçãO

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.

View Full Comparison

Migrar deQuestPDFpara IronPDF move seu fluxo de trabalho de geração de PDF de uma API de layout fluente em C# para uma abordagem padrão baseada em HTML/CSS com capacidades mais amplas de manipulação de PDF. Este guia fornece um caminho de migração passo a passo para que você possa alavancar habilidades web existentes, reutilizar modelos HTML, e adquirir funcionalidades que a biblioteca principal doQuestPDFnão inclui.

Por que migrar doQuestPDFpara o IronPDF?

Entendendo o QuestPDF

QuestPDF é uma API moderna e fluente criada especificamente para gerar PDFs programaticamente em C#. Ao contrário de bibliotecas que oferecem conversão abrangente de HTML para PDF, a biblioteca principal doQuestPDFestá limitada a uma API de layout programático. OQuestPDFse destaca em cenários onde os desenvolvedores precisam gerar documentos do zero usando código C#, sem depender de HTML.

O nível comunitário é gratuito sob termos do MIT para indivíduos, organizações sem fins lucrativos, projetos FOSS e organizações com receita bruta anual abaixo de $1M USD. Acima desse limite,QuestPDFoferece uma licença Professional a partir de $999 (perpétua, até 10 desenvolvedores) e uma licença Enterprise a $2,999 (perpétua, para toda a organização), que precisam ser consideradas no planejamento de longo prazo.

O Problema Central: Nenhum Motor HTML na Biblioteca Principal

QuestPDF é por vezes recomendado para conversão de HTML para PDF, mas a biblioteca principal não renderiza HTML. Uma extensão QuestPDF.HTML mantida pela comunidade cobre um subconjunto limitado de HTML/CSS, mas o motor principal é apenas programático e não executa um mecanismo de navegador real. As equipes que já possuem modelos HTML/CSS geralmente precisam reconstruí-los na API fluente.

Recurso QuestPDF IronPDF
HTML-para-PDF (principal) Não suportado (apenas API fluente) Suporte total
HTML para PDF (extensão) Parcial via QuestPDF.HTML (subconjunto limitado) Suporte total
Estilização CSS Limitado via extensão CSS3 completo
Modelos existentes Precisa ser reconstruído do zero. Reutilize recursos HTML/CSS
Compatibilidade com ferramentas de design None Qualquer ferramenta de design web
Curva de Aprendizagem Nova API fluente em C# Transferência de habilidades web
Pré-visualização do layout App complementar Pré-visualização em qualquer navegador
Manipulação de PDF Mesclar / extrair / sobrepor / criptografar (API de Operações de Documento, 2024.12.0+) Mesclar, dividir, editar, assinar

IronPDF fornece renderização nativa de HTML para PDF que oQuestPDFprincipal não inclui, removendo a necessidade de reconstruir manualmente documentos em código C#. Também cobre funcionalidades de manipulação de PDF como mesclar, dividir, editar, proteger e assinatura digital — a API de Operações de Documento doQuestPDF(2024.12.0+) cobre mesclagem, extração de páginas, sobreposição/baixo de páginas, anexos e criptografia, mas não edita o conteúdo de páginas existentes, OCR ou assinaturas digitais.

O Modelo de Licenciamento QuestPDF

A Licença Comunitária doQuestPDF(termos do MIT) é gratuita para indivíduos, organizações sem fins lucrativos, projetos FOSS e organizações abaixo de $1M USD em receita bruta anual. Acima desse limite, você precisa de uma licença Professional a $999 (perpétua, até 10 desenvolvedores) ou Enterprise a $2,999 (perpétua, para toda a organização). Porque o gatilho é a receita da sua organização em vez do número de assentos, isso pode alterar conversas com clientes a jusante assim como sua própria licenciamento.

IronPDF oferece uma licença comercial por desenvolvedor: sem auditorias de receita, sem requisitos de licenciamento para clientes e custos previsíveis.

Para equipes adotando versões modernas do .NET,IronPDF fornece licenciamento por desenvolvedor sem gatilhos baseados em receita e uma abordagem padrão HTML/CSS que aproveita habilidades de desenvolvimento web existentes.


Antes de começar

Pré-requisitos

  1. Ambiente .NET : .NET Framework 4.6.2+ ou .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. Acesso ao NuGet : Capacidade de instalar pacotes NuGet.
  3. 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
SHELL

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"
$vbLabelText   $csharpLabel

Encontre o uso do QuestPDF

# Find allQuestPDFusages in your codebase
grep -r "QuestPDF\|Document.Create\|\.GeneratePdf" --include="*.cs" .
# Find allQuestPDFusages in your codebase
grep -r "QuestPDF\|Document.Create\|\.GeneratePdf" --include="*.cs" .
SHELL

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
$vbLabelText   $csharpLabel

Mapeamentos da API principal

ConceitoQuestPDF 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
.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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

Este exemplo mostra a diferença de paradigma.QuestPDFrequer o aprendizado de sua API fluente: Document.Create(), container.Page(), page.Content().Column(), column.Item().Text(), com estilo via encadeamento de métodos como .FontSize(20).Bold(). Você também deve definir o tipo de licença com QuestPDF.Settings.License = LicenseType.Community.

IronPDF usa HTML padrão que qualquer desenvolvedor web conhece:

para cabeçalhos,

para parágrafos. Nenhum novo DSL de layout para aprender. A abordagem do IronPDF oferece sintaxe mais limpa e integra com o restante de uma pilha web moderna do .NET. 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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

QuestPDF usa .Column() e .Item() para layout, com .PaddingTop(20) para espaçamento.IronPDF usa HTML padrão:

para o título,

para parágrafos,
para espaçamento, e 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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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 espaço reservado {page} insere automaticamente o número da página atual.


Notas críticas sobre migração

A Mudança de Paradigma

A principal mudança é passar de uma API de layout fluente personalizada em C# para HTML/CSS padrão:

// QuestPDF: Fluent C# layout 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: Fluent C# layout 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: Fluent VB.NET layout 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)
$vbLabelText   $csharpLabel

Conversões de padrões de layout

PadrãoQuestPDF Equivalente em HTML/CSS
.Column() exibir: flexível; flex-direction: coluna
.Row() exibir: flexível; flex-direction: linha
.RelativeItem() flex: 1
.Table() elemento
.PaddingTop(20) padding-top: 20px ou
.AlignCenter() text-align: center
.FontSize(24) font-size: 24px
.Bold() font-weight: bold ou

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
$vbLabelText   $csharpLabel

Novas funcionalidades após a migração

Após migrar para o IronPDF, você obtém recursos que oQuestPDFnã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")
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

Resumo da comparação de recursos

Recurso QuestPDF IronPDF
HTML para PDF Core: não suportado (limitado via extensão QuestPDF.HTML) Característica principal
Curva de Aprendizagem API fluente em C# Habilidades básicas na web
Pré-visualização do modelo App complementar Qualquer navegador
Colaboração em Design Apenas para desenvolvedores Designers + Desenvolvedores
Ativos existentes Precisa reconstruir Reutilize HTML/CSS
Manipulação de PDF Mesclar / extrair / sobrepor (API de Operações de Documento, 2024.12.0+) Apoiado
Segurança/Assinatura Criptografia + permissões (sem assinatura digital) Criptografia + assinatura digital
Modelo de licenciamento Baseado em receita (limite de $1M) Por desenvolvedor
Impacto no cliente Pode precisar de licenças acima de $1M de receita None
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 documentosQuestPDF(Document.Create, .GeneratePdf)
  • Documentar os padrões DSL utilizados (.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 pacote NuGet QuestPDF
  • Instalar 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() para ChromePdfRenderer + HTML
  • Substituir .Column() / .Row() por CSS Flexbox
  • Substituir .Table() por elementos HTML
  • Converter .Text().Bold().FontSize(24) para <h1 style='...'>
  • Substituir page.Header() / page.Footer() por TextHeaderFooter
  • Substituir .CurrentPageNumber() por espaço reservado {page}
  • Converter .GeneratePdf() para pdf.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.

    ObserveQuestPDF é uma marca registrada de seu respectivo proprietário. Este site não é afiliado, endossado ou patrocinado pela Codeux Software ou os mantenedores do QuestPDF. Todos os nomes de produtos, logotipos e marcas são propriedade de seus respectivos proprietários. As comparações são apenas para fins informativos e refletem informações disponíveis publicamente no momento da redação.

    Curtis Chau
    Redator Técnico

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

    Leia mais

    Equipe de Suporte Iron

    Estamos online 24 horas por dia, 5 dias por semana.
    Bater papo
    E-mail
    Liga para mim