PdfWriter.GetInstance 抛出 System.NullReferenceException

问题描述 投票:0回答:3

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

wpf itext
3个回答
30
投票

确保您没有捕获所有异常。这个

NullReferenceException
很可能已经在 iTextSharp 中捕获并处理,所以你不必关心它。
你可以继续的事实支持了这个理论。

更改以下设置以验证:

调试 -> 异常 -> 去掉“公共语言运行时异常”的“抛出”一栏的复选框。


0
投票

我更改为版本 5.0.5 而不是 5.5.13.3 或更高版本,一切正常!我正在使用 .NET 6 API


-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;
}
© www.soinside.com 2019 - 2024. All rights reserved.