我有这段代码:
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发布的同一个问题没有回答......
非常感谢任何帮助。
非常感谢, 埃利泽
答案 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();