HTML文件转PDF输出丢失文本内容,尝试多款工具仍无法解决求助
问题根因与解决方案
绝大多数HTML转PDF输出无文本的问题都是中文字体缺失导致:你使用的iTextSharp、OpenHtmlToPdf、NReco.PdfGenerator三类工具默认均无内置中文字体渲染支持,当HTML中用到的字体未被工具注册时,文本会被直接跳过渲染,最终呈现空白内容。除此之外编码读取错误、CSS资源加载失败也会触发同类问题,对应解决方法如下:
1. 适配工具配置修复问题
OpenHtmlToPdf修改后代码
需要提前把HTML中用到的字体文件(比如微软雅黑msyh.ttc、思源黑体等)放到本地可读取路径,手动注册到工具中:
using System.IO; using System; using OpenHtmlToPdf; namespace test { class te { static void Main(string[] args) { // 读取HTML时明确指定编码,避免乱码 string html = File.ReadAllText(@"C:/Temp/input.html", System.Text.Encoding.UTF8); var pdf = Pdf.From(html) // 注册中文字体,第二个参数要和HTML中font-family的字体名称完全匹配 .WithFont(@"C:/Temp/msyh.ttc", "Microsoft YaHei") // 可自定义纸张规格 .OfSize(PaperSize.A4); byte[] content = pdf.Content(); File.WriteAllBytes(@"C:/Temp/Test.pdf", content); } } }
NReco.PdfGenerator修改后代码
NReco底层依赖wkhtmltopdf,需要补充编码、资源路径配置,同时确保用到的字体已安装到系统字体目录或在参数中指定加载路径:
using System.IO; using System; using NReco.PdfGenerator; namespace test { class te { static void Main(string[] args) { var htmlToPdf = new NReco.PdfGenerator.HtmlToPdfConverter(); // 若未将wkhtmltoPdf加入系统PATH,需手动指定执行文件所在目录 htmlToPdf.WkHtmlToPdfPath = @"你的wkhtmltopdf执行文件所在目录路径"; // 补充自定义参数:指定编码、开启字体抗锯齿 htmlToPdf.CustomWkHtmlArgs = "--encoding utf-8 --enable-font-antialiasing"; // 第二个参数填写HTML的根目录,用于加载相对路径的CSS、图片等资源 htmlToPdf.GeneratePdfFromFile(@"C:/Temp/input.html", @"C:/Temp/", @"C:/Temp/export.pdf"); } } }
2. 其他排查项
- 检查原HTML的CSS配置,确保
font-family指定的字体名称和你注册的字体名称完全一致,无拼写错误 - 如果HTML引用了外部CSS文件,确保程序运行账号有对应文件的读取权限,不要将资源放在系统权限受限的目录下
- 可先写一段仅包含纯中文、内联CSS的简化测试HTML验证代码效果,排除原HTML本身的样式冲突问题
内容的提问来源于stack exchange,提问作者Janik313
相关产品推荐
相关产品推荐

