我正在尝试使用以下
使用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并且它仍在发生。 我在任何地方都找不到任何相关信息 - 任何人都有任何想法?
答案 0 :(得分:7)
确保您没有捕获所有异常。这个NullReferenceException
很可能是已经在iTextSharp内捕获和处理过的,所以你不关心它。
您可以继续支持这一理论。
更改以下设置以验证:
调试 - >例外 - >删除“Common Language Runtime Exceptions”的“Thrown”列中的复选框。
答案 1 :(得分:-1)
经过长时间调试,我发现了一个很好的解决方案。 它基于一个发现: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;
}