使用这里和其他地方找到的信息,我已经成功地实现了一个应用程序,它将从我们的文档存储服务器中拉出PDF,通过我们的防火墙并在客户端的web浏览器上显示它。使用以下代码将PDF加载到一个页面中,该页面是iframe的源。
int ImageID;
if (int.TryParse(Request.QueryString["ImageID"], out ImageID))
{
FileTransferService.FileTransferClient client = new FileTransferService.FileTransferClient();
Byte[] documentStream = client.GetFile(Classes.AppSettings.pwServer, Classes.AppSettings.pwDatabase, Classes.AppSettings.pwUsername, Classes.AppSettings.pwPassword, Classes.AppSettings.pwCabinet, ImageID, "", "");
Response.ContentType = "application/pdf";
Response.BinaryWrite(documentStream);
}
这是正常工作的大部分时间,但由于客户端设置的Acrobat Reader插件,PDF有时会在Acrobat Reader中打开,而不是显示在网页上,留下我们的页面上一个空洞的PDF应该。我已经搜索了第三方PDF浏览器,我们可以在应用程序中使用,但没有成功。要么他们不接受流作为源,要么图像质量不可接受。如果我们可以强制它总是在Acrobat Reader中弹出,这是可以接受的,但我们更希望它显示在网页上。出于安全原因,我们不希望将文件写入磁盘并从那里显示它。
是否有一种方法可以强制观看行为,或者我们可以使用第三方观看器来解决这个问题?
作为最佳解决方案的替代方案,您可以添加'Content-Disposition'标头,使浏览器始终将其视为下载。
用法:
Content-Disposition: attachment; filename="example.pdf"
这可能也值得研究一下,尽管我从未使用过它:System.Net.Mime.ContentDisposition
表示MIME协议Content-Disposition报头。