iTextSharp:“文档未打开”错误 - 实际上是

时间:2015-06-05 17:42:09

标签: itextsharp

我有这段代码:

    private static byte[] ConvertPdfDocument(Document document, PdfPTable headerTable, PdfPTable affidavitsTable)
    {
        byte[] b;
        using (MemoryStream ms = new MemoryStream())
        {
            PdfWriter writer = PdfWriter.GetInstance(document, ms);

            if (document.IsOpen() == false)
            {
                document.Open();
            }

            document.Add(headerTable);
            document.Add(affidavitsTable);
            document.Close();
            writer.Close();
            b = ms.ToArray();
        }

        return b;
    }

打开“document”对象(在此方法之外使用document.Open()然后传入。

条件document.IsOpen()的计算结果为True。通过查看调试器中“document”对象的私有属性,我进一步确认文档实际上是打开的;它表明“开放”是“真实的”。

因此,执行移至document.Add(headerTable)行。

此时抛出异常:“文档未打开。” 虽然调试器已停止(由于抛出该异常),但使用上述相同的两种方法,我可以仍然看到文档已打开。

怎么可能?

我已经谷歌搜索了一段时间但找不到任何东西,除了here发布的同一个问题没有回答......

非常感谢任何帮助。

非常感谢, 埃利泽

2 个答案:

答案 0 :(得分:10)

文档必须在PdfWriter.GetInstance()中使用后打开,否则没有作者关联,它什么都不做。

答案 1 :(得分:0)

在for循环外创建文档

Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream("D:\\addLife271118\\src\\assets\\finalbill.pdf"));
document.open();

try {       
    document.add(new Paragraph(" "));
    String[] names= {"james","siva"};

    for(int i= 0; i< names.length;i++)
    {
      document.add(new Paragraph(names[i]));
      document.add(Chunk.NEWLINE);
    }   
} catch (DocumentException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

document.close();