VS2019环境iText7调用PdfFontFactory.CreateFont出现NullReferenceException
排查方案
获取详细错误信息的操作步骤
- 开启VS全异常捕获:依次点击菜单栏「调试」>「窗口」>「异常设置」,搜索
System.NullReferenceException并勾选对应复选框,调试运行时会在异常抛出的原始位置中断,可直接查看FontCache静态构造函数内的变量赋值情况,定位具体为空的对象。 - 启用第三方库源码调试:进入「工具」>「选项」>「调试」>「常规」,取消勾选「仅我的代码」,勾选「启用源链接支持」,调试时可直接步进进入iText.IO的
FontCache静态构造函数代码,查看异常触发的具体逻辑。 - 输出程序集加载日志:右键项目进入「属性」>「调试」,在「命令行参数」栏添加
/log:assembly_load.log,运行后在项目输出目录查看日志,确认iText.IO依赖的程序集是否完整加载,静态构造函数空引用多数是依赖项加载失败导致内部初始化对象为空。
兼容性修复方案
由于异常出现在VS升级后,可优先执行以下操作排查:
- 全量清理项目缓存:手动删除项目根目录下的
.vs、bin、obj文件夹,重新生成解决方案,避免旧版本编译器生成的中间文件和新版本VS的编译规则冲突。 - 调整字体创建参数:创建字体时开启嵌入参数,跳过系统字体缓存读取逻辑:
PdfFont bfTimes = PdfFontFactory.CreateFont(StandardFonts.TIMES_ROMAN, PdfEncodings.WINANSI, true);
- 升级iText版本:如果使用的是7.1.x及以下版本的iText,和VS16.11.2自带的.NET编译工具存在兼容性问题,可将iText相关NuGet包升级到7.2.0及以上稳定版本。
内容的提问来源于stack exchange,提问作者dotnetnoob
相关产品推荐
相关产品推荐

