QuestPDF 是一个用于生成 PDF 文件的 .NET 库,它提供了一个简洁的 API 和灵活的布局选项,使得在 .NET 应用程序中创建 PDF 文件变得更加简单。

支持多平台,支持的功能有

  • 合并文档
  • 附加文件
  • 提取页面
  • 加密/解密
  • 扩展元数据
  • 限制访问
  • 针对 Web 进行优化
  • 叠加层 / 底层

安装

第一步,老规矩,先安装

dotnet add package QuestPDF

使用


using QuestPDF.Infrastructure; QuestPDF.Settings.License = LicenseType.Community;
// 创建 PDF 文档并进行布局
var document = Document.Create(container =>
{
container.Page(page =>
{
page.Margin(50); // 设置页面边距 page.Content().Column(column =>
{
column.Item().Text("Hello, NetShare!").FontSize(24).Bold(); // 添加文本
column.Item().Text("Welcome to follow the official account: Net Sharing");
column.Item().Image("20210517111144223.png"); // 插入图像 });
});
}); // 保存 PDF 文件
document.GeneratePdf("simple-example.pdf");

  • Document.Create() 用于创建 PDF 文档。
  • container.Page() 设置页面内容。
  • page.Content() 设置页面的内容布局,支持各种布局管理器如 Column, Row
  • column.Item() 用于添加单个项目,例如文本、图像等。
  • document.GeneratePdf() 用于生成 PDF 文件并保存到指定路径。

样式和布局

QuestPDF 提供了丰富的布局选项,可以方便地调整页面的样式。比如:

  • 字体和样式:你可以调整文本的字体、大小、颜色、加粗、斜体等。
  • 页边距和对齐方式:设置页面的页边距,并支持内容的对齐。
  • 自定义布局:支持 Column, Row, Stack 等布局管理器,来实现更复杂的布局设计。
column.Item().Text("Centered Text")
.AlignCenter()
.FontSize(18)
.FontColor(Colors.Blue.Medium);

高级功能:生成动态内容,表格

如果你需要动态生成 PDF 内容,可以根据数据生成多个条目。

 var rows = new[]
{
new { Name = "John", Age = 30 },
new { Name = "Jane", Age = 25 },
new { Name = "Tom", Age = 35 }
}; var document = Document.Create(container =>
{
container.Page(page =>
{
page.Content().Column(column =>
{
column.Item().Text("Dynamic Table").AlignCenter().FontSize(24).Bold(); column.Item().Table(table =>
{
table.ColumnsDefinition(columns =>
{
columns.ConstantColumn(150); // 固定宽度
columns.RelativeColumn(); // 自动分配剩余空间
}); table.Header(header =>
{
header.Cell().Text("Name");
header.Cell().Text("Age");
}); foreach (var row in rows)
{
table.Cell().Text(row.Name);
table.Cell().Text(row.Age);
}
});
});
});
}); // 保存 PDF 文件
document.GeneratePdf("simple-example.pdf");

总结

  • QuestPDF 是一个功能强大的 PDF 生成库,适用于需要灵活布局和自定义样式的场景。
  • 它支持常见的布局管理器(如列和行),以及文本、图像、表格等元素的添加。
  • 你可以使用 QuestPDF 创建简单的文档,也可以处理更复杂的需求,如动态内容、复杂的样式设置等。
  • 该库可供年总收入低于 100 万美元的任何个人或企业免费使用,或作为非营利组织运营,或者是 FOSS 项目,一般公司完全够使用条件。项目要设置QuestPDF.Settings.License = LicenseType.Community;

探索 QuestPDF:全平台支持、多功能、专业级的 .NET PDF 库的更多相关文章

  1. (数据科学学习手札86)全平台支持的pandas运算加速神器

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 随着其功能的不断优化与扩充,pandas已然成为 ...

  2. 【Asphyre引擎】Asphyre时隔3年,更名为PXL,全平台支持!

    ps:回忆日志 新版本10月初就推出了,我第一时间(10.2日更新,我当天就看到了)下载下来.发现部分Demo需要XE8才能编译通过,又去下载了一个XE8.折腾完已经深夜,只是粗粗的把Demo都编译了 ...

  3. 可能是目前市面上唯一能够支持全平台的RTMP推流组件:Windows、Linux、Android、iOS、ARM

    EasyRTMP是什么? EasyRTMP是一套RTMP直播推送功能组件,内部集成了包括:基本RTMP协议.断线重连.异步推送.环形缓冲区.推送网络拥塞自动丢帧.缓冲区关键帧检索.事件回调(断线.音视 ...

  4. 全平台轻量开源verilog仿真工具iverilog+GTKWave使用教程

    前言 如果你只是想检查Verilog文件的语法是否有错误,然后进行一些基本的时序仿真,那么Icarus Verilog 就是一个不错的选择.相比于各大FPGA厂商的IDE几个G的大小,Icarus V ...

  5. 海康、大华NVR网络硬盘录像机录像无插件全平台访问实现—录像回放时间轴功能实现方法

    在之前的博文中我们有介绍方案*NVR硬件录像机web无插件播放方案(支持取特定时间段视频流)*:该片博文旨在介绍时间轴功能的实现和相关接口的调用: 时间轴样式展示: 问题分析 对于 时间轴的展示实现需 ...

  6. ewebeditor下利用ckplayer增加html5 (mp4)全平台的支持

    学校数字化平台富文本编辑器一直用的ewebeditor,应该说非常的好,支持常用office文档的直接导入,极大的方便了老师们资料的上传,最近在规划整个数字化校园向全平台改版,框架采用bootstra ...

  7. 报表开发神器!DevExpress Reporting v19.1全平台新功能解析

    行业领先的.NET界面控件DevExpress Reporting全新发布了v19.1版本,本文主要为大家介绍.NET Reporting v19.1中发布的所有平台的新功能,欢迎下载v19.1试用, ...

  8. 苏宁基于Spark Streaming的实时日志分析系统实践 Spark Streaming 在数据平台日志解析功能的应用

    https://mp.weixin.qq.com/s/KPTM02-ICt72_7ZdRZIHBA 苏宁基于Spark Streaming的实时日志分析系统实践 原创: AI+落地实践 AI前线 20 ...

  9. EasyNVR摄像机网页H5全平台无插件直播流媒体播放服务二次开发之接口鉴权示例讲解

    背景需求 EasyNVR的使用者应该都清楚的了解到,EasyNVR一个强大的功能就是可以进行全平台的无插件直播.主要原因在于rtsp协议的视频流(默认是需要插件才可以播放的)经由EasyNVR处理可以 ...

  10. 全平台Markdown笔记软件——Notable

    简介 The markdown-based note-taking app that doesn't suck. 一款简介.跨平台的本地笔记软件,github地址:https://github.com ...

随机推荐

  1. vue中获取v-for循环出来的元素的相对于父级的最左边的距离

  2. Vscode之常用插件

    code runner 可以直接在编辑器中运行代码,查看结果,非常方便,一键运行. PHP Intelephense PHP代码提示工具,支付代码提示.查找定义.类搜索等功能,非常强大. php de ...

  3. offline RL · PbRL | LiRE:构造 A>B>C 的 RLT 列表,得到更多 preference 数据

    论文标题:Listwise Reward Estimation for Offline Preference-based Reinforcement Learning,ICML 2024. arxiv ...

  4. scikit-learn中的Pipeline:构建高效、可维护的机器学习流程

    我们使用scikit-learn进行机器学习的模型训练时,用到的数据和算法参数会根据具体的情况相应调整变化, 但是,整个模型训练的流程其实大同小异,一般都是加载数据,数据预处理,特征选择,模型训练等几 ...

  5. 【VMware VCF】管理 VCF 环境中组件的密码策略。

    使用 SDDC Manager 中的"密码管理"功能可以统一管理 VCF 环境中组件的用户密码,比如更新(Update).轮换(Rotate)以及修复(Remediate)组件的密 ...

  6. uni-app下webview支付宝支付调起问题

    前情 uni-app是我很喜欢的跨平台框架,它能开发小程序,H5,APP(安卓/iOS),对前端开发很友好,自带的IDE让开发体验也很棒,公司项目就是主推uni-app. 因疫情影响,公司不能组织聚餐 ...

  7. IO介绍-中

    系统接口 块设备接口 块设备:数据的存取和传输都是以数据块为单位的设备.典型的块设备是磁盘.该设备的基本特征是传输速率高,另一特征是可寻址,即能指定数据的输入源地址及输出的目标地址,可随机读写.磁盘设 ...

  8. 如何为在线客服系统的 Web Api 后台主程序添加 Bootstrap 启动页面

    背景 我在业余时间开发了一款自己的独立产品:升讯威在线客服与营销系统.这个系统的核心后台主程序,在最早期是完全没有页面,经常有朋友部署之后,一访问是 404,以为没有部署成功.我一看这肯定不行啊,可后 ...

  9. django推导流程

    目录 一.纯手撸web框架 二.基于wsgiref模块 三.代码封装优化 四.动静态网页 五.jinja2模块 六.前端.后端.数据库三者联动 一.纯手撸web框架 1.web框架的本质 理解1:连接 ...

  10. 【XML编程与WEB服务】XML入门

    目录 XML -入门 XML文档组成 XML文档规则 XML元素 特殊字符数据引用 CDATA段 空白处理 XML -入门 XML(Extensible Markup Language):可扩展的标记 ...