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

为VB6构建的COMHOST库使用iText7时触发对象引用错误

在VB6 COMHOST环境中使用iText 8.0.1触发“对象引用未设置为实例”错误

问题背景

我正在为遗留VB6应用开发COMHOST库,编译正常,其他功能(包括引入的其他新NuGet包)均可正常运行,但使用iText 8.0.1时遇到异常。相同的iText代码在原生.NET6应用中运行完全正常,排除语法问题;但在VB6托管的COMHOST环境中执行时,会返回空对象并触发Object reference not set to an instance of an object错误。之前项目使用iText 5.5.13,现在升级到8.0.1并重构了代码,希望修复问题而非回退到已废弃的旧版本。

排查过程

  • 初始定位:附加到VB6进程调试.NET代码,最初发现以下代码执行后pdfDoc被设为null,导致后续报错:

    var pdfDoc = new PdfDocument(new PdfReader(pdfTemplate), new PdfWriter(newFileName));
    var form = PdfFormCreator.GetAcroForm(pdfDoc, true);
    

    确认pdfTemplate和newFileName值均正确。

  • 细化调试:调整COMHOST调试设置(关闭优化),拆分代码步骤后,发现实际错误出现在字段赋值行:

    var reader = new PdfReader(pdfTemplate);
    var writer = new PdfWriter(newFileName);
    var pdfDoc = new PdfDocument(reader, writer);
    var form = PdfFormCreator.GetAcroForm(pdfDoc, true);
    form.GetField("shipperAccount").SetValue(shipperAccount); // 错误触发位置
    

    调试即时窗口中,form.GetField("shipperAccount")能正常获取字段实例,shipperAccount变量值也正确,但调用.SetValue()时触发对象引用错误——该问题仅在COMHOST环境中出现,原生C#/.NET6环境无异常。

  • 参数测试:发现调用带布尔参数的重载方法可正常运行:

    form.GetField("shipperAccount").SetValue(shipperAccount, false);
    

    而传入true时(该参数控制是否生成字段外观),会在iText内部代码触发对象引用错误;同时调用表单扁平化方法也会触发相同错误。

当前进展

  • 已联系iText技术支持,对方引导至StackOverflow求助;随后向iText开发者反馈问题,对方已确认但暂未给出回复。
  • 为推进项目进度,尝试改用IronPDF库,该库可满足需求且易于快速实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 05:52:51