推荐QuestPDF:现代开源.NETPDF文档生成库

一赫技术 2024-08-04 10:58:36

在当今的开发环境中,选择一个可靠且功能强大的库是至关重要的。今天,我想向大家推荐一个现代开源的.NET库——QuestPDF,它专注于PDF文档的生成。

什么是QuestPDF?

QuestPDF是一个现代的开源.NET库,专门用于PDF文档的生成。它提供了一个全面的布局引擎,并通过简洁且易于发现的C# Fluent API进行操作。以下是QuestPDF的一些主要特点:

代码设计PDF文档:使用C#进行PDF文档设计,完全采用代码的方式。充分利用版本控制系统的优势。强大的结构元素:可以使用文本、图像、边框、表格等多种结构元素来组成PDF文档。全面的布局引擎:专为PDF文档生成和分页支持而设计的布局引擎。简洁易懂的API:使用简洁且易于理解的C# Fluent API编写代码,并利用IntelliSense快速发现可用选项。热重载功能:节省时间的热重载功能,允许在不重新编译代码的情况下实时预览PDF文档。GitHubhttps://github.com/QuestPDF/QuestPDF

为什么选择QuestPDF?

选择一个项目依赖项可能是困难的。我们需要确保项目的稳定性和可维护性。调查显示,GitHub星标数量在评估库质量时起着重要作用。因此,请为这个仓库点个星标,这只需要几秒钟,但能帮助成千上万的开发者!

如何开始?

开始探索QuestPDF库吧!只需250行C#代码,您就可以创建一个功能齐全的PDF发票实现。阅读入门教程,熟悉库的总体架构、重要的布局结构以及有用的模式和实践。轻松开始设计您的PDF文档、报告、发票等。

git clone https://github.com/QuestPDF/QuestPDF.git

安装QuestPDF

在开始使用QuestPDF之前,你需要在项目中安装它。你可以通过NuGet包管理器来完成这一操作。打开NuGet包管理器控制台并运行以下命令:

Install-Package QuestPDF

或者在Visual Studio中,你可以通过“管理NuGet包”选项来搜索并安装QuestPDF。

快速入门

以下例子为直接引用项目,所做的测试

下面是一个简单的示例,展示了如何使用QuestPDF生成一个基本的PDF文档。

