Geração de PDF em C# (.NET): Visão geral completa de bibliotecas e ferramentas
Criar documentos PDF é uma das tarefas mais comuns no desenvolvimento corporativo. Relatórios, faturas, notas fiscais, contratos — tudo isso exige uma ferramenta confiável para geração. No ecossistema C# (.NET), existem várias bibliotecas poderosas, cada uma com suas características. Neste artigo, analisaremos as opções mais populares, seus prós e contras, e forneceremos exemplos de código.
1. iTextSharp / iText 7 para .NET
iText é o padrão de facto no mundo da geração de PDF. A biblioteca existe desde o ano 2000 e é ativamente desenvolvida. Para .NET, está disponível a versão iText 7 (pacote NuGet itext7).
Recursos:
- Controle total sobre o conteúdo: texto, tabelas, imagens, anotações.
- Trabalho com formulários (AcroForms), assinaturas digitais, criptografia.
- Suporte a PDF/A (armazenamento de arquivo).
- Alta performance.
Desvantagens:
- API complexa (trabalho de baixo nível com coordenadas).
- Para uso comercial, é necessária uma licença paga (AGPL para open-source).
Exemplo de criação de PDF simples:
using iText.Kernel.Pdf;using iText.Layout;using iText.Layout.Element;
public void CreatePdf(string filePath){ using (var writer = new PdfWriter(filePath)) using (var pdf = new PdfDocument(writer)) using (var document = new Document(pdf)) { document.Add(new Paragraph("Olá, mundo!")); document.Add(new Paragraph("Este é um PDF criado com iText 7.")); }}2. PDFsharp
PDFsharp é uma biblioteca open-source leve para .NET (também existe uma versão para GDI+). É ideal para tarefas simples: criação de documentos com texto, tabelas, imagens.
Recursos:
- API simples e intuitiva.
- Suporte a fontes (incluindo cirílico).
- Trabalho com primitivas gráficas (linhas, formas).
- Gratuita (licença MIT).
Desvantagens:
- Suporte limitado para elementos complexos (formulários, marcadores).
- Mais lento que o iText em grandes volumes.
Exemplo:
using PdfSharp.Pdf;using PdfSharp.Drawing;
public void CreatePdf(string filePath){ using (var document = new PdfDocument()) { var page = document.AddPage(); using (var gfx = XGraphics.FromPdfPage(page)) { var font = new XFont("Arial", 20, XFontStyle.Regular); gfx.DrawString("Olá, mundo!", font, XBrushes.Black, new XPoint(40, 100)); } document.Save(filePath); }}3. QuestPDF
QuestPDF é uma biblioteca moderna com fluent API, inspirada no conceito "layout-first". Permite descrever a estrutura do documento de forma declarativa, o que simplifica muito a criação de layouts complexos.
Recursos:
- Estilo declarativo (como WPF ou HTML).
- Quebra de página automática (paginação).
- Suporte a tabelas, cabeçalhos, rodapés.
- Versão gratuita com limitação (até 10 páginas).
Desvantagens:
- Versão gratuita limitada.
- Menos flexibilidade que o iText (difícil desenhar gráficos arbitrários).
Exemplo:
using QuestPDF.Fluent;using QuestPDF.Helpers;using QuestPDF.Infrastructure;
public void CreatePdf(string filePath){ Document.Create(container => { container.Page(page => { page.Size(PageSizes.A4); page.Margin(30); page.Content().Column(col => { col.Item().Text("Olá, mundo!").FontSize(20); col.Item().Text("Este é o QuestPDF.").FontSize(14); }); }); Também na biblioteca
GraphQL em PHP: Guia Completo da Biblioteca webonyx/graphql-php
Gerador de QR Codes em Java: biblioteca ZXing (Zebra Crossing)
Validação de dados em Go (Golang): bibliotecas, abordagens e exemplos de código
Mongoose para JavaScript (Node.js): guia completo com exemplos