在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
相关产品推荐
相关产品推荐

