我正在尝试使用 iTextSharp 5.3.4 使用以下命令创建 pdf 文档
Document document = new Document();
FileStream stm = new FileStream(filename, FileMode.Create);
PdfWriter writer = PdfWriter.GetInstance(document, stm);
我收到 System.NullReferenceException 并带有以下堆栈跟踪:
System.NullReferenceException occurred
HResult=-2147467261
Message=La référence d'objet n'est pas définie à une instance d'un objet.
Source=itextsharp
StackTrace:
à iTextSharp.text.Version.GetInstance()
InnerException:
我已经验证文档和 stm 都不为空,如果我在 VS12 中选择“继续”,则会创建文档 - 但总是会抛出异常。 我更新到 iTextSharp 5.4.0,它仍然发生。 我在任何地方都找不到任何相关信息 - 有人有任何想法吗?
确保您没有捕获所有异常。这个
NullReferenceException
很可能已经在 iTextSharp 中捕获并处理,所以你不必关心它。更改以下设置以验证:
调试 -> 异常 -> 去掉“公共语言运行时异常”的“抛出”一栏的复选框。
我更改为版本 5.0.5 而不是 5.5.13.3 或更高版本,一切正常!我正在使用 .NET 6 API
经过长时间的调试,我发现了一个有效的奇怪解决方案。 它基于一个发现:PdtWriter实例似乎创建了很长时间,然后延迟解决了问题。 在这里我提出我的解决方案:一个返回 PdfWriter 实例的函数。
static public iTextSharp.text.pdf.PdfWriter PdfWriter_GetInstance(iTextSharp.text.Document document , System.IO.FileStream FS )
{
iTextSharp.text.pdf.PdfWriter writer = null;
for (int Times = 0; Times < 6; Times++)
{
try
{
writer = iTextSharp.text.pdf.PdfWriter.GetInstance(document, FS); // sometime rise exception on first call
break; //created, then exit loop
}
catch
{
System.Threading.Thread.Sleep(250); // wait for a while...
}
}
if (writer == null) // check if instantiated
{
throw new Exception("iTextSharp PdfWriter is null");
}
return writer;
}