ITextSharp - Google Chrome 保存按钮将 PDF 另存为 .ASPX 页面
ITextSharp - Google Chrome Save Button Saves PDF as .ASPX page
我目前正在使用 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 转储到页面。页面上的表单元素没有设置方法,因此它被发送为 post(通过提琴手发现)。此页面正在通过 iframe 共享。我在页面上将方法更改为 GET,现在一切都按预期工作。
试试:
Response.AddHeader("Content-Disposition", "attachment;filename=myfilename.pdf");
我目前正在使用 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 转储到页面。页面上的表单元素没有设置方法,因此它被发送为 post(通过提琴手发现)。此页面正在通过 iframe 共享。我在页面上将方法更改为 GET,现在一切都按预期工作。
试试:
Response.AddHeader("Content-Disposition", "attachment;filename=myfilename.pdf");