C# 在浏览器中控制流式PDF的显示

C# 在浏览器中控制流式PDF的显示,c#,asp.net,pdf,stream,C#,Asp.net,Pdf,Stream,使用在这里和其他地方找到的信息,我成功地实现了一个应用程序,该应用程序将从我们的文档存储服务器中提取PDF,通过防火墙将其流式传输,并将其显示在客户端web浏览器的框架中。使用以下代码将PDF加载到页面中,该页面是iframe的源代码 int ImageID; if (int.TryParse(Request.QueryString["ImageID"], out ImageID)) { FileTransferService.FileTransferClient client = new

使用在这里和其他地方找到的信息,我成功地实现了一个应用程序,该应用程序将从我们的文档存储服务器中提取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: attachment; filename="example.pdf"
这可能也值得研究,尽管我从未使用过:

表示MIME协议内容处置标头


也许你能找到一个解决办法,但本质上是不可能的。这主要是因为您无法控制浏览器的客户端设置。我可以将我的Adobe插件配置为打开PDF文件,而不管应用程序服务器提供了什么;filename=“\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuureader@bdimag我只是尝试了一下,虽然不是理想的解决方案,但它至少使行为一致。谢谢你的建议。我不知道您可以告诉浏览器将流视为文件。如果你将你的建议作为答案发布,我会将其标记为已接受。补充阅读:事实证明,这实际上是我们的最佳解决方案。至少这是决策者在尝试后做出的决定。再次感谢。