2010-06-14 69 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