IRONSOFTWAREHOME
USANDO O IRONPDF

Como criar um serviço centralizado de geração de PDFs com ASP.NET Core e IronPDF

Curtis Chau
Curtis Chau
Updated: 20 de junho de 2026

Imprimir um Formulário do Windows para PDF em C# é simples com IronPDF: renderize a representação HTML do formulário usando ChromePdfRenderer, salve no disco ou na memória, e entregue um PDF perfeito em apenas algumas linhas de código.

Exportar um aplicativo Windows Forms para PDF é um requisito comum em softwares de gestão empresarial. Seja para arquivar telas de entrada de dados, gerar relatórios para clientes a partir do estado de um formulário ou capturar pré-visualizações de impressão sem precisar ir à impressora, converter um formulário C# para PDF elimina os atritos dos fluxos de trabalho diários. O IronPDF fornece uma API nativa do .NET que lida com o pipeline de conversão, desde a renderização HTML até a saída final em PDF, permitindo que você ignore as frágeis soluções alternativas de impressão com GDI+.

Como instalar o IronPDF?

Adicione o IronPDF ao seu projeto através do NuGet. Abra o Console do Gerenciador de Pacotes e execute:

PM > Install-Package IronPdf

Ou utilize a CLI do .NET :

dotnet add package IronPdf

Após a instalação, adicione using IronPdf; no topo de qualquer arquivo que chame a API. O pacote também está disponível diretamente em NuGet.org/packages/IronPDF . Uma chave de licença de avaliação gratuita está disponível em IronPDF para desbloquear a saída sem marca d'água durante o período de avaliação.

Como converter um formulário do Windows em PDF usando HTML?

O método mais confiável para converter um formulário C# para PDF é construir um instantâneo HTML dos dados do formulário e renderizar esse instantâneo com ChromePdfRenderer. Essa abordagem desacopla a renderização visual da interface GDI+ do WinForms, proporcionando uma saída nítida e portátil com aparência idêntica em todos os visualizadores de PDF.

using IronPdf;

// Set your license key once at application startup
License.LicenseKey = "YOUR-LICENSE-KEY";

// Compose an HTML representation of your form data
string formHtml = $"""
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <style>
            body  {{font-family: Arial, sans-serif; margin: 40px; color: #222;}}
            h1    {{color: #1a4a8a; border-bottom: 2px solid #1a4a8a; padding-bottom: 8px;}}
            label {{font-weight: bold; display: inline-block; width: 160px;}}
            .row  {{margin: 12px 0;}}
            .box  {{border: 1px solid #bbb; padding: 20px; border-radius: 4px;}}
        </style>
    </head>
    <body>
        <h1>Customer Registration Form</h1>
        <div class="box">
            <div class="row"><label>Full Name:</label> Jane Smith</div>
            <div class="row"><label>Email:</label> jane@example.com</div>
            <div class="row"><label>Phone:</label> +1 555-0100</div>
            <div class="row"><label>Date:</label> {DateTime.Now:yyyy-MM-dd}</div>
        </div>
    </body>
    </html>
    """;

// Render HTML to PDF
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize       = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop       = 20;
renderer.RenderingOptions.MarginBottom    = 20;
renderer.RenderingOptions.MarginLeft      = 25;
renderer.RenderingOptions.MarginRight     = 25;
renderer.RenderingOptions.CssMediaType    = IronPdf.Rendering.PdfCssMediaType.Print;
renderer.RenderingOptions.PrintHtmlBackgrounds = true;

PdfDocument pdf = renderer.RenderHtmlAsPdf(formHtml);
pdf.SaveAs("CustomerForm.pdf");

Console.WriteLine($"PDF saved -- {pdf.PageCount} page(s).");
C#

O ChromePdfRenderer dirige um motor Chromium sem cabeça, então os layouts CSS, fontes incorporadas e até mesmo consultas de impressão são renderizadas fielmente. Substitua os valores de campo fixos por dados vinculados aos controles do seu formulário em tempo de execução para uma abordagem totalmente dinâmica. O guia prático de conversão de HTML para PDF aborda detalhadamente todas as opções de renderização disponíveis.

