【问题标题】:ITextSharp - Google Chrome Save Button Saves PDF as .ASPX pageITextSharp - Google Chrome 保存按钮将 PDF 保存为 .ASPX 页面
【发布时间】:2015-05-08 19:31:27
【问题描述】:

我目前正在使用 ITextSharp 使用 .Net 3.5 ASPX 页面创建 PDF。一切正常.. 唯一的问题是在 chrome(版本 42.0.2311.135)中,当我单击保存按钮或右键单击并说保存时,它会尝试保存为 .aspx 页面。我在使用 Firefox 或 Internet Explorer 时没有遇到这些问题。我尝试禁用 chrome PDF 查看器,它只是自动将文件保存为 aspx 文件。我在下面包含了我的代码,该代码是通过单击按钮触发的。我假设这是我处理响应的方式?有任何想法吗?

iTextSharp.text.Document d = new iTextSharp.text.Document(PageSize.A4, 20, 20, 20, 20);

using (System.IO.MemoryStream stream = new System.IO.MemoryStream())
{

 w = PdfWriter.GetInstance(d, stream);

 //add stuff to itext document

 d.Close();

 byte[] b = stream.ToArray();
 stream.Close();


 Response.Clear();
 Response.ContentType = "application/pdf";
 Response.BinaryWrite(b);
 HttpContext.Current.ApplicationInstance.CompleteRequest();

}

更新: 想分享我的发现,以防它让人头疼。添加 Response.AddHeader("Content-Disposition", "inline;filename=myfilename.pdf");修复了大部分问题,但我仍然遇到 Google chrome 查看器中的保存按钮的问题(打印工作正常,但保存提示用户保存页面而不是 pdf)。通过单击按钮在 .aspx 页面上生成 PDF。生成后,我清除响应并将 PDF 转储到页面。页面上的表单元素没有设置方法,因此它作为帖子发送(通过提琴手发现)。此页面正在通过 iframe 共享。我在页面上将方法更改为 GET,现在一切都按预期工作。

【问题讨论】:

    标签: c# asp.net google-chrome .net-3.5 itextsharp


    【解决方案1】:

    尝试:

    Response.AddHeader("Content-Disposition", "attachment;filename=myfilename.pdf");
    

    【讨论】:

    • 这解决了问题,但文件会自动下载。有没有办法在浏览器中显示它并允许通过 chrome 查看器提供的保存按钮保存为 PDF?
    • 我尝试使用 inline 代替,得到的结果与以前相同。 Response.AddHeader("Content-Disposition", "attachment;inline=myfilename.pdf");
    • 那么“inline”就是你的朋友。可能页面被缓存了,尝试删除浏览器缓存并重新加载。
    • 不幸的是,即使在删除浏览器缓存并重新加载后,同样的问题:(我上面的评论也有错字。我的代码中有这个:“Content-Disposition”,“inline;filename=filename. pdf"
    • 好吧我发现问题是上面的页面显示在一个iframe中。抱歉我之前没有提到,因为直接看页面时结果是一样的。不幸的是,这种方式是通过现有站点上的 Portlet 托管的。因此,如果我直接导​​航到该页面,它会按预期工作。我将您的答案标记为正确,因为它解决了我的问题。但是,关于让保存按钮适用于 iframe 中显示的 PDF 的任何想法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    • 2011-06-06
    相关资源
    最近更新 更多