新闻中心
C#如何实现PDF文件生成 QuestPDF库使用教程
QuestPDF 是 .NET 平台最轻量现代的 PDF 生成库,基于 Fluent API 用 C# 直接描述文档结构,需注册中文字体(如 Noto Sans CJK)以支持中文,安装 via NuGet,.NET 6+ 原生兼容。

用 C# 生成 PDF,QuestPDF 是目前最轻量、现代且易上手的开源库之一。它基于 Fluent API 设计,用 C# 代码直接描述文档结构(类似 HTML + CSS),无需模板引擎或外部依赖,编译即用。
安装 QuestPDF
在项目中通过 NuGet 安装:
- Visual Studio:右键项目 → “管理 NuGet 包” → 搜索并安装 QuestPDF
- 命令行:
dotnet add package QuestPDF
注意:.NET 6+ 项目可直接使用;若用 .NET Framework,请确认版本兼容性(建议升级至 .NET 6/7/8)。
快速生成一个简单 PDF
以下是最小可运行示例,生成含标题和段落的 PDF:
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
<p>// 初始化(只需一次,通常放在 Program.cs 或 Startup)
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Content().Element(ComposeContent);
});
})
.GeneratePdf("output.pdf");</p><p>void ComposeContent(IContainer container)
{
container
.PaddingVertical(40)
.Column(column =>
{
column.Item().Text("欢迎使用 QuestPDF!").FontSize(24).Bold();
column.Item().Text("这是一个由 C# 代码生成的 PDF 文档。").FontSize(14);
});
}运行后会在当前目录生成 output.pdf。关键点:
-
Document.Create定义整个文档 -
Page控制页面尺寸、边距、页眉页脚 -
是主体区域,用
Content()Column/Row/Grid布局 - 所有样式(字体、颜色、对齐等)链式调用,直观清晰
常用功能与写法
QuestPDF 支持表格、图片、分页、页码、条件内容等实用特性:
OpenAI Codex
可以生成十多种编程语言的工作代码,基于 OpenAI GPT-3 的自然语言处理模型
144
查看详情
-
表格:用
Table+ColumnsDefinition+Cell构建,支持自动列宽、跨行跨列 -
图片:用
.Image(bytes)或.Image(path),支持缩放、居中、比例约束 -
页码:在页脚中用
page.Number()+page.TotalPages(),如"第 {0} 页,共 {1} 页" -
条件渲染:C# 的
if/foreach可直接嵌入布局逻辑,比如只在数据非空时显示某区块 -
自定义字体:需先注册(支持 TTF/OTF),再用
.Font(...)应用,中文需指定支持 Unicode 的字体(如 Noto Sans CJK)
中文支持与字体配置
默认不支持中文,需手动加载中文字体:
// 注册字体(推荐放在程序启动时执行一次)
QuestPDF.Settings.License = LicenseType.Community;
FontManager.RegisterFont(File.ReadAllBytes("NotoSansCJKsc-Regular.otf"));
<p>// 使用时指定字体
.Text("你好,世界!").Font("Noto Sans CJK SC");推荐字体:
- 免费可商用:Google 的 Noto Sans CJK(SC/TC/JP/KO 版本按需选)
- 系统字体(Windows):
"Microsoft YaHei"或"SimSun",但跨平台部署需谨慎
未正确注册字体时,中文会显示为空白或方块,这是新手最常遇到的问题。
基本上就这些。QuestPDF 上手快、调试直观、扩展性强,适合报表、合同、发票、导出文档等场景。不复杂但容易忽略字体和布局嵌套层级——多看官方 示例库,5 分钟就能写出专业 PDF。
以上就是C#如何实现PDF文件生成 QuestPDF库使用教程的详细内容,更多请关注其它相关文章!
# 可直接
# 广东软文营销推广排名前十
# 南昌红谷滩网站推广公司
# 泰州网站建设思政课教案
# 营销推广月活动启动
# 晋城seo优化案例
# 网站平台推广销售话术
# 青海网站优化效果怎么样
# 哈尔滨网站优化电池流程
# 营销如何去推广销售服务
# 团风自媒体推广网站
# 自然语言
# 这是
# 最轻
# 不规范
# 解决办法
# css
# 链式
# 如何实现
# 放在
# 文档
# .net
# c#
# google
# microsoft
# win
# pdf
# ai
# windows
# go
# html
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
Linux如何排查内存不足OOME问题_LinuxOOM分析教程
J*a最大堆Heapify方法修复:索引计算与边界条件深度解析
CSS Box Model与弹性按钮:维持布局稳定的动画实践
移动端XML文件怎么转换成Excel 手机和平板上的解决方案
c++如何使用std::memory_order控制原子操作顺序_c++ C++11内存模型详解
高德地图公交到站提醒失败如何解决 高德提醒权限设置
Lar*el如何正确地在控制器和模型之间分配逻辑_Lar*el代码职责分离与架构建议
Python多版本共存与虚拟环境管理深度指南
优化Django表单:提交验证失败后保留用户输入
修复二维数组索引越界异常:一维循环到二维坐标的正确映射
JUnit5/Mockito:优雅测试内部依赖与异常处理的实践
菜鸟取件码是什么怎么查 最全查询渠道汇总
J*aScript类型检查_j*ascript代码规范
厨房不锈钢水槽发黑生锈怎么处理_水槽用可乐+锡纸2分钟抛亮如新
搜狗浏览器如何使用密码生成器创建强密码 搜狗浏览器内置密码安全工具
Lar*el 递归关系中排除指定分支的教程
J*aScript数据结构转换:将对象数组按类别分组
Log4j Console Appender性能瓶颈与高并发优化策略
解决Tabulator日期时间排序问题的专业指南
晋江读书网页版在线登录 晋江读书电脑版官网
QQ邮箱官方网页版登录 QQ邮箱个人邮箱快速访问
《马克思佩恩3》早期版本曝光 UI设计曾多次调整!
sublime怎么覆盖插件的默认快捷键_sublime快捷键优先级与设置
Angular Material 垂直步进器:实现底部到顶部排序的教程
从OpenAI API响应中高效提取生成文本
Python中高效访问嵌套字典与列表中的键值对
CSS子选择器:如何区分并样式化嵌套列表的子层级
Vue.js 图片显示异常排查:理解应用挂载范围与DOM ID唯一性
Word2013如何插入视频和音频媒体_Word2013媒体插入的多媒体支持
地铁跑酷免费秒玩入口链接 地铁跑酷小游戏免费秒玩网站
c++中的std::launder有什么实际用途_c++对象生命周期与指针优化
一加Ace 6T支持全新明眸护眼:通过了最严苛的护眼小金标认证
虫虫漫画精品漫画官网_虫虫漫画精品漫画官网进入精品漫画
印象笔记如何设提醒任务防漏执行_印象笔记设提醒任务防漏执行【任务提醒】
今日头条怎么同步内容到抖音_今日头条内容同步到抖音教程
提升屏幕阅读器对“m”时间单位的播报准确性:HTML与CSS组合解决方案
Python中如何避免重复条件判断:利用数据结构实现动态逻辑
解决Python logging 中 datefmt 导致时间戳固定不变的问题
Win10快速启动功能利弊分析 Win10开启或关闭快速启动教程【技巧】
如何在离线环境中使用Composer_Composer离线安装依赖包的技巧与策略
Composer的 "check-platform-reqs" 命令有什么用_在部署前检查生产环境是否满足Composer依赖需求
如何仅使用CSS更改登录界面背景图像图标的颜色
PyTorch模型训练效果不佳?深入剖析常见错误与调试技巧
c++如何使用TBB库进行任务并行_c++ Intel线程构建模块
Descript怎样用AI剪辑自动去噪_Descript用AI剪辑自动去噪【自动降噪】
excel如何生成目录 excel一键生成工作表目录超链接
React/Next.js中实现列表项的动态选择与移动
4399网页游戏电脑版全新入口 4399电脑端在线玩指南
深入理解Go语言中的指针类型:以*string为例
漫蛙官网正版漫画入口 漫蛙2官方网页登录地址


2025-12-13
浏览次数:次
返回列表
Content()