Como extrair dados em tempo real de controles de formulário?

Em vez de codificar o HTML manualmente, leia os valores diretamente dos seus controles WinForms e insira-os no modelo:

using IronPdf;

// Called from a button click handler in your WinForms application
void ExportFormToPdf()
{
    // Read control values at the moment of export
    string name    = txtName.Text;
    string email   = txtEmail.Text;
    string phone   = txtPhone.Text;
    string notes   = rtbNotes.Text.Replace("\n", "<br>");

    string html = $"""
        <!DOCTYPE html>
        <html>
        <head>
            <style>
                body {{font-family: Arial, sans-serif; margin: 30px;}}
                table {{width: 100%; border-collapse: collapse;}}
                th, td {{border: 1px solid #ccc; padding: 10px; text-align: left;}}
                th {{background-color: #f0f4ff;}}
                h2 {{color: #1a4a8a;}}
            </style>
        </head>
        <body>
            <h2>Form Export -- {DateTime.Now:dd MMM yyyy HH:mm}</h2>
            <table>
                <tr><th>Field</th><th>Value</th></tr>
                <tr><td>Full Name</td><td>{name}</td></tr>
                <tr><td>Email</td><td>{email}</td></tr>
                <tr><td>Phone</td><td>{phone}</td></tr>
                <tr><td>Notes</td><td>{notes}</td></tr>
            </table>
        </body>
        </html>
        """;

    var renderer = new ChromePdfRenderer();
    PdfDocument pdf = renderer.RenderHtmlAsPdf(html);

    // Prompt the user for a save location
    using var dialog = new SaveFileDialog();
    dialog.Filter   = "PDF Files|*.pdf";
    dialog.FileName = $"FormExport_{DateTime.Now:yyyyMMdd_HHmmss}.pdf";

    if (dialog.ShowDialog() == DialogResult.OK)
    {
        pdf.SaveAs(dialog.FileName);
        MessageBox.Show("PDF exported successfully.", "Export Complete");
    }
}
C#

Este trecho de código trata a exportação do formulário como uma mini-tarefa de relatório: coleta os valores dos campos, os incorpora em um modelo HTML, renderiza e, em seguida, salva no local escolhido pelo usuário. Você pode estender a tabela HTML com tantos campos quantos o formulário contiver. Para formulários com várias abas, construa blocos <section> separados por aba e deixe o IronPDF paginar naturalmente.

Como adicionar cabeçalhos e rodapés?

Cabeçalhos e rodapés aprimoram a exportação de um formulário para uso profissional. A classe TextHeaderFooter do IronPDF carimba texto no topo e no final de cada página sem alterar o HTML do corpo:

using IronPdf;
using IronPdf.Rendering;

var renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf(formHtml);

// Stamp header and footer on every page
pdf.AddTextHeaders(new TextHeaderFooter
{
    CenterText      = "Confidential -- Internal Use Only",
    LeftText        = "{date}",
    RightText       = "Page {page} of {total-pages}",
    FontSize        = 9,
    DrawDividerLine = true
});

pdf.AddTextFooters(new TextHeaderFooter
{
    CenterText = "Generated by MyApp v2.0",
    FontSize   = 8
});

pdf.SaveAs("FormWithHeader.pdf");

Tokens dinâmicos como {page}, {total-pages} e {date} resolvem automaticamente no momento da renderização. Para saída com marca, troque TextHeaderFooter por HtmlHeaderFooter e forneça marcação HTML completa incluindo logotipos da empresa. O guia prático de cabeçalhos e rodapés mostra todos os tokens e opções de layout disponíveis.

Como converter um formulário em uma matriz de bytes em vez de um arquivo?

Salvar diretamente no disco é conveniente, mas muitas aplicações precisam transmitir o PDF via HTTP, armazená-lo em um banco de dados ou passá-lo para um serviço subsequente. Nesses casos, ignore o arquivo e trabalhe com os bytes brutos:

using IronPdf;

var renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf(formHtml);

// Get raw bytes -- no file required
byte[] pdfBytes = pdf.BinaryData;

