asp.net - ¿Cómo puedo transmitir un documento XPS a un navegador e incrustarlo en una página web?
stream binaryfiles (2)
Estoy buscando algunas sugerencias sobre cómo hacerlo. Cualquier entrada es apreciada!
Actualmente, tengo una aplicación ASP.NET MVC. En el cliente, tengo un enlace con una ID de un documento XPS. Cuando el usuario hace clic en el enlace, se lo lleva a una página con detalles sobre el documento. Además de esta información, deseo mostrar el documento al lado de esta información, en la misma página.
En el lado del servidor, una vez que tengo la ID, puedo obtener el documento, serializado como una matriz de bytes, desde la base de datos. La pregunta es, ¿cuál es la mejor manera de obtener ese documento serializado en la página web?
PREFERIBLEMENTE preferiría no tener que dejar ese documento en el sistema de archivos y luego juntar una ruta de archivo. Me gustaría poder transmitir el documento al navegador como un tipo de contenido de "application / vnd.ms-xpsdocument".
Intenté usar un control web para manejar esto (no puedo escribir en binario), pensé en crear un manejador HTTP para hacer esto (no tengo idea de por dónde empezar), y me he mezclado un par de otras maneras de obtener el documento transmitir al navegador.
Además, también está la cuestión de cómo insertar el documento en la página web. ¿Uso una etiqueta EMBED? ¿O un objeto? ¿O uso un iframe y configuro la fuente para que apunte a lo que entrega el documento?
De nuevo, no espero una solución envuelta en un arco. Estoy buscando algunos consejos sobre cómo hacer esto. Y, aunque esta pregunta se trata de documentos xps, se aplica a cualquier aplicación que transmita un archivo binario que se alojará en un navegador (archivos PDF, etc.).
De acuerdo, como para mostrar en el navegador, una palabra: Silverlight. Eso está resuelto. Todavía tengo el problema de averiguar la mejor manera de enviarlo desde el servidor al navegador.
Golpea eso. Parece que Silverlight aún no está lo suficientemente avanzado como para mostrar un documento XPS. Estoy pensando en un iframe apuntando a un manejador de http ahora ... El iframe funciona. Lástima que arroja todo por la tubería. Supongo que siempre podría quitarme la primera página y enviar a ese cachorro ...
Guau. No es necesario un controlador HTTP. Un ActionResult personalizado en MVC es todo lo que necesita. ¿Qué tan increíble es eso?
Creo que la forma más sencilla sería proporcionar el documento como un enlace (target = "_ blank") desde la página de detalles. Esto tiene varias ventajas:
- No necesita recuperar y transmitir el documento completo a menos que el usuario lo solicite.
- En mi sistema, al menos IE ya está registrado como el visor de XPS predeterminado, así que al darle al documento su propia ventana, evita toda la cuestión de cómo incrustarlo.
- Hace que sea sencillo proporcionar una fuente de transmisión para el documento: simplemente use un Manejador HTTP con una ID para un parámetro de cadena de consulta.
Incluso si no le gusta esa idea, definitivamente vaya con un Manejador de HTTP para transmitir el documento. Es muy fácil de hacer: cuando creas un nuevo Manejador de HTTP en Visual Studio, debe darte una buena página con todo el trabajo ocupado ya hecho.
Hay un control Silverlight capaz de mostrar documentos XPS. Consulte http://firstfloorsoftware.com/blog/announcement-document-toolkit-for-silverlight/ para obtener más información