C# Windows应用中NReco.PdfGenerator自定义非Unicode字体失效解决方案咨询
解决NReco.PdfGenerator转换自定义非Unicode字体(如Kurti Dev 010)的PDF显示问题
要让NReco.PdfGenerator(基于wkhtmltopdf)正确渲染Kurti Dev 010这类非Unicode自定义字体,需按以下步骤操作:
1. 确保字体已安装到Windows系统
- 将Kurti Dev 010字体文件(如
.ttf或.otf)安装到Windows系统:打开控制面板→字体,直接拖拽字体文件到字体窗口完成安装。wkhtmltopdf依赖系统字体库,未安装的字体无法被识别。
2. 在HTML中明确指定字体样式
在HTML文本的样式中精准指定字体名称(需与系统中显示的字体名称完全一致,比如Kurti Dev 010),示例如下:
<style> .custom-font-text { font-family: 'Kurti Dev 010', sans-serif; } </style> <div class="custom-font-text">需要用Kurti Dev 010显示的文本内容</div>
确保所有需要该字体的文本都被对应的样式类覆盖。
3. 配置HtmlToPdfConverter的自定义参数
通过CustomWkHtmlArgs添加wkhtmltopdf的命令行参数,优化非Unicode字体的渲染:
var htmlToPdf = new HtmlToPdfConverter(); // 根据字体编码添加对应参数,UTF-8或对应单字节编码(如ISO-8859-1) htmlToPdf.CustomWkHtmlArgs = "--encoding UTF-8 --no-sandbox"; // 原有的其他配置保持不变 var margins = new PageMargins(); margins.Top = 5; margins.Bottom = 15; margins.Left = 10; margins.Right = 5; htmlToPdf.Zoom = 1f; htmlToPdf.Margins = margins; htmlToPdf.Size = NReco.PdfGenerator.PageSize.A4; htmlToPdf.Orientation = PageOrientation.Portrait; htmlToPdf.GeneratePdf(dataText, null, FILEPATH);
如果Kurti Dev 010使用的是特定单字节编码,需将--encoding参数值改为对应编码(如ISO-8859-1)。
4. 保证HTML文本的编码一致性
传入的HTML字符串编码需与--encoding参数指定的编码一致。若HTML文本来自外部文件或其他来源,需明确编码转换:
// 示例:从GB2312编码的文件读取HTML文本 byte[] htmlFileBytes = File.ReadAllBytes("your-html-file.html"); string dataText = Encoding.GetEncoding("GB2312").GetString(htmlFileBytes);
5. 调试字体加载情况
若问题仍存在,可添加调试参数查看字体加载日志,确认字体是否被正确识别:
htmlToPdf.CustomWkHtmlArgs += " --log-level debug";
运行程序后查看输出日志,搜索Kurti Dev 010关键字,确认是否有字体加载成功的记录。
内容的提问来源于stack exchange,提问作者xyz
相关产品推荐
相关产品推荐

