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

在Blazor .NET 6中使用iTextSharp加载自定义TTF字体报错求助

解决iTextSharp.LGPLv2.Core加载自定义TTF字体时的Cp1252编码识别错误

问题原因

你遇到的报错是因为指定的BaseFont.WINANSI(对应Cp1252编码)与目标TTF字体La Belle Aurore的编码不兼容,该字体可能不支持Cp1252编码,或者需要使用Unicode类编码来正确加载。

解决方案

方案1:使用Unicode兼容编码加载(推荐)

改用BaseFont.IDENTITY_H编码,这是处理自定义TTF字体的通用方案,支持多字符集,兼容性更强:

// 先获取字体字节数组
var fontBytes = await httpClient.GetByteArrayAsync("/fonts/LaBelleAurore-Regular.ttf");
// 创建BaseFont实例
var baseFont = BaseFont.CreateFont(
    "La Belle Aurore", 
    BaseFont.IDENTITY_H, 
    BaseFont.NOT_EMBEDDED, 
    BaseFont.NOT_CACHED, 
    fontBytes, 
    null
);
// 包装成Font对象(按需设置字号)
var font = new Font(baseFont, 12);

方案2:直接通过本地路径加载(如果文件可本地访问)

如果字体文件可以通过本地路径直接访问,跳过httpClient获取字节数组的步骤,直接传入文件路径,避免编码识别异常:

var baseFont = BaseFont.CreateFont(
    Server.MapPath("/fonts/LaBelleAurore-Regular.ttf"), 
    BaseFont.WINANSI, 
    BaseFont.NOT_EMBEDDED
);

注意事项

  • 验证httpClient.GetByteArrayAsync是否成功获取到字体文件(可打印fontBytes.Length确认长度大于0)
  • 如果需要将字体嵌入PDF,把BaseFont.NOT_EMBEDDED替换为BaseFont.EMBEDDED
  • 对于非系统自带的自定义字体,优先使用BaseFont.IDENTITY_H或BaseFont.UNICODE编码,避免编码匹配问题

内容的提问来源于stack exchange,提问作者Tomasz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:41:17