如何将XPS文档流式传输到浏览器并将其嵌入网页?

时间:2008-09-30 18:25:39

标签: asp.net stream binaryfiles xpsdocument

我正在寻找一些关于如何解决这个问题的建议。任何意见都表示赞赏!

目前,我有一个ASP.NET MVC应用程序。在客户端上,我有一个带有XPS文档ID的链接。当用户单击该链接时,它们将被带到包含该文档详细信息的页面。除了这些信息之外,我希望在同一页面的同一页上显示该信息。

在服务器端,一旦我有了ID,我就可以从数据库中获取文件,序列化为字节数组。问题是,将序列化文档放入网页的最佳方式是什么?

我会非常喜欢不必将该文档放入文件系统,然后将文件路径拼凑在一起。我希望能够将文档作为“application / vnd.ms-xpsdocument”的内容类型流式传输到浏览器。

我已经尝试使用Web控件来处理这个问题(无法写出二进制文件),考虑创建一个HTTP处理程序来执行此操作(不知道从哪里开始),并且通过其他几种方式来摆弄它们将文档流提供给浏览器。

此外,还有如何将文档嵌入网页的问题。我使用EMBED标签吗?还是一个对象?或者我是否使用iframe并将源设置为指向提供文档的内容?

同样,我不希望解决方案陷入困境。我正在寻找关于如何解决这个问题的一些建议。而且,虽然这个问题是关于xps文档的,但它适用于流式传输要在浏览器中托管的二进制文件的任何应用程序(PDF等)。


好的,至于在浏览器中显示一个词:Silverlight。那已经解决了。我仍然有一个问题,即找出从服务器发送到浏览器的最佳方式。


罢工。看起来Silverlight还不够先进,不足以显示XPS文档。我正在考虑iframe指向一个http处理程序... iframe工作。太糟糕了,它将整个东西扔到管道上。我想我总是可以剥掉第一页并发送那只小狗......


哇。不需要HTTP处理程序。 MVC中的自定义ActionResult就是您所需要的。那个friggen太棒了?

2 个答案:

答案 0 :(得分:2)

我认为最简单的方法是从详细信息页面提供文档作为链接(target =“_ blank”)。这有几个好处:

  • 除非用户要求,否则您无需检索和流式传输整个文档。
  • 在我的系统上,至少IE已经注册为默认的XPS查看器,所以通过给它自己的窗口提供文档,你可以避免如何嵌入它的整个问题。
  • 这使得为文档提供流式传输源变得简单:只需使用带有ID的HTTP处理程序作为查询字符串参数。

即使你不喜欢这个想法,也一定要使用HTTP Handler来传输文件。这很简单:当你在Visual Studio中创建一个新的HTTP处理程序时,它应该为你提供一个很好的页面,其中已经完成了所有繁忙的工作。

答案 1 :(得分:1)

有一个能够显示XPS文档的Silverlight控件。有关详情,请参阅http://firstfloorsoftware.com/blog/announcement-document-toolkit-for-silverlight/