【发布时间】: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