Asp.net

在 Web 應用程序中顯示 PDF

  • November 6, 2015

我已經用Google搜尋了這個,搜尋了這個,瀏覽了 SO 和其他網站(我已經嘗試閱讀這個問題幾個小時了),但我似乎仍然無法找到一個令人滿意的解決方案來解決看似簡單的問題,常見的程式問題。

讓我設置場景:

  • 我有一個網站/Web 應用程序,允許使用者搜尋 SQL Server 庫。
  • 大多數與搜尋結果相關的文件都是 PDF 文件。
  • PDF 文件以 BLOB 形式儲存在 SQL Server 數據庫中。
  • 我希望能夠從數據庫中動態提取 PDF 並將其顯示給使用者。
  • 為了保留使用者的搜尋進度,我想我想在另一個瀏覽器視窗/選項卡中打開文件
  • 我已經想出瞭如何將 PDF 保存到指定目錄中的伺服器。
  • 希望使用者看到文件的路徑。
  • 在合理的範圍內,我想要一個適用於所有主要瀏覽器的解決方案:
  1. IE瀏覽器
  2. 火狐
  3. 鉻合金
  4. Safari(包括 iPhone/iPad 移動版 Safari)
  • 我不想購買第 3 方組件,但如有必要,我願意走那條路。

  • 我不認為我想將文件作為下載發送(我想我已經知道該怎麼做),因為這不會在 iPhone/iPad 上失敗嗎?

到目前為止,我嘗試過的每個解決方案都存在一些基本問題:

  • 在 iPhone/iPad 上使用 iFrame 似乎慘遭失敗
  • 使用 Server.Transfer(我正在使用 ASP.NET)顯示亂碼而不是 PDF
  • 我已經嘗試了幾個展示 3rd 方解決方案,但它們也很臭!

我想不通!我真的是一個桌面開發人員,這在 Windows 中很***容易!***為什麼網路這麼難?

我是不是很傻,這真的是一個簡單的練習,還是這個基本任務真的那麼難?

請幫我指出正確的方向!

謝謝!!!

這個連結可能對你有用,

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

您可以通過為連結指定 target="_blank" 在新選項卡中打開 pdf。部落格中提到的 ByteArray 是您從數據庫中獲取的 BLOB。希望這可以幫助。

您是否嘗試過使用 content-disposition-inline 添加 http 標頭?此外,您可能希望將結果直接寫入輸出響應而不是保存它。這將確保文件的實際路徑不會顯示為您直接將其寫入響應。

例如

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

其中 myfilestream 是記憶體流,或者如果您的 blob 中已經有一個字節數組,則可以將其直接寫入響應而無需 toarray

引用自:https://stackoverflow.com/questions/9647551