0

0

C#将HTML保存为PDF C#如何把HTML内容转换成PDF文件

畫卷琴夢

畫卷琴夢

发布时间:2026-02-13 10:13:47

|

498人浏览过

|

来源于php中文网

原创

questpdf 最轻量可控但需手动映射html结构;wkhtmltopdf支持完整css/js但依赖外部进程且性能低;webview2渲染完美但部署复杂且仅限windows;中文乱码需统一utf-8编码并注意字体处理。

c#将html保存为pdf c#如何把html内容转换成pdf文件

QuestPDF 生成 PDF 最轻量且可控

如果你只是把简单 HTML 片段(比如报表、邮件模板)转成 PDF,QuestPDF 是目前 C# 生态里最干净的选择——它不依赖系统组件、不调用外部浏览器进程、纯 .NET 实现,且能精确控制布局。但它不解析 HTML 字符串,需要你手动把 HTML 结构映射为 QuestPDF 的 API 调用。

典型做法是:用 HtmlAgilityPack 解析 HTML,再遍历节点,对 <p></p><h1></h1><table> 等标签分别调用 <code>ContainerTextTable 等构建器。表格和样式支持有限,比如 colspan 可以处理,但 CSS Flex/Grid 完全不识别。

示例片段(渲染一个带标题和段落的简单页面):

var doc = Document.Create(container =>
{
    container.Page(page =>
    {
        page.Size(PageSizes.A4);
        page.Margin(20);
        page.Content().Element(ComposeTitle);
    });
});
<p>doc.GeneratePdf("output.pdf");</p><p><span>立即学习</span>“<a href="https://pan.quark.cn/s/cb6835dc7db1" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">前端免费学习笔记(深入)</a>”;</p><p>void ComposeTitle(IContainer container)
{
container
.PaddingVertical(10)
.Text("Hello World").FontSize(24).Bold();
container
.PaddingVertical(5)
.Text("This is a paragraph.").FontSize(12);
}

Wkhtmltopdf + RotativaHtmlToPdf 库做“真 HTML 渲染”

当你需要保留 CSS 样式、字体、媒体查询甚至 JavaScript 渲染后的内容(比如 ECharts 图表截图),就得走 WebKit 渲染路线。Wkhtmltopdf 是底层引擎,Windows/macOS/Linux 都有预编译二进制,C# 通过进程调用或封装库驱动它。

OFFER快
OFFER快

首个全流程托管的 AI 求职 Agent(自动筛选、沟通、网申)

下载

Rotativa.AspNetCore(ASP.NET Core)或 HtmlToPdf(.NET Standard)是常用封装,它们本质都是启动 wkhtmltopdf.exe 并传参。关键点:

  • --no-stop-slow-scripts 必加,否则 JS 执行超时会截断内容
  • --enable-local-file-access 要开,否则 file:// 引用的 CSS/图片加载失败
  • 字体问题常见:Windows 上默认用 SimSun,Linux 上可能缺中文字体,需提前安装并用 @font-face 指向绝对路径
  • 生成时间不可控,单次调用通常 300–800ms,高并发下建议加进程池或改用服务化部署(如独立 PDF 渲染 API)

Microsoft.Web.WebView2 在 .NET 6+ 中可离线渲染但极难稳定

WebView2 基于 Edge Chromium,理论上能完美渲染任意 HTML。但把它用于服务端 PDF 导出,实际踩坑密集:

必须显式创建 CoreWebView2Environment 并指定固定用户数据文件夹,否则多线程下 WebView2 初始化失败;导出 PDF 需调用 PrintToPdfAsync,而该方法仅在 UI 线程可用——意味着你得在后台线程里伪造一个 WinForms/WPF 消息循环,或改用 Dispatcher 调度,极易死锁。

更现实的问题是:它强制依赖目标机器安装 WebView2 Runtime(约 180MB),无法 AOT 发布,且 Linux/macOS 不支持。除非你已锁定 Windows 桌面环境并控制全部部署条件,否则不建议选这条路。

别忽略编码与中文乱码这个高频故障点

所有方案都可能在含中文的 HTML 中输出方块或空格,根源几乎全是编码声明缺失或不一致:

  • HTML 字符串开头必须有 <meta charset="utf-8">,且 HTTP 响应头(如果走 URL 加载)也要设 Content-Type: text/html; charset=utf-8
  • File.ReadAllText(path, Encoding.UTF8) 读取本地 HTML 文件,别依赖默认编码
  • Wkhtmltopdf 若仍乱码,尝试加参数 --encoding utf-8(部分旧版本不支持,需 v0.12.6+)
  • CSS 中避免用系统字体名(如 "微软雅黑"),改用通用族名 font-family: sans-serif,或确保 PDF 引擎能访问对应 TTF 文件

真正麻烦的是混合场景:HTML 里有 Base64 图片、内联 SVG、动态 fetch 数据——这些都会让转换链路变脆弱。与其强求一步到位,不如把 HTML 拆成「静态结构 + JSON 数据」,用模板引擎(如 ScrutorFluid)先渲染为纯净 HTML,再交给 PDF 工具处理。

相关文章

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

436

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

544

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

317

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

ECharts是什么
ECharts是什么

ECharts是基于JavaScript的开源可视化库,能够帮助开发者轻松地实现各种复杂的数据可视化效果,提供了丰富的图表类型和交互功能。本专题为大家提供ECharts是什么的相关的文章、下载、课程内容,供大家免费下载体验。

275

2023.08.04

echarts自适应大小设置
echarts自适应大小设置

使用ECharts的自适应大小设置可以使图表能够根据不同屏幕尺寸和设备进行自适应。一种是使用resize事件,在图表容器大小改变时重新渲染图表;另一种是使用CSS样式,通过设置图表容器的宽度和高度为百分比值,使图表容器根据父元素的大小进行自适应。根据实际需求选择合适的方法,可以使图表在不同设备上都能够良好地显示和交互 。

472

2023.09.13

edge是什么浏览器
edge是什么浏览器

Edge是一款由Microsoft开发的网页浏览器,是Windows 10操作系统中默认的浏览器,其目标是提供更快、更安全、更现代化的浏览器体验。本专题为大家提供edge浏览器相关的文章、下载、课程内容,供大家免费下载体验。

1553

2023.08.21

IE浏览器自动跳转EDGE如何恢复
IE浏览器自动跳转EDGE如何恢复

ie浏览器自动跳转edge的解决办法:1、更改默认浏览器设置;2、阻止edge浏览器的自动跳转;3、更改超链接的默认打开方式;4、禁用“快速网页查看器”;5、卸载edge浏览器;6、检查第三方插件或应用程序等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

390

2024.03.05

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

24

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.3万人学习

AngularJS教程
AngularJS教程

共24课时 | 3.6万人学习

CSS教程
CSS教程

共754课时 | 31万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号