我一直使用iTextSharp生成PDF文档超过一年。不幸的是,随着Adobe Reader X的发布,我的PDF现在会导致“你想保存吗?”关闭PDF文档时出现的对话框。对于未使用iTextSharp生成的PDF,不会发生这种情况。对于那些整天打开和关闭PDF文档的用户来说,这真的很烦人。我可以设置iTextSharp中的任何属性来防止这种情况发生吗?
如果有帮助,我使用PdfReader从现有PDF文档中读取数据(此原始文档不会导致出现“保存”对话框)。然后我使用PdfWriter创建一个新文档,并使用AddTemplate将原始文档的一部分复制到新文档。
答案 0 :(得分: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);
还使用pdf数组的长度设置“Content-Length”。
答案 1 :(得分:1)
同时添加
HttpContext.Current.Response.End();
完成PDF文件后。