前言

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

.NET 工具库高效生成 PDF 文档的更多相关文章

  1. 使用PHP生成PDF文档

    原文:使用PHP生成PDF文档 实际工作中,我们要使用PHP动态的创建PDF文档,目前有许多开源的PHP创建PDF的类库,今天我给大家来介绍一款优秀的PDF库,它就是TCPDF,TCPDF是一个用于快 ...

  2. Spring Boot集成JasperReports生成PDF文档

    由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲染生成PDF文档.本人文采欠缺,写作能力 ...

  3. 利用Java动态生成 PDF 文档

    利用Java动态生成 PDF 文档,则需要开源的API.首先我们先想象需求,在企业应用中,客户会提出一些复杂的需求,比如会针对具体的业务,构建比较典型的具备文档性质的内容,一般会导出PDF进行存档.那 ...

  4. 如何从Windows Phone 生成PDF文档

    我需要从我的Windows Phone应用程序生成PDF. 遗憾的是没有标准的免费的PDF生成库在Windows Phone上运行. 我不得不自己生成PDF,通过直接写入到文件格式. 这竟然是真的很容 ...

  5. 自动把动态的jsp页面(或静态html)生成PDF文档,并且上传至服务器

    置顶2017年11月06日 14:41:04 阅读数:2311 这几天,任务中有一个难点是把一个打印页面自动给生成PDF文档,并且上传至服务器,然而公司框架只有手动上传文档,打印时可以保存为PDF在本 ...

  6. 手把手教你使用 Java 在线生成 pdf 文档

    一.介绍 在实际的业务开发的时候,研发人员往往会碰到很多这样的一些场景,需要提供相关的电子凭证信息给用户,例如网银/支付宝/微信购物支付的电子发票.订单的库存打印单.各种电子签署合同等等,以方便用户查 ...

  7. Aspose.Words操作word生成PDF文档

    Aspose.Words操作word生成PDF文档 using Aspose.Words; using System; using System.Collections.Generic; using ...

  8. DocFX生成PDF文档

    使用DocFX生成PDF文档,将在线文档转换为PDF离线文档. 关于DocFX的简单介绍使用DocFX生成文档 使用docfx 命令 1.下载 https://github.com/dotnet/do ...

  9. qt 利用 HTML 生成PDF文档,不能显示jpg图片

    利用 QPrinter 和html 生成 pdf文档 其中用html语句有显示图片的语句 但只能显示png格式的图片,不能显示jpg格式图片. 经过排查:语法,文件路径等都正确,最终在stack ov ...

  10. ireport图形化界面生成pdf文档

    一.ireport软件安装 1.下载软件的官网 https://community.jaspersoft.com/project/ireport-designer/releases 2.安装软件   ...

随机推荐

  1. [rCore学习笔记 07]移除标准库依赖

    改造Rust hello world 移除println!宏 rustc添加对裸机的支持 rustup target add riscv64gc-unknown-none-elf detail rus ...

  2. 彻底搞懂python super函数的作用

    super() 的入门使用 在类的继承中,如果重定义某个方法,该方法会覆盖父类的同名方法,但有时,我们希望能同时实现父类的功能,这时,我们就需要调用父类的方法了. 调用父类同名方法有两种方式: 1.调 ...

  3. 写写java中的optional

    当我们写代码的时候经常会碰见nullpointer,所以在很多情况下我们需要做各种非空的判断.JDK8中引入了optional,他是一个包装好的类,我们可以把对象传入optional对象中,接下来就可 ...

  4. hive导入mysql

    hive测试--HIVE数据分析02 题目: 4.处理结果入库:(在虚拟机安装mysql)    将上述统计分析的结果数据保存到mySQL数据库中. #text3_1入库 #1.添加驱动,在hive的 ...

  5. 【RabbitMQ】05 通配符模式

    需要设定交换机模式为通配符模式 Topic 在绑定规则上采用通配描述实现动态绑定 创建通配符模式的生产者 package cn.dzz.topicQueue; import com.rabbitmq. ...

  6. 【DataBase】MySQL根据父节点查询下面的所有子节点

    表结构如下: /* Navicat Premium Data Transfer Source Server : 主机 Source Server Type : MySQL Source Server ...

  7. 【WEB】URL文件

    早些年接触电脑的时候就有这个东西,去网站上下载盗版游戏,网站会附加这种URL文件 双击运行之后是打开浏览器跳转到该文件描述的网址 我从来没想过这东西里面写的是什么 百度经验: https://baij ...

  8. 【Spring Data JPA】06 全注解配置(非SpringBoot整合)

    总依赖组件坐标: <properties> <spring.version>5.2.8.RELEASE</spring.version> <hibernate ...

  9. 绝对要收藏!!! JavaEE开发常用注解

    目录 前言 1.Mybatis常用注解 2.SpringMVC常用注解 3.Spring常用注解 1. IoC注解 2. DI注解 3. 事务注解 4.SpringBoot常用注解 5.Lombok注 ...

  10. CyberDog测试视频 —— 【开箱】小米"限量"机器狗!被我玩坏了...

    地址: https://www.youtube.com/watch?v=3ntAhy3thXM PS. 现在的智能机器人其实真的没有人们想象中的那么智能.感觉现在的智能机器人最为有用的功能一个是倒地自 ...