2015-09-09 167 views
0

我使用asp.net在某些浏览器上生成动态.pdf文件,例如firefox显示pdf,但是在IE上& Safari提供了“另存为”比在浏览器中显示它。我已经使用了相同的iFrame。此外,要显示PDF文件是否要求客户端应该有Adobe Reader或某个插件来显示PDF?PDF不会在所有使用Asp.net的浏览器上呈现

protected void bttnpdf_Click(object sender, EventArgs e) 
    { 
     string FilePath = Server.MapPath("sample.pdf"); 
     WebClient User = new WebClient(); 
     Byte[] FileBuffer = User.DownloadData(FilePath); 
     if (FileBuffer != null) 
     { 
     Response.ContentType = "application/pdf"; 
     Response.AddHeader("content-length", FileBuffer.Length.ToString()); 
     Response.BinaryWrite(FileBuffer); 
    } 
} 

任何帮助,将不胜感激。

在此先感谢

+1

它取决于Adobe插件,如果您没有为I.E安装该插件。或Safari然后它会要求保存文件,而不是然后打开PDF文件 –

+0

感谢您的快速响应。你也可以请推荐一些标准的方式来呈现所有浏览器的PDF,考虑到这两种情况,即客户端已安装/未安装Adobe插件。 – Dev

+0

由于您提到您使用的是iframe,所以如果iframe能够找到插件,它将呈现pdf并显示该pdf文件,否则它将不会呈现并将整个pdf文件传递给浏览器,因此浏览器无法理解该做什么与该pdf和按默认行动,它会要求保存文件 –

回答

0

在aspx文件:

<div> 
    <iframe id="myFrame" runat="server" style="width:600px; height:500px;" frameborder="0"></iframe> 
</div> 
在CS文件

myFrame.src="yourPDFPath" 

例如

myFrame.Src = "http://docs.google.com/gview?url=http://path.com/to/your/pdf.pdf&embedded=true"; 
+0

Pranav我的所有pdf文件都是动态生成的,并存储在我们的服务器上。所以我需要在谷歌服务器上传我的pdf文档,然后将网址映射到iFrame上?提前Thanx – Dev

+0

不,你需要传递你存储你的pdf文件的路径。 例如, 如果您存储在myfolder/mypdf.pdf那么 myFrame.Src = Server.MapPath(“myfolder/mypdf.pdf”); –

0

当我这样做我也有添加了一个内容dispo sition。在代码中(不能共享它,因为它是生产代码)有一个函数在数据库中查找记录并返回一个FileHandle。

该函数返回一个文件句柄:

FileStream stream = new FileStream(filePath, FileMode.Open); 

var fileHandle = new FileHandle 
{ 
    FileStream = stream, 
    ContentType = "application/pdf", 
    Filename = fileDownloadName 
}; 

其中,filepath是文件路径(例如使用Server.Mappath( “sample.pdf”))。在控制器操作中,我有:

var cd = new System.Net.Mime.ContentDisposition 
{ 
    // for example foo.bak 
    FileName = fileHandle.Filename, 

    // always prompt the user for downloading, set to true if you want 
    // the browser to try to show the file inline 
    Inline = true, 
}; 
Response.AppendHeader("Content-Disposition", cd.ToString()); 
return File(fileHandle.FileStream, fileHandle.ContentType); 
+0

谢谢奈杰尔。你可以请用pdf文件的路径更新上面的代码吗?例如http://mydomain/pdf/sample.pdf?上述代码也会在所有浏览器上呈现,而不管客户端是否安装了Adobe Reader /某些pdf阅读器? – Dev

+0

我已经丰富了答案。这已经在IE,Chrome和Fox中测试过。我们拥有的PDF文件然后在浏览器中内联呈现 - 直接进入链接或通过iframe。 (注意:fileDownloadName是文件的名称(不含路径)) –

0

在行Response.BinaryWrite(FileBuffer);之前加上以下行。

Response.AddHeader("Content-Disposition", "inline");

添加此头REPONSE,使PDF文件将在浏览器本身打开。

相关问题