System.InvalidOperationException:从iTextSharp 5.3.3更新到5.4.2后已经关闭

时间:2013-07-02 19:44:49

标签: exception pdf-generation itextsharp document corruption

从v.5.3.3到5.4.2更新iTextSharp NuGet package后,我收到了System.InvalidOperationException: Already closed个异常。

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

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

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

请注意,此代码与iTextSharp 5.3.3完美配合。

我注释了该行和PDF已生成但后来iTextSharp开始输出无法通过Adobe Reader打开的损坏的PDF文件,也无法打开内置PDF阅读器的Windows 8。

2 个答案:

答案 0 :(得分:1)

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

doc.Close();

doc.CloseDocument();

并猜猜是什么?事情又开始了。没有例外。真棒!

希望它可以帮助将来可能会遇到同样问题的任何人......


很好......在尝试不同的输入选项后,我又开始获得异常......

我明确地打电话给:

pdfReader.Close();

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

答案 1 :(得分: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();
        }
    }