【问题标题】:iText keeps throwing NullReferenceExceptioniText 不断抛出 NullReferenceException
【发布时间】:2020-08-11 00:10:40
【问题描述】:

我现在遇到了一个 iText 问题。 我用 C# 创建了一个 WindowsForms 应用程序,它使用 iText 生成带有订单的 pdf 文件。 我在工作中使用它,只是为了节省一些时间并简化我的工作,但它只适合我。 大约一周前,我开始创建另一个应用程序,这次是采用 .net 核心技术的网络应用程序。

public IActionResult OnPostPrintToPDF()
    {
        byte[] pdfBytes;
        MemoryStream stream = new MemoryStream();
        PdfWriter writer = new PdfWriter(stream);
        PdfDocument pdf = new PdfDocument(writer);
        Document document = new Document(pdf);
        stream.Position = 0;
        Paragraph par;
        par = new Paragraph("Hello world");
        document.Add(par);
        document.Close();
        pdfBytes = stream.ToArray();
        return new FileContentResult(pdfBytes, "application/pdf");
    }

当我尝试使用 iText 时,出现了异常,即使代码看起来相同。 我已经尝试了任何示例源代码,但 .net 核心和框架都无法与控制台应用程序一起使用,我不断收到相同的异常 (System.NullREferenceException),即使在我的第一个应用程序中,到目前为止一切正常。

异常的堆栈跟踪:

System.NullReferenceException HResult=0x80004003 消息=对象 引用未设置为对象的实例。来源=itext.io StackTrace:在 iText.IO.Font.FontCache..cctor()

有什么想法会发生什么吗?

【问题讨论】:

  • 你能分享那个异常的堆栈跟踪吗?您可以切换到屏幕截图的英文错误消息吗?此外,屏幕截图中的代码和您问题中的其他代码不同。两者都以同样的方式失败吗?顺便说一句,如果代码无论如何都没有抛出异常,那么它现在所在位置的stream.Position = 0 无论如何都可能会损坏结果 PDF。
  • 是的,两个代码都以同样的方式失败。我在帖子中添加了异常详细信息
  • 只是猜测,但堆栈跟踪表明问题在于构造 FontCache。 iText 文档中是否有任何建议必须先初始化 FontCache,然后再尝试构造 Document
  • 这很奇怪,字体缓存在静态代码中进行了一些初始化,但通常不会出错。只是一个疯狂的猜测,可能是链接到您的项目的库有问题吗?也许完成了版本控制问题?考虑删除并重新添加所有引用,并确保 itext 库具有匹配的版本。
  • 我已经想通了,我所要做的就是勾选那个组合框,上面写着:itext.io.dll 但是还有一个问题,当应用程序正确完成而没有抛出任何异常时,执行您还在输出部分中得到了该行:Exception throw: 'System.NullReferenceException' in itext.io.dll ?

标签: c# asp.net-core itext


【解决方案1】:

问题与某种缓存有关。我真的不明白是什么,但是正如您在代码中看到的那样,当他尝试从缓存加载字体时会生成异常。我意识到在一个新项目中尝试了相同的代码并且它有效。

所以我清理了解决方案,删除了 bin、obj、.vs,杀死了 IIS Express,删除并重新安装了所有 nuget 包,然后再次运行,神奇地它工作了。

然后我只需要对代码进行修复:我使用 HtmlConverter.ConvertToPdf 生成完整的 pdf,而不是仅生成 15 字节文档的 HtmlConverter.ConvertToDocument。

【讨论】:

    【解决方案2】:

    请添加以下命名空间,一切顺利。

    using iText.IO.Font;
    

    真的不知道为什么,但这很好用。

    【讨论】:

      猜你喜欢
      • 2013-05-30
      • 1970-01-01
      • 2020-11-17
      • 2016-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多