.aspx页面中包含.pdf文件,如下所示:<embed src="http://.../ShowPdf.aspx?id=1" type="application/pdf">
。 Chrome只显示“正在加载”图片并挂起而不显示pdf(chrome pdf viewer和adobe插件都不起作用)。其他浏览器打开pdf。有什么想法吗?
答案 0 :(得分:3)
我也有这个问题,经过多次研究后我终于解决了。
我发现HTTP
响应标头应该包含以下实体标头:
content-length: file size
如果不指定此标头,Web服务器将设置默认值:
content-length: chunked
我不知道为什么谷歌Chrome会出现这个问题,因为正如你所说,在IE或Firefox等其他浏览器中,他们正确地渲染/打开PDF文件。
以下是我用于解决此问题的代码。它适用于我的情况,现在谷歌浏览器显示我的网络应用程序的PDF文件!
System.IO.FileInfo fileInfo;
fileInfo = My.Computer.FileSystem.GetFileInfo(fullPathToFile);
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
我希望我曾帮助过你。
以下是我发现有用的一些参考文献:
PDF Handler Problem with Chrome & Firefox
What's the “Content-Length” field in HTTP header?
答案 1 :(得分:1)
非常感谢,我遇到了同样的问题,这是解决方案。我正在使用报表查看器,但我需要自动以pdf格式显示它,并且它工作正常,但是当我使用Chrome时,它有同样的问题,当我想保存文件时,它以扩展名保存.ASPX而不是.pdf。
我与解决方案分享我的代码:
string deviceInfo = "";
string[] streams = null;
string mimeType = null;
string encoding = null;
string fileNameExtension = null;
Warning[] war = null;
Byte[] bytes = this.ReportViewer.LocalReport.Render("PDF", deviceInfo, out mimeType, out encoding, out fileNameExtension, out streams, out war);
System.IO.MemoryStream ms = new System.IO.MemoryStream(bytes);
Response.Clear();
Response.ContentType = "Application/pdf";
Response.AddHeader("Content-Length", bytes.Length.ToString());
Response.AddHeader("Content-disposition", "inline; filename= NombreReporte");
Response.BinaryWrite(ms.ToArray());
Response.Flush();
Response.End();
答案 2 :(得分:1)
如果你在Firefox中显示PDF的问题,我发现了这个:
“您需要指定内容类型,以便浏览器知道哪个文件 它正在下载/显示内联......就像这样:“
Response.ContentType = "application/pdf"
Response.AddHeader("Content-Disposition", "inline;filename=YourFileName.pdf")
这对我有用,我也希望你也帮助你。