【问题标题】:C#, iTextSharp 5.5.10 Shown "Cannot access a closed file." on document close commandC#,iTextSharp 5.5.10 显示“无法访问已关闭的文件”。关于文档关闭命令
【发布时间】:2025-12-15 14:40:01
【问题描述】:

我不知道如何解决这个问题,因为文档在实际命令之前似乎很接近,即使我输入命令再次打开它。请帮忙。

这是我的代码。当我单击按钮时,它将执行此操作,并且错误将发生在doc.close() 行。它显示“无法访问已关闭的文件”。甚至我在上面放了doc.open()

private void run_Click(object sender, EventArgs e)
    {
        Document doc = new Document(PageSize.A4);

        using(FileStream op = new FileStream("text.pdf", FileMode.Create))
        {
            PdfWriter wri = PdfWriter.GetInstance(doc, op);
            Paragraph p = new Paragraph("test");
            doc.Open();
            doc.Add(p);
        }

        using (FileStream op = new FileStream("text.pdf", FileMode.Append, FileAccess.Write))
        {

            PdfWriter wri = PdfWriter.GetInstance(doc, op);
            Paragraph p = new Paragraph("test2");
            doc.Open();
            doc.Add(p);
            doc.Close();
        }

    }

【问题讨论】:

  • 附加到pdf文件添加你做没有意义。
  • @mkl 我昨天通过创建新的 Document 实例进行了操作,但我不知道是否有办法通过不创建新实例来实现。

标签: c# pdf itext pdf-generation


【解决方案1】:

首先,通过附加 PDF 文件向现有 PDF 添加一些内容不是正确的方法。如果您想在现有 PDF 中添加内容,请查看ITextSharp insert text to an existing pdf

但是,如果你只是想让它工作,你只需要每次都创建一个新的 Document 实例。

private void run_Click(object sender, EventArgs e)
{
    Document doc = new Document(PageSize.A4);

    using(FileStream op = new FileStream("text.pdf", FileMode.Create))
    {
        PdfWriter wri = PdfWriter.GetInstance(doc, op);
        Paragraph p = new Paragraph("test");
        doc.Open();
        doc.Add(p);
    }

    using (FileStream op = new FileStream("text.pdf", FileMode.Append, FileAccess.Write))
    {
        doc = new Document(PageSize.A4); // this is the fix
        PdfWriter wri = PdfWriter.GetInstance(doc, op);
        Paragraph p = new Paragraph("test2");
        doc.Open();
        doc.Add(p);
        doc.Close();
    }
}

【讨论】:

  • 您可能想强调“如果您只想让它工作”仅仅意味着“如果您只是希望它不抛出异常”,因为结果很可能仍然不是 OP想用代码实现...