// Alternatively, get a MemoryStream for APIs that accept streams
using System.IO.MemoryStream stream = pdf.Stream;
byte[] fromStream = stream.ToArray();

Console.WriteLine($"PDF size in memory: {pdfBytes.Length:N0} bytes");

// Example: return as HTTP response in ASP.NET Core
// return File(pdfBytes, "application/pdf", "form-export.pdf");

A propriedade BinaryData realiza uma cópia O(1) do array de bytes pré-computado. A propriedade Stream retorna um novo MemoryStream que suporta acesso pesquisável para bibliotecas que esperam entradas de fluxo - útil ao encadear compressão ou criptografia antes de entregar os bytes finais. Mais detalhes sobre o processamento de PDFs na memória estão disponíveis no guia de fluxo de memória de PDF .

Como aplicar as configurações de segurança antes de salvar?

Os formulários exportados frequentemente contêm dados sensíveis. A API de segurança do IronPDF criptografa o PDF e restringe o que os destinatários podem fazer com ele:

using IronPdf;

var renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf(formHtml);

// Restrict access
pdf.SecuritySettings.OwnerPassword          = "adminSecretKey";
pdf.SecuritySettings.UserPassword           = "viewerPass";
pdf.SecuritySettings.AllowUserPrinting      = true;   // allow printing
pdf.SecuritySettings.AllowUserCopyPasteContent = false; // block copy
pdf.SecuritySettings.AllowUserAnnotations   = false;

pdf.SaveAs("SecureForm.pdf");
Console.WriteLine("Password-protected PDF created.");

Definir uma senha de proprietário permite que os administradores controlem os sinalizadores de permissões, enquanto a senha de usuário restringe totalmente o acesso aos documentos. O sinalizador AllowUserPrinting é particularmente relevante aqui -- você pode deixar o destinatário reimprimir o formulário exportado sem dar a eles direitos de edição. Todos os detalhes constam no guia em PDF sobre permissões e senhas .

Como Você Compara Abordagens de Impressão para Formulários em C#?

Escolher entre o PrintDocument nativo do WinForms, captura de bitmap GDI+ e renderização HTML do IronPDF depende de compensações em fidelidade, complexidade e portabilidade:

Comparação de abordagens de conversão de formulário para PDF em C#
AbordagemFidelidade de saídaComplexidade do códigoMultiplataformaSuporte a CSSIdeal para
Driver de impressora PrintDocument + PDFMédioMédioSomente para WindowsNoneWinForms legado com lógica de impressão existente
Captura de bitmap GDI+ (Control.DrawToBitmap)Alta (raster)BaixoSomente para WindowsNoneCapturas rápidas no estilo de capturas de tela
Renderização HTML do IronPDFAlto (vetor)BaixoWindows, Linux, macOS, DockerCSS3 completoExportações profissionais, portáteis e baseadas em dados
Visualizador de Relatórios (RDLC)AltoAltoSomente para WindowsLimitadoRelatórios paginados complexos com agrupamento

A abordagem baseada em HTML do IronPDF produz PDFs vetoriais que se adaptam perfeitamente a qualquer nível de zoom e imprimem com nitidez em qualquer dispositivo. Como o mecanismo de renderização é o Chromium, as consultas de mídia CSS, os layouts flexbox e as fontes do Google funcionam como esperado — algo que a captura de bitmaps com GDI+ não consegue replicar. A biblioteca também funciona em ambientes Linux e dentro de contêineres Docker , tornando-a a única opção nesta tabela que funciona fora do Windows.

O que acontece quando o formulário tem várias abas?

Formulários WinForms com várias abas são comuns em aplicações empresariais. Como o PDF é gerado a partir de HTML em vez da superfície GDI+ em tempo real, você controla exatamente qual conteúdo da guia aparece. Crie uma seção HTML por aba e concatene-as antes de renderizar. O pipeline flui de strings HTML de abas através de ChromePdfRenderer para um único PDF contínuo de várias páginas - uma seção lógica por aba. Alternativamente, renderize cada aba de forma independente e mescle os objetos PdfDocument resultantes com a API de mesclagem do IronPDF.

Como você realiza a validação de formulários antes da exportação?

