.NET 工具库高效生成 PDF 文档

前言

QuestPDF 是一个开源 .NET 库,用于生成 PDF 文档。使用了C# Fluent API方式可简化开发、减少错误并提高工作效率。利用它可以轻松生成 PDF 报告、发票、导出文件等。

项目介绍

QuestPDF 是一个革命性的开源 .NET 库,它彻底改变了我们生成 PDF 文档的方式。

QuestPDF 的核心思想在于使用声明式的 C# 代码来描述 PDF 文档的结构和样式。

这种方法与我们使用 HTML 和 CSS 构建网页的方式非常相似,我们能够迅速上手,并轻松创建复杂的 PDF 文档。

项目特点

  • 简洁强大的 API:QuestPDF 的 API 设计直观易用,几乎无需查阅文档即可上手。通过一系列流畅的方法链,只需少量代码即可描述复杂的文档结构。
  • 高性能:QuestPDF 在性能方面表现出色,能够快速生成大型文档。即使面对包含数千页的复杂报表,也能轻松应对,这得益于其高效的内部算法和优化的架构。
  • 跨平台支持:应用运行在 Windows、macOS 还是 Linux 上,QuestPDF 都能完美运行。跨平台特性使其在构建云原生应用时尤为突出。
  • 零依赖:不同于其他 PDF 库,QuestPDF 不需要任何外部依赖。无需安装额外字体或使用第三方库,从而大大简化了部署和维护流程。
  • 丰富的元素支持:QuestPDF 支持多种文档元素,包括文本、图像、表格和条形码等。它甚至支持复杂的图表绘制,这样的文档更具表现力。
  • 动态内容与智能分页:QuestPDF 可以处理动态生成的内容,并自动解决分页问题。不再需要担心内容溢出或分页不当的问题。
  • 强大的调试工具:QuestPDF 提供了强大的调试工具,可以快速定位并解决问题。还能可视化地查看文档结构,轻松找出布局错误。

相比传统 PDF 生成库,QuestPDF 简化了 PDF 生成的过程,提供了更好的开发体验和更高的生产力。

项目使用

安装QuestPDF Nuget包

搜索 QuestPDF 包进行安装,具体如下图所示

项目示例

创建一个WebAPI项目,利用QuestPDF快速生成PDF文件。

1、需要在Program添加配置信息

复制代码
#region QuestPDF设置
// 1、请确保您有资格使用社区许可证,不设置的话会报异常。
Settings.License = LicenseType.Community;
// 2、禁用QuestPDF库中文本字符可用性的检查
Settings.CheckIfAllTextGlyphsAreAvailable = false;
#endregion

默认情况下,使用 QuestPDF 生成 PDF 文档时,它会检查所使用的字体是否支持文本中的所有字符,并在发现不能显示的字符时输出一条警告消息。这个选项可以确保文本中的所有字符都能正确地显示在生成的 PDF 文件中。

2、生成文档控制器代码

复制代码
/// <summary>
/// 创建PDF文件
/// </summary>
/// <returns></returns>
[HttpGet(Name = "GeneratePdf")]
public IActionResult GeneratePdf()
{
    //创建文档
    var document = CreateDocument();
​
    // 生成PDF文件
    var pdf = document.GeneratePdf();
​
    // 返回文件流
    return File(pdf, "application/pdf", "QuestPDFDemo.pdf");
}

3、运行效果

调用接口生成PDF文档,下载就可以预览,方便快捷,编写方便,大家可以去试试。

部分示例

文本元素

文本元素用于绘制带有默认或自定义样式的文本。文本总是尽可能占用最少的空间。

如果文本字符串很长,该元素可能会占据整个宽度并换行到下一行。元素支持分页。

对于大多数不需要复杂格式化的情况,简化版的文本组件就足够了,如下所示:

复制代码
.Text("Sample text")
.Text("Red big text").FontColor("#F00").FontSize(24)

当希望在文本字符串中间更改样式、插入页码或包含自定义组件时,请使用"文本块"方法,如下所示:

复制代码
.Text(text =>
{
    text.Span("This is a normal text, followed by some ");
    text.Span("underlined text.").Underline();
});

静态图像

元素可用于在文档内放置图像。默认情况下,Image 会保持图像的纵横比。图像被加载到一个 SkiaSharp.Image 对象中。

请注意,所有的限制都是继承自 SkiaSharp 的。例如,可用的图像格式可能会因平台而异。

可以使用任何常见的光栅格式的图像,例如 JPG、PNG、BMP 等。

在 C# 中,可以通过以下几种方式提供图像:

复制代码
byte[] imageData = System.IO.File.ReadAllBytes("path/to/logo.png");
container.Image(imageData);
​
//文件名
container.Image("path/myFile.png");
​
//文件流
using var stream = new System.IO.FileStream("logo.png", System.IO.FileMode.Open);
container.Image(stream);

示例展示如何在 QuestPDF 中加载并使用图像,可以根据实际需求选择最合适的加载方式。

还有很多示例,可以查看文档,进行学习和使用。通过官方文档,可以找到更多关于如何使用 QuestPDF 的详细教程和实例。

文档中不仅包含了基本的用法说明,还提供了高级功能的演示。

项目地址

总结

希望本文能为朋友们在生成PDF方面开发带来帮助。欢迎大家在评论区留言讨论,分享您的经验和建议。

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。

也可以加入微信公众号**[DotNet技术匠]** 社区,与其他热爱技术的同行一起交流心得,共同成长!优秀是一种习惯,欢迎大家留言学习!

相关推荐
新缸中之脑3 小时前
用MonkeyOCR解析复杂PDF
pdf
永远是我的最爱8 小时前
基于.NET的小小便利店前台收银系统
前端·sqlserver·.net·visual studio
菜鸟特工00710 小时前
javax.net.ssl.SSLPeerUnverifiedException 异常如何处理
网络协议·.net·ssl
牧马人win11 小时前
Dapper轻量级扩展库SmartDapper
.net·dapper
吹牛不交税12 小时前
安装Framework4.0时提示:Microsoft .NET Framework 4 已是此操作系统的一部分。不需要安装 .NET Framework
microsoft·.net
tiantangzhixia13 小时前
Master PDF Linux 平台的 5.9.35 版本安装与自用
linux·pdf·master pdf
无风听海13 小时前
.NET10之ASP.NET Core的Filter管线
java·asp.net·.net
无风听海14 小时前
.NET10之从进程角度理解dotnet run
.net
开开心心就好1 天前
发票合并打印工具,多页布局设置实时预览
linux·运维·服务器·windows·pdf·harmonyos·1024程序员节
软件工程小施同学1 天前
区块链论文速读 CCF A--VLDB 2025 (1) 附pdf下载
pdf·区块链