You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 20:22:36