Exporte apenas dados de formulário válidos. Um padrão de verificação simples impede a geração de PDFs a partir de envios incompletos: valide os campos primeiro e só prossiga para a geração e renderização do HTML quando todos os campos obrigatórios forem aprovados. Se algum campo apresentar falha, destaque o erro na interface do usuário e cancele a exportação. Isso mantém a consistência dos PDFs exportados e evita confusões posteriores devido a dados incompletos. De acordo com a documentação da Microsoft sobre validação de Windows Forms, ErrorProvider é o mecanismo padrão para feedback de validação em nível de campo antes de qualquer ação.

Como disponibilizar a exportação para PDF a partir do ASP.NET Core?

Formulários da web construídos com ASP.NET Core podem exportar para PDF usando a mesma API ChromePdfRenderer. Os bytes renderizados são retornados diretamente como um arquivo de resultado:

using IronPdf;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/forms")]
public class FormExportController : ControllerBase
{
    [HttpPost("export")]
    public IActionResult ExportFormAsPdf([FromBody] FormDataModel formData)
    {
        // Build HTML from submitted form data
        string html = $"""
            <!DOCTYPE html>
            <html>
            <head>
                <style>
                    body {{font-family: Arial, sans-serif; padding: 30px;}}
                    h1   {{color: #1a4a8a;}}
                    dl   {{display: grid; grid-template-columns: 200px 1fr; gap: 8px 16px;}}
                    dt   {{font-weight: bold;}}
                </style>
            </head>
            <body>
                <h1>{formData.FormTitle}</h1>
                <dl>
                    <dt>Applicant Name</dt><dd>{formData.ApplicantName}</dd>
                    <dt>Submission Date</dt><dd>{DateTime.UtcNow:dd MMM yyyy}</dd>
                    <dt>Reference ID</dt><dd>{formData.ReferenceId}</dd>
                </dl>
            </body>
            </html>
            """;

        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;

        PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
        byte[] pdfBytes = pdf.BinaryData;

        string fileName = $"form-{formData.ReferenceId}-{DateTime.UtcNow:yyyyMMdd}.pdf";
        return File(pdfBytes, "application/pdf", fileName);
    }
}

public record FormDataModel(string FormTitle, string ApplicantName, string ReferenceId);
C#

Este controlador recebe dados de formulário em formato JSON, gera o PDF na memória e o transmite de volta como um arquivo para download. Nenhum arquivo temporário é criado no servidor. Para aplicações Blazor, a abordagem é similar -- chame o mesmo código de renderização a partir de um serviço e envie os bytes para o navegador via IJSRuntime. Os padrões completos de integração do ASP.NET estão documentados no guia ASP.NET para PDF .

Que tipo MIME e qual atributo Content-Disposition você deve usar?

Sempre retorne application/pdf como o tipo de conteúdo. Use Content-Disposition: inline para exibir o PDF no navegador, ou Content-Disposition: attachment para forçar um download. O nome do arquivo aparece no diálogo de salvamento do navegador quando attachment é usado, então escolha um nome significativo que inclua um ID de referência ou data.

Como armazenar em cache os PDFs gerados?

Se a mesma exportação de formulário for solicitada repetidamente, armazene em cache a matriz de bytes para evitar a renderização repetida. IMemoryCache funciona para implantações de servidor único; Utilize um cache distribuído, como o Redis, para configurações com múltiplas instâncias. Defina um prazo de validade que esteja de acordo com a frequência com que os dados do formulário subjacente são alterados.

Quais são as melhores práticas para exportar formulários para PDF?

