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

时间:2020-03-06 14:56:21  来源:igfitidea点击:

我正在寻找有关如何进行此操作的建议。任何输入表示赞赏!

当前,我有一个ASP.NET MVC应用程序。在客户端上,我有一个带有XPS文档ID的链接。当用户单击链接时,会将他们带到包含有关文档详细信息的页面。除此信息外,我还希望在此信息的同一页上显示文档。

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

我非常希望不必将该文档拖放到文件系统中,然后再整理一个文件路径。我希望能够以内容类型" application / vnd.ms-xpsdocument"将文档流式传输到浏览器。

我尝试使用Web控件来处理此问题(无法写出二进制文件),考虑过创建HTTP处理程序来执行此操作(不知道从何处开始),并尝试了其他几种获取文档的方法流到浏览器。

另外,还存在如何将文档嵌入网页中的问题。我是否使用EMBED标签?还是对象?还是我使用iframe并将源设置为指向提供文档的任何内容?

再说一次,我不希望解决之道陷入困境。我正在寻找有关如何进行此操作的建议。并且,尽管此问题与xps文档有关,但它适用于流传输将在浏览器中托管的二进制文件(PDF等)的任何应用程序。

好的,关于在浏览器中显示,一个词:Silverlight。解决了我仍然想出最好的方法将其从服务器发送到浏览器的问题。

罢工。看来Silverlight还不够高级,无法显示XPS文档。我正在考虑现在指向http处理程序的iframe ... iframe可以工作。太糟糕了,它把整个东西扔了下来。我想我总是可以剥离第一页并寄给那只小狗...

哇。无需HTTP处理程序。我们只需要MVC中的自定义ActionResult。 friggen太棒了吗?

解决方案

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

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

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

有一个Silverlight控件能够显示XPS文档。有关更多信息,请参见http://firstfloorsoftware.com/blog/announcement-document-toolkit-for-silverlight/