Geração de relatórios PDF em C# (.NET) com QuestPDF
No desenvolvimento moderno na plataforma .NET, surge frequentemente a necessidade de criar documentos PDF profissionais: relatórios, faturas, notas fiscais, resumos analíticos e outros documentos de negócios. A biblioteca QuestPDF é uma solução moderna, de alto desempenho e intuitiva para geração de PDF em C#. Ela não requer a instalação de utilitários de terceiros (como wkhtmltopdf) e funciona totalmente em código gerenciado .NET.
Neste artigo, vamos detalhar como começar a trabalhar com QuestPDF, configurar o projeto, criar um relatório simples com tabela, imagem e formatação de texto.
Instalação e configuração
QuestPDF é distribuído via NuGet. Para instalar, execute o comando no Package Manager Console ou através da interface do Visual Studio/Rider:
Install-Package QuestPDFOu via .NET CLI:
dotnet add package QuestPDFApós a instalação, é necessário inicializar a licença uma vez. Para uso comercial, é necessária uma licença paga, mas para testes e projetos pequenos, está disponível um modo gratuito com marca d'água. Para remover a marca d'água, adicione no início do programa:
QuestPDF.Settings.License = LicenseType.Community;// ou para uso comercial:// QuestPDF.Settings.License = LicenseType.Professional;Criação do primeiro documento PDF
QuestPDF usa Fluent API — você descreve a estrutura do documento com chamadas de método sequenciais. Vejamos um exemplo mínimo:
using QuestPDF.Fluent;using QuestPDF.Helpers;using QuestPDF.Infrastructure;
// Configuração da licença (obrigatório)QuestPDF.Settings.License = LicenseType.Community;
// Criar o documentoDocument.Create(container =>{ container.Page(page => { page.Size(PageSizes.A4); page.Margin(2, Unit.Centimetre); page.DefaultTextStyle(x => x.FontSize(12));
page.Header() .Text("Relatório de Vendas") .SemiBold().FontSize(24).FontColor(Colors.Blue.Medium);
page.Content() .PaddingVertical(1, Unit.Centimetre) .Column(col => { col.Item().Text("Data: " + DateTime.Now.ToShortDateString()); col.Item().PaddingBottom(10).LineHorizontal(1); col.Item().Text("Abaixo está a tabela com os dados:"); });
page.Footer() .AlignCenter() .Text(x => { x.Span("Página "); x.CurrentPageNumber(); }); });}).GeneratePdf("report.pdf");Este código cria um arquivo PDF com título, data, linha horizontal e número da página no rodapé.
Trabalhando com tabelas
Uma das tarefas mais comuns é exibir dados tabulares. QuestPDF fornece uma API poderosa para criar tabelas com ajuste automático da largura das colunas:
container.Page(page =>{ page.Size(PageSizes.A4); page.Margin(20);
page.Content().Table(table => { // Definir colunas (largura em porcentagem do espaço disponível) table.ColumnsDefinition(columns => { columns.RelativeColumn(3); // Nome columns.RelativeColumn(1); // Quantidade columns.RelativeColumn(1); // Preço columns.RelativeColumn(1); // Total });
// Cabeçalho da tabela table.Header(header => { header.Cell().Background(Colors.Grey.Lighten2).Padding(5).Text("Produto"); header.Cell().Background(Colors.Grey.Lighten2).Padding(5).AlignCenter().Text("Qtd"); header.Cell().Background(Colors.Grey.Lighten2).Padding(5).AlignCenter().Text("Preço"); header.Cell().Backgrou