2010-06-14 78 views
2

我使用的對象標籤來顯示PDF的HTML,但我做的MVC是這樣的:顯示PDF在網絡

<object data="/JDLCustomer/GetPDFData?projID=<%=ViewData["ProjectID"]%>&folder=<%=ViewData["Folder"] %>" 
    type="application/pdf" width="960" height="900"> 
</object> 

和控制器/動作是

public void GetPDFData(string projID, Project_Thin.Folders folder) 
    { 
     Highmark.BLL.Models.Project proj = GetProject(projID); 
     List<File> ff = proj.GetFiles(folder, false); 
     if (ff != null && ff.Count > 0 && ff.Where(p => p.FileExtension == "pdf").Count() > 0) 
     { 
      ff = ff.Where(p => p.FileExtension == "pdf").ToList(); 

      Response.ClearHeaders(); 
      Highmark.BLL.PDF.JDLCustomerPDF pdfObj = new JDLCustomerPDF(ff, proj.SimpleDbID); 
      byte[] bArr = pdfObj.GetPDF(Response.OutputStream); 
      pdfObj = null; 

      Response.ContentType = "application/" + System.IO.Path.GetExtension("TakeOffPlans").Replace(".", ""); 
      Response.AddHeader("Content-disposition", "attachment; filename=\"TakeOffPlans\""); 
      Response.BinaryWrite(bArr); 
      Response.Flush(); 
     } 
    } 

問題是,因爲我先從服務器下載數據,然後返回字節數據,下載需要一些時間,所以我想展示某種進度來顯示處理。

請幫我解決這個問題。

回答

0

你可以試試下面的(在所有的瀏覽器未測試):

​​3210
-2

不幸的是,沒有辦法(據我所知)與Acrobat的插件互動,看看當它準備來顯示PDF文檔。

有些組件可用來替換Acrobat並提供正確的Javascript接口。 我爲TallComponents的PDFWebViewer.NET產品工作,該產品將顯示沒有任何插件的PDF,並且可以與ASP.NET MVC一起使用。

雖然你有其他選擇。如果您需要進度指示器,因爲PDF生成時間比您希望的要長,您可以使用AJAX調用輪詢服務器的進度。 在服務器上,您需要獲得某些可用的進度信息,以便您可以作爲ajax調用的結果返回。在瀏覽器中,您將使用結果向用戶提供進度信息。網上有好幾個很好的例子(例如this blog)。此處還有其他一些問題(例如here),以及更多信息的良好指示。

如果生成過程只需要幾秒鐘,您可能會顯示繁忙的指標。這可能與在從服務器觸發下載時在頁面中顯示div一樣簡單。

順便說一句,如果我沒有記錯,你應該inlineContent-Disposition頭更換attachment關鍵字。將其設置爲attachment將導致在顯示任何內容之前下載整個PDF。如果將其設置爲內聯,Acrobat將在下載足夠的數據後立即開始顯示第一頁。

+0

AFAIK我們不應該使用此論壇來插入我們自己的產品。 – azarc3 2013-10-30 18:37:12

+0

我認爲我在寫作時(3年前!)讓我的產品晶瑩剔透,這與產品常見問題解答(FAQ)一致。更多關於meta [這裏]的主題(http://meta.stackexchange.com/questions/15787/how-do-i-mention-my-own-products-in-answers)。除此之外,我認爲我在答案中提供了足夠多的相關信息,這不是一個促銷活動。另請注意,該產品一年前已開源。所有的代碼都可以在codeplex [here](https://pdfwebviewer1.codeplex.com/)和[here](http://webviewer2.codeplex.com/)上找到。 – 2013-10-30 19:09:57