23

一年多以来,我一直在使用 iTextSharp 生成 PDF 文档。不幸的是,随着 Adob​​e Reader X 的发布,我的 PDF 现在会导致“您要保存吗?” 关闭 PDF 文档时出现的对话框。不是使用 iTextSharp 生成的 PDF 不会发生这种情况。对于整天打开和关闭 PDF 文档的用户来说,这真的很烦人。我可以设置 iTextSharp 中的任何属性来防止这种情况发生吗?

如果有帮助,我正在使用 PdfReader 从现有 PDF 文档中读取数据(此原始文档不会导致“保存”对话框出现)。然后我使用 PdfWriter 创建一个新文档并使用 AddTemplate 将原始文档的一部分复制到新文档中。

4

2 回答 2

28

问题是这一行:

Response.OutputStream.Write(MS.GetBuffer(), 0, MS.GetBuffer().Length)

GetBuffer 方法返回大于实际内容的整个内部缓冲区。坏的 PDF 在末尾有大约 10kb 的垃圾内容(零字节),好的 PDF 只有几个垃圾字节。使用内存流的ToArray()方法获取PDF文件,问题就解决了。您还将获得较小的文件。

byte[] pdf = MS.ToArray();
Response.OutputStream.Write(pdf, 0, pdf.Length);

还将“Content-Length”设置为 pdf 数组的长度。

于 2011-02-25T16:25:32.860 回答
1

还添加

HttpContext.Current.Response.End();

完成您的 PDF 文件后。

于 2012-08-14T08:31:47.147 回答