示例1

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using QuestPDF.Fluent;using QuestPDF.Helpers;using QuestPDF.Infrastructure;namespace TestApp{ public SimpleDocument : IDocument { // 定义文档的元数据 public DocumentMetadata GetMetadata() => DocumentMetadata.Default; // 定义文档的内容和结构 public void Compose(IDocumentContainer container) { // 配置页面 container .Page(page => { // 设置页面的边距 page.Margin(50); // 设置页面大小为A4 page.Size(PageSizes.A4); // 设置页面背景颜色为白色 page.PageColor(Colors.White); // 定义页眉 page.Header() .Text("QuestPDF Example") // 页眉文本 .FontSize(20) // 字体大小 .Bold() // 加粗 .AlignCenter(); // 居中对齐 // 定义页面内容 page.Content() .PaddingVertical(10) // 设置内容的垂直内边距 .Column(column => { // 设置列间距 column.Spacing(20); // 添加文本项 column.Item().Text("Hello, QuestPDF!"); // 添加图片项 column.Item().Image("img.png"); }); // 定义页脚 page.Footer() .AlignCenter() // 居中对齐 .Text(x => { // 页脚文本内容,包含当前页码和总页数 x.Span("Page "); x.CurrentPageNumber(); // 当前页码 x.Span(" of "); x.TotalPages(); // 总页数 }); }); } }}internal Program{ static void Main(string[] args) { QuestPDF.Settings.License = new QuestPDF.Infrastructure.LicenseType();//防止证书需要提示出错 var document = new SimpleDocument(); // 生成PDF文件 document.GeneratePdf("example.pdf"); }}

运行后,生成pdf文件。

示例表格2

示例表格2

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using QuestPDF.Fluent;using QuestPDF.Helpers;using QuestPDF.Infrastructure;namespace TestApp{ public TableDocument : IDocument { public DocumentMetadata GetMetadata() => DocumentMetadata.Default; public void Compose(IDocumentContainer container) { container .Page(page => { page.Margin(50); page.Size(PageSizes.A4); page.PageColor(Colors.White); page.Header() .Text("Table Example") .FontSize(20) .Bold() .AlignCenter(); page.Content() .PaddingVertical(10) .Column(column => { column.Spacing(20); // 表格标题 column.Item().Text("Sample Table").FontSize(16).Bold().AlignCenter(); // 创建表格 column.Item().Table(table => { // 设置表格列数 table.ColumnsDefinition(columns => { columns.RelativeColumn(2); // 第一列相对宽度为2 columns.RelativeColumn(3); // 第二列相对宽度为3 columns.RelativeColumn(2); // 第三列相对宽度为2 }); // 表头 table.Header(header => { header.Cell().Element(CellStyle).Text("ID"); header.Cell().Element(CellStyle).Text("Name"); header.Cell().Element(CellStyle).Text("Age"); // 定义单元格样式 static IContainer CellStyle(IContainer container) { return container .Padding(5) .Background(Colors.Grey.Lighten2) .Border(1) .BorderColor(Colors.Black); } }); // 表格内容 for (int i = 1; i <= 10; i++) { table.Cell().Element(CellStyle).Text(i.ToString()); table.Cell().Element(CellStyle).Text($"Name {i}"); table.Cell().Element(CellStyle).Text((20 + i).ToString()); } // 定义单元格样式 static IContainer CellStyle(IContainer container) { return container .Padding(5) .Border(1) .BorderColor(Colors.Grey.Lighten1); } }); }); page.Footer() .AlignCenter() .Text(x => { x.Span("Page "); x.CurrentPageNumber(); x.Span(" of "); x.TotalPages(); }); }); } }}

示例图表2

Nuget安装

SkiaSharpSkiaSharp.Viewsusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using QuestPDF.Fluent;using QuestPDF.Helpers;using QuestPDF.Infrastructure;using SkiaSharp;using SkiaSharp.Extended.Svg;namespace TestApp{ public ChartDocument : IDocument { public DocumentMetadata GetMetadata() => DocumentMetadata.Default; public void Compose(IDocumentContainer container) { container .Page(page => { page.Margin(50); page.Size(PageSizes.A4); page.PageColor(Colors.White); page.Header() .Text("Chart Example") .FontSize(20) .Bold() .AlignCenter(); page.Content() .PaddingVertical(10) .Column(column => { column.Spacing(20); // 图表标题 column.Item().Text("Sample Chart").FontSize(16).Bold().AlignCenter(); // 创建图表 var svgContent = GenerateSvgChart(); column.Item().Svg(svgContent); }); page.Footer() .AlignCenter() .Text(x => { x.Span("Page "); x.CurrentPageNumber(); x.Span(" of "); x.TotalPages(); }); }); } private string GenerateSvgChart() { var width = 600; var height = 400; // 创建SKPictureRecorder using var recorder = new SKPictureRecorder(); var canvas = recorder.BeginRecording(new SKRect(0, 0, width, height)); // 示例数据 var data = new[] { 10, 20, 30, 40, 50 }; var maxData = 50; // 创建画笔 using var paint = new SKPaint { Color = SKColors.Blue, IsAntialias = true, Style = SKPaintStyle.Fill, StrokeWidth = 2 }; // 计算条形图的宽度和间距 var barWidth = width / (data.Length * 2); var spacing = barWidth; for (int i = 0; i < data.Length; i++) { // 计算条形图的高度 var barHeight = (data[i] / (float)maxData) * height; // 绘制条形图 var rect = new SKRect( i * (barWidth + spacing), height - barHeight, i * (barWidth + spacing) + barWidth, height ); canvas.DrawRect(rect, paint); } // 获取绘制内容 var picture = recorder.EndRecording(); // 将SKPicture转换为SVG using var svgStream = new MemoryStream(); var svgCanvas = SKSvgCanvas.Create(new SKRect(0, 0, width, height), svgStream); svgCanvas.DrawPicture(picture); svgCanvas.Dispose(); return System.Text.Encoding.UTF8.GetString(svgStream.ToArray()); } }}

结语

QuestPDF是一个强大且易于使用的工具,适合任何需要生成PDF文档的.NET开发者。无论您是需要生成报告、发票还是其他类型的文档,QuestPDF都能满足您的需求。立即开始使用QuestPDF,体验其强大的功能和简洁的API设计吧!

更多信息请访问QuestPDF官网。

0 阅读:1

一赫技术

简介:感谢大家的关注