关于c#:iTextSharp – 关闭pdf时出现“是否要保存”提示

iTextSharp - “Do you want to save” prompt when closing pdf

我一直试图用ITextSharp创建一个PDF文件,但遇到了一个问题。关闭PDF后,Acrobat Reader会提示用户"是否要保存更改…"

这似乎是一个常见的问题,可能有很多关于栈溢出的问题,以及许多不同的解决方案。我已经尝试了尽可能多的解决方案,但都无济于事。

我的代码在下面。我用memoryStream和pdfWriter创建了一个简单的PDF文件,其中有一个段落。然后我将memoryStream作为数组返回,然后使用response.outputstream将文件下载到客户机。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
protected void lnkbtnDownloadPdf_Click(object sender, EventArgs e)
{
        var Pdf = DownloadPdf();
        Response.ContentType ="application/pdf;";
        Response.AddHeader("Content-Disposition","attachment; filename=" +"test.pdf");
        Response.OutputStream.Write(Pdf, 0, Pdf.Length);
        Response.OutputStream.Close();
}


public static byte[] DownloadPdf()
{
    using (MemoryStream ms = new MemoryStream())
    {
        Document doc = new Document(PageSize.LETTER.Rotate());
        PdfWriter writer = PdfWriter.GetInstance(doc, ms);
        doc.Open();
        doc.Add(new Paragraph("testtesttesttesttesttestesttest"));
        doc.Close();
        writer.Close();
        return ms.ToArray();
    }
}

我已经尝试过了-ITextSharp生成的PDF现在在Adobe Reader X中生成了"保存"对话框-但我仍然得到了"保存"对话框。

我也尝试过实现这一点——使用ITextSharp将数据写入PDF非常好,但Acrobat Reader在关闭文件时会询问"是否要保存更改"——但我的程序不使用stamper。布鲁诺在这个链接上有一个答案,也提到了AcroForm字典,但是我不知道如何从字典中删除条目,并且提出问题的用户无论如何都无法解决他们的问题。

我需要使用pdfwritter。我还研究了使用文件流而不是这里提到的输出流-ITextSharp生成的PDF在关闭时会导致保存对话框-但我需要将PDF下载到客户端,而不是保存到磁盘上。


一段时间后,我发现这根本不是一个iText问题(据我所知)。

我添加了-

1
Response.End();

-在lnkbtndownloadpdf的末尾,单击函数,它就工作了。Acrobat在关闭我的PDF时不再要求用户保存。