Siempre ha sido un dolor de cabeza generar PDFs en cualquier ambiente, sobretodo al momento de previsualizar un documento, es por eso que me di a la tarea de buscar información de un proyecto con estas caracteristicas.
- Intuitivo
- Facil de usar
- Facil de debugear
Así que encontre QuestPDF, una liberia OpenSource para .NET.
QuestPDF es una biblioteca .NET de código abierto para la generación de documentos PDF. Ofrece un motor de diseño con soporte completo de paginación. El documento generado consta de muchos elementos simples (por ejemplo, borde, fondo, imagen, texto, relleno, tabla, cuadrícula, etc.) que se componen juntos para crear estructuras más complejas. De esta forma, como desarrollador, podrás comprender el comportamiento de cada elemento y utilizarlos con total confianza. Además, el documento y todos sus elementos admiten la funcionalidad de paginación. Por ejemplo, un elemento se puede mover a la página siguiente (si no hay suficiente espacio) o incluso dividirse entre páginas como las filas de una tabla. A diferencia de otras bibliotecas, no depende de la conversión de HTML a PDF (aleluya), que en muchos casos no es confiable. En cambio, implementa su propio motor de diseño optimizado para cubrir todos los requisitos relacionados con la paginación.
Ademas de todo esto, tiene su propia herramienta para previsualizar documentos, esto en Visual Studio por supuesto, y como regalo extra tambien admite HotReload, para poder trabajar en tiempo real con nuestros documentos.
Anexo un pequeño ejemplo de como se puede utilizar esta libreria.
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
// code in your main method
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.PageColor(Colors.White);
page.DefaultTextStyle(x => x.FontSize(20));
page.Header()
.Text("Hello PDF!")
.SemiBold().FontSize(36).FontColor(Colors.Blue.Medium);
page.Content()
.PaddingVertical(1, Unit.Centimetre)
.Column(x =>
{
x.Spacing(20);
x.Item().Text(Placeholders.LoremIpsum());
x.Item().Image(Placeholders.Image(200, 100));
});
page.Footer()
.AlignCenter()
.Text(x =>
{
x.Span("Page ");
x.CurrentPageNumber();
});
});
})
.GeneratePdf("hello.pdf");
El documento quedaría de esta manera
Te invito a que le heches un vistazo a esta herramienta en su pagina que anexo acontinuación