Android手机在ASP中回发后不能打开PDF流.网的网站
本文关键字:PDF 网站 不能 手机 ASP Android | 更新日期: 2023-09-27 18:05:31
我有一个ASP。Net站点,该站点在回发到初始页面后将PDF文档流回。在IE、Chrome、Firefox以及iphone和ipad上,一切都运行良好,PDF被发送到浏览器。在Android手机上,我得到一个错误,指出PDF无效。下面的代码是我试图做的事情的简化版本,但它确实再现了错误。我基本上有一个网页上的按钮,设置在服务器上运行。在页面的第一次请求时,它显示HTML,在按钮单击后,它应该呈现PDF:
protected void Page_Load(object sender, EventArgs e)
{
Response.ClearHeaders();
Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1
Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.1
Response.AppendHeader("Keep-Alive", "timeout=3, max=993"); // HTTP 1.1
Response.AppendHeader("Expires", "0"); // HTTP 1.1
if (IsPostBack)
{
Response.ClearContent();
Response.ClearHeaders();
string fullPath = @"C:'Temp'outdoc.pdf";
if (System.IO.File.Exists(fullPath))
{
//Set the appropriate ContentType.
Response.ContentType = "application/pdf";
//Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment;filename='"TestDoc.pdf'"");
byte[] b = System.IO.File.ReadAllBytes(fullPath);
this.Page.Response.AddHeader("Content-Length", b.Length.ToString());
//Write the file directly to the HTTP content output stream.
Response.BinaryWrite(b);
Response.Flush();
Response.End();
Response.Close();
}
}
}
我在报头和不同的关闭和刷新响应流的方式中玩了很多不同的值,没有运气。有没有人见过这个,或者有人可以提供任何建议的事情尝试。
编辑:我发现这只发生在我回发到页面时。如果我马上流式传输文档,文档就会正确地流式传输。这让我相信这是某种缓存问题与android浏览器。谢谢。
尝试将当前请求转移到其他处理程序,在该处理程序中直接将PDF呈现到响应流。
你的页面代码:
if (IsPostBack)
{
Context.Server.Transfer("RenderPDF.ashx");
Response.End();
}
和在新的RenderPDF。ashx,将负责渲染pdf文件的代码移到这里
Android似乎不太喜欢Content-Disposition
,据我所知。我建议将PDF输出到一个文件,并发出指向指向该文件的URL的重定向。