LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

【C#】推荐QuestPDF:现代开源.NET PDF文档生成库

admin
2024年6月8日 23:57 本文热度 1166

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

什么是QuestPDF?

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

  • 代码设计PDF文档:使用C#进行PDF文档设计,完全采用代码的方式。充分利用版本控制系统的优势。

  • 强大的结构元素:可以使用文本、图像、边框、表格等多种结构元素来组成PDF文档。

  • 全面的布局引擎:专为PDF文档生成和分页支持而设计的布局引擎。

  • 简洁易懂的API:使用简洁且易于理解的C# Fluent API编写代码,并利用IntelliSense快速发现可用选项。

  • 热重载功能:节省时间的热重载功能,允许在不重新编译代码的情况下实时预览PDF文档。

GitHub

https://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 class 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 class Program{    static void Main(string[] args)    {        QuestPDF.Settings.License = new QuestPDF.Infrastructure.LicenseType();//防止证书需要提示出错        var document = new SimpleDocument();        // 生成PDF文件        document.GeneratePdf("example.pdf");    }}

运行后,生成pdf文件。

示例表格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 class 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.Views
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;using SkiaSharp;using SkiaSharp.Extended.Svg;
namespace TestApp{    public class 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官网。


该文章在 2024/6/8 23:57:24 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved