iText一直抛出NullReferenceException异常

8

我目前在使用iText时遇到了一个问题。

我使用C#创建了一个WindowsForms应用程序,它使用iText来生成订单的pdf文件。

我在工作中使用它,只是为了节省一些时间并简化我的工作,但这只适用于我个人。

大约一周前,我开始创建另一个应用程序,这次是使用.net core技术的Web应用程序。

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 core还是framework控制台应用程序中都不起作用,我仍然会收到相同的异常(System.NullReferenceException),即使在我的第一个应用程序中一切都正常。
异常的堆栈跟踪:
System.NullReferenceException HResult=0x80004003 Message=对象引用未设置为对象的实例。 Source=itext.io StackTrace: at iText.IO.Font.FontCache..cctor()
有什么想法是怎么发生的?
截图如下:https://istack.dev59.com/hLMOw.webp

1
你能分享一下那个异常的堆栈跟踪吗?并且,你能切换到英文错误信息来进行截图吗?此外,屏幕截图中的代码和你问题中的其他代码是不同的。它们都以相同的方式失败吗?另外,如果代码本身没有抛出异常,那么现在的 stream.Position = 0 很可能会破坏结果 PDF。 - mkl
是的,这两个代码都以相同的方式失败。 我在我的帖子中添加了异常详细信息。 - szybki
只是猜测,但堆栈跟踪显示问题出在构造“FontCache”上。iText文档中是否有任何建议,在尝试构造“Document”之前必须先初始化“FontCache”? - Sean Skelly
这很奇怪,字体缓存在静态代码中进行一些初始化,但通常不会出现错误。只是一个猜测,可能你的项目链接的库存在问题吗?版本问题已经解决了吗?考虑删除并重新添加所有引用,并确保itext库具有匹配的版本。 - mkl
7
我明白了,我只需要勾选下拉框中的“itext.io.dll”那一项就可以了。但我还有一个问题,当应用程序正常完成且没有抛出任何异常时,你的输出部分也有这样一行吗? Exception thrown: 'System.NullReferenceException' in itext.io.dll - szybki
3个回答

1
我也遇到了这个异常。
System.NullReferenceException
  HResult=0x80004003
  Message=Object reference not set to an instance of an object.
  Source=itext.io
  StackTrace: 
    iText.IO.Font.FontCache..cctor()

但是我尝试修复了这个异常!
尝试从NuGet安装软件包。

itext7.font-asian

我不知道为什么,但它成功地起作用了。
这个问题帮助了我:如何从PDF文件中读取日文字符?

0
问题与某种缓存有关。我不太理解是什么,但您可以在代码中看到异常是在尝试从缓存中加载字体时生成的。在将相同的代码尝试到新项目后,我意识到了这一点。
因此,我清理了解决方案,删除了 bin、obj、.vs,杀掉了 IIS Express,卸载并重新安装了所有 nuget 包,然后再次运行,神奇地解决了问题。
然后我只需要修复代码:不再使用 HtmlConverter.ConvertToDocument 生成仅有 15 个字节的文档,而是使用 HtmlConverter.ConvertToPdf 生成完整的 PDF。

我有同样的问题,但清理并没有起作用。有什么想法吗? - robob

-1

请添加以下命名空间,然后您就可以开始了。

using iText.IO.Font;

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接