ASP.NET Core 3.1导出PDF报PdfFonts.GetFontMetrics数组越界错误
StiReport导出PDF报PdfFonts.GetFontMetrics Arial字体数组越界解决方法
这个错误触发在PDF导出的字体度量解析阶段,核心是字体资源缺失、模板字体配置异常、组件版本bug三类原因,按以下顺序排查即可:
- 优先排查运行环境字体问题
ASP.NET Core 3.1项目部署在Linux、Docker容器时,系统默认不自带Windows平台的Arial字体,StiReport找不到对应字体时走内置fallback解析逻辑,会直接触发这个数组越界异常。- 若部署在Windows系统:打开系统字体目录
C:\Windows\Fonts,检查Arial字体系列文件(arial.ttf、arialbd.ttf等)是否存在、是否损坏,可右键重新安装Arial字体后重启应用测试。 - 若部署在Linux/Docker环境:手动安装微软核心字体包,Debian/Ubuntu系环境执行以下命令:
执行完成后通过apt-get update apt-get install -y ttf-mscorefonts-installer fontconfig fc-cache -fvfc-list | grep Arial命令确认字体已被系统识别,再重启应用测试导出。
- 若部署在Windows系统:打开系统字体目录
- 检查报表模板字体配置
打开Mahdi.mrt模板,全局排查所有文本、表格元素的字体设置:- 确认没有引用已损坏、被删除的自定义Arial字体变体
- 跨环境部署场景建议把模板内所有字体替换为可自由分发的开源字体(如Noto Sans、文泉驿系列字体),从根源避免字体缺失问题
- 可在加载报表前手动向StiReport注册对应字体文件,避免自动查找失败:
// 替换为你环境中实际的Arial字体文件路径 StiOptions.FontsHelper.AddFontFromFile("Arial", Path.Combine(path, "Fonts", "arial.ttf")); StiReport Report = new StiReport(); Report.Load(Path.Combine(path, "Repot", "Mahdi.mrt")); Report.Render();
- 修复组件版本已知bug
早期适配.NET Core 3.1的Stimulsoft Report版本,确实存在PdfFonts.GetFontMetrics方法解析特定版本Arial字体时触发数组越界的已知问题:- 将项目内所有Stimulsoft相关NuGet包(Stimulsoft.Report、Stimulsoft.Report.Export等)升级到对应支持.NET Core 3.1的最新稳定版,不要使用预览版
- 升级后清理项目bin、obj目录,重新编译发布后测试
- 排查导出配置问题
你代码中传入的Settings对象如果是自定义的StiPdfExportSettings实例,先替换为默认初始化的实例测试,排除字体嵌入、子集化相关配置错误导致的异常:var pdfSettings = new StiPdfExportSettings(); Report.ExportDocument(StiExportFormat.Pdf, Path.Combine(path, "Repot", "MyPdf.pdf"), pdfSettings);
注意:路径拼接建议使用
Path.Combine方法,不要手动写\\分隔符,避免跨系统部署时出现路径识别错误。
内容的提问来源于stack exchange,提问作者Mshdi Ojaghi
相关产品推荐
相关产品推荐

