.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技术匠]** 社区,与其他热爱技术的同行一起交流心得,共同成长!优秀是一种习惯,欢迎大家留言学习!

相关推荐
FreeBuf_6 小时前
微软365 PDF导出功能存在本地文件包含漏洞,可泄露敏感服务器数据
服务器·microsoft·pdf
深盾科技10 小时前
.NET nupkg包的深度解析与安全防护指南
.net
追逐时光者14 小时前
一个 .NET 开源、免费、以社区为中心的单元测试框架
后端·.net
熊出没15 小时前
Vue前端导出页面为PDF文件
前端·vue.js·pdf
最懒的菜鸟17 小时前
MinerU将PDF转成md文件,并分拣图片
人工智能·pdf
百锦再1 天前
详细解析 .NET 依赖注入的三种生命周期模式
java·开发语言·.net·di·注入·模式·依赖
开开心心_Every1 天前
便捷的电脑自动关机辅助工具
开发语言·人工智能·pdf·c#·电脑·音视频·sublime text
用什么都重名1 天前
MinerU:高效智能PDF文档解析工具完全指南
人工智能·python·pdf·mineru·makedown
Xiaouuuuua1 天前
一个简单的脚本,让pdf开启夜间模式
java·前端·pdf