Generación de PDF en C# (.NET): Resumen completo de bibliotecas y herramientas
La creación de documentos PDF es una de las tareas más comunes en el desarrollo corporativo. Informes, facturas, albaranes, contratos: todo esto requiere una herramienta confiable para la generación. En el ecosistema de C# (.NET) existen varias bibliotecas potentes, cada una con sus propias características. En este artículo, analizaremos las opciones más populares, sus ventajas y desventajas, y proporcionaremos ejemplos de código.
1. iTextSharp / iText 7 para .NET
iText es el estándar de facto en el mundo de la generación de PDF. La biblioteca existe desde el año 2000 y se desarrolla activamente. Para .NET está disponible la versión iText 7 (paquete NuGet itext7).
Funcionalidades:
- Control total sobre el contenido: texto, tablas, imágenes, anotaciones.
- Trabajo con formularios (AcroForms), firmas digitales, cifrado.
- Soporte para PDF/A (almacenamiento de archivos).
- Alto rendimiento.
Desventajas:
- API compleja (trabajo de bajo nivel con coordenadas).
- Para uso comercial se requiere una licencia paga (AGPL para código abierto).
Ejemplo de creación de un PDF simple:
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("¡Hola, mundo!")); document.Add(new Paragraph("Este es un PDF creado con iText 7.")); }}2. PDFsharp
PDFsharp es una biblioteca ligera de código abierto para .NET (también hay una versión para GDI+). Es ideal para tareas simples: creación de documentos con texto, tablas, imágenes.
Funcionalidades:
- API simple e intuitiva.
- Soporte de fuentes (incluyendo cirílico).
- Trabajo con primitivas gráficas (líneas, formas).
- Gratuita (licencia MIT).
Desventajas:
- Soporte limitado para elementos complejos (formularios, marcadores).
- Más lento que iText en grandes volúmenes.
Ejemplo:
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("¡Hola, mundo!", font, XBrushes.Black, new XPoint(40, 100)); } document.Save(filePath); }}3. QuestPDF
QuestPDF es una biblioteca moderna con una API fluida, inspirada en el concepto de "layout-first". Permite describir la estructura del documento de forma declarativa, lo que simplifica enormemente la creación de diseños complejos.
Funcionalidades:
- Estilo declarativo (como WPF o HTML).
- División automática en páginas (paginación).
- Soporte para tablas, encabezados, pies de página.
- Versión gratuita con limitación (hasta 10 páginas).
Desventajas:
- La versión gratuita es limitada.
- Menos flexibilidad que iText (difícil dibujar gráficos arbitrarios).
Ejemplo:
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("¡Hola, mundo!").FontSize(20); col.Item().Text("Esto es QuestPDF.").FontSize(14); }); }); También en la biblioteca
BenchmarkDotNet para C# (.NET): guía completa con ejemplos
Criptografía en C++: cifrado y hashes con OpenSSL y Crypto++
Monitoreo de aplicaciones C++: bibliotecas y herramientas para la recopilación de métricas