1

将iTextSharp NuGet 包从 v. 5.3.3 更新到 5.4.2后出现System.InvalidOperationException: Already closed异常。

当我打电话时会发生这种情况:

Document doc = new Document(PageSize.A4);
.
.
.

doc.Close(); // Document is already closed hence the exception

请务必注意,此代码与iTextSharp 5.3.3.

我评论了该行并PDF生成了该行,但随后开始输出无法由 Adob​​e Reader 或 Windows 8 内置 PDF 阅读器打开的iTextSharp损坏文件。PDF

4

2 回答 2

1

在 Visual Studio 中使用代码并利用 IntelliSense,我查看了Document对象上的各种可能方法。我看到有一个额外的方法叫做CloseDocument(),所以我改变了这一行:

doc.Close();

doc.CloseDocument();

你猜怎么着?事情又开始起作用了。没有更多的例外。惊人的!

希望它对将来可能遇到相同问题的任何人有所帮助...


好吧好吧……在尝试了不同的输入选项后,我再次开始遇到异常……

我明确地调用:

pdfReader.Close();

在一个AppendToDocument方法里面。这是在打电话之前发生doc.Close();的。刚刚评论了上面的行,异常就消失了。

于 2013-07-02T19:55:30.510 回答
0

使用此代码

private void ceratepdf()
    {
        using (FileStream msReport = new FileStream(Server.MapPath("~") + "/App_Data/" + DateTime.Now.Ticks + ".pdf", FileMode.Create))
        {
            //step 1
            Document doc = new Document(PageSize.A4, 2f, 2f, 10f, 15f);

            PdfWriter pdfWriter = PdfWriter.GetInstance(doc, msReport);
            PdfPCell cell;
            PdfPTable table = new PdfPTable(4);
            cell = new PdfPCell(new Phrase("Incident Details"));

            cell.Colspan = 4;

            cell.HorizontalAlignment = 1; //0=Left, 1=Centre, 2=Right
            cell.VerticalAlignment = 1;

            table.AddCell(cell);
            doc.Open();
            doc.Add(table);
            doc.Close();
        }
    }
于 2013-07-03T06:03:56.713 回答