PdfWriter.GetInstance抛出System.NullReferenceException

时间:2013-04-05 11:53:27

标签: wpf itextsharp

我正在尝试使用以下

使用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并且它仍在发生。 我在任何地方都找不到任何相关信息 - 任何人都有任何想法?

2 个答案:

答案 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;
}