QuestPDF 是一个开源 .NET 库,用于生成 PDF 文档。使用了C# Fluent API方式可简化开发、减少错误并提高工作效率。利用它可以轻松生成 PDF 报告、发票、导出文件等。
QuestPDF 是一个革命性的开源 .NET 库,它彻底改变了我们生成 PDF 文档的方式。
QuestPDF 的核心思想在于使用声明式的 C# 代码来描述 PDF 文档的结构和样式。
这种方法与我们使用 HTML 和 CSS 构建网页的方式非常相似,我们能够迅速上手,并轻松创建复杂的 PDF 文档。
相比传统 PDF 生成库,QuestPDF 简化了 PDF 生成的过程,提供了更好的开发体验和更高的生产力。
搜索 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技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!优秀是一种习惯,欢迎大家留言学习!