在Web应用程序中显示PDF

mbm*_*414 4 pdf asp.net web

我搜索了这个,搜索了这个,查看了SO和其他网站(我一直试图在这个问题上阅读几个小时),但我似乎仍然无法找到一个令人满意的解决方案,看似简单,常见的编程问题.

让我设置场景:

  • 我有一个网站/ Web应用程序,允许用户搜索SQL Server库.
  • 与搜索结果相关的大多数文档都是PDF文件.
  • PDF文件存储在SQL Server数据库的BLOB中.
  • 我希望能够从数据库中动态提取PDF并将其显示给用户.
  • 为了保留用户的搜索进度,我想我想在另一个浏览器窗口/选项卡中打开该文件
  • 我已经想出了如何将PDF保存到指定目录中的服务器.
  • 希望用户看到文件的路径.
  • 在合理范围内,我想要一个适用于所有主流浏览器的解决方案:
    1. IE浏览器
    2. 火狐
    3. Safari(包括iPhone/iPad Mobile Safari)
  • 我宁愿不买第三方组件,但如果有必要,我愿意去那条路.
  • 我不认为我想将文件作为下载文件发送(我想我已经知道该怎么做了),因为这不会在iPhone/iPad上失败吗?

到目前为止我尝试过的每个解决方案都有一些基本问题:

  • 使用iFrames似乎在iPhone/iPad上惨遭失败
  • 使用Server.Transfer(我正在使用ASP.NET)显示乱码而不是PDF
  • 我尝试了几个演示第三方解决方案,但它们也很臭!

我想不出来!我真的是一个桌面开发人员,这在Windows中很容易!为什么网络这么难?

我是愚蠢的,这真的是一个简单的练习,还是这个基本任务真的很难?

请指点我正确的方向!

谢谢!!!

Ric*_*ews 7

您是否尝试过使用content-disposition-inline添加http标头?您也可能希望将结果直接写入输出响应而不是保存它.这将确保文件实际路径不会显示为您直接将其写入响应.

例如

Response.ContentType = "application/pdf";
Response.AddHeader("Content-disposition","inline");
Response.BinaryWrite(myfilestream.ToArray());
Run Code Online (Sandbox Code Playgroud)

myfilestream是一个内存流,或者如果你已经有一个blob的字节数组,你可以直接将它写入响应而不需要toarray


Dot*_*ser 5

此链接可能对您有用,

http://nilangshah.wordpress.com/2007/05/28/successfully-stream-a-pdf-to-browser-through-https/

您可以通过为链接指定target ="_ blank",在新选项卡中打开pdf.博客中提到的ByteArray是来自DB的BLOB.希望这可以帮助.