Exportações de formulários consistentes e de alta qualidade provêm de alguns padrões repetíveis:

  • Mantenha o HTML simples. Evite modelos com uso intensivo de JavaScript — HTML e CSS puros são renderizados mais rapidamente e produzem PDFs menores. Ative RenderingOptions.EnableJavaScript apenas quando os cálculos do formulário dependerem dele.
  • Use CSS de impressão. Defina CssMediaType = PdfCssMediaType.Print e defina regras @media print na sua folha de estilo. Isso elimina elementos gráficos exclusivos da tela, como barras de navegação e barras laterais, do PDF exportado.
  • Higienize a entrada do usuário. Escape as entidades HTML em qualquer valor de campo que você inserir no modelo para evitar marcação quebrada ou, em casos extremos, injeção de script no PDF.
  • Descartar objetos PdfDocument. Recursos não gerenciados são mantidos até o descarte. Use declarações using ou chame Dispose() explicitamente após salvar.
  • Teste com dados de produção. Formulários com textos longos, caracteres especiais ou imagens incorporadas podem gerar layouts surpreendentes. Execute exportações com base em amostras de dados reais durante o desenvolvimento.

As opções de renderização documentam todas as configurações disponíveis, desde tamanhos de papel personalizados até margens e orientação de página personalizadas.

Como lidar com formulários extensos ou com várias páginas?

IronPDF pagina automaticamente com base na altura do conteúdo e no tamanho de papel selecionado. Insira page-break-before: always em contêineres de seção no CSS quando uma nova seção de formulário deve sempre começar em uma nova página. Para formulários com centenas de campos, pré-alocar um MemoryStream com uma capacidade estimada reduz a pressão do GC durante a cópia do array de bytes.

Como adicionar uma assinatura digital?

Os formulários de exportação assinados têm validade legal em muitas jurisdições. O IronPDF suporta certificados digitais armazenados em arquivos PFX ou em repositórios de certificados do Windows:

// Load the certificate and sign in one step
var signature = new IronPdf.Signing.PdfSignature("certificate.pfx", "certPassword");
pdf.Sign(signature);
pdf.SaveAs("SignedForm.pdf");

De acordo com a visão geral das assinaturas digitais em PDF da Adobe , uma assinatura digital certifica a origem do documento e detecta quaisquer modificações feitas após a assinatura. O guia de assinatura digital em PDF aborda detalhadamente a configuração do certificado e os campos de assinatura visíveis.

Quais são os pontos principais que você deve reter?

Converter um Formulário do Windows em C# para PDF com IronPDF reduz-se a três etapas: construir uma representação HTML dos dados do formulário, passá-lo para ChromePdfRenderer, e salvar ou transmitir o resultado. Essa abordagem produz PDFs vetoriais que imprimem com nitidez, funcionam em diversas plataformas e suportam o modelo de layout CSS3 completo — vantagens que a captura de bitmap GDI+ e os métodos legados de drivers de impressão não conseguem igualar.

Principais funcionalidades abordadas neste guia:

  • Renderização de HTML para PDF com ChromePdfRenderer para WinForms e ASP.NET Core
  • Vinculação de dados em tempo real de controles WinForms para modelos HTML
  • Cabeçalhos, rodapés e numeração de páginas com TextHeaderFooter
  • Saída de array de bytes em memória via BinaryData para respostas HTTP e armazenamento em banco de dados
  • Configurações de segurança de PDF: senhas de proprietário/usuário e sinalizadores de permissão
  • Anexação de assinatura digital para exportações juridicamente vinculativas

Explore o conjunto de recursos do IronPDF para ver ferramentas de anotação, edição de campos de formulário, conformidade com PDF/A e muito mais. Experimente o IronPDF gratuitamente com uma licença de avaliação de 30 dias e aplique-o ao seu fluxo de trabalho de exportação de formulários hoje mesmo.

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

...
Leia mais

Artigos relacionados

Key in blue circle

Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.

Your trial license will be sent to your email address

Sem limitações. 100% desbloqueado. Sem cartão de crédito.

bullet_checkedNão é necessário cartão de crédito nem criação de conta.Sem limitações. 100% desbloqueado. Sem cartão de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Agende sua demonstração ao vivo gratuita.
Booking Badge

Aprovado por milhões de engenheiros em todo o mundo.

Logotipos dos clientes da Iron Software
Agende sua consulta sem compromisso.
Preencha o formulário abaixo ou envie um e-mail para sales@ironsoftware.com
Os seus dados serão sempre mantidos em sigilo.
Aprovado por milhões de engenheiros em todo o mundo.
Logotipos dos clientes da Iron Software
Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.
Não é necessário cartão de crédito nem criação de conta.