Podemos crear un documento XPS desde Office si instalamos el plugin que hay para esto. Pero como estoy creando un aplicativo cuyos usuarios no necesariamente lo tienen instalado, tuve que buscar la forma de convertir un documento de Word proporcionado por el usuario en un XPS. Esto es lo que se requiere:
Primero debemos importar los ensamblados necesarios:
- Microsoft.Office.Interop.Word
- Microsoft.Office.Tools.v9.0
- Microsoft.Office.Tools.Word.v9.0
- Microsoft.VisualStudio.Tools.Office.Runtime.v10.0
- ReachFramework
Ahora vamos al código. Yo en una ventana XAML he creado un componente DocumentViewer así:
<DockPanel> <DocumentViewer Name="docview"/> </DockPanel>
Ahora en nuestra clase C# importamos los espacios necesarios:
using System.Windows.Xps.Packaging; using System.IO;
El espacio System.Windows.Xps.Packaging es con el que trabajaremos los documentos XPS. No importaremos el espacio Microsoft.Office.Interop.Word porque también tiene una clase llamada Document que crea ambigüedad con la de XPS.
Ahora en cualquier lugar del código, por ejemplo, dentro de un evento click de un botón, hacemos la conversión así:
Microsoft.Office.Interop.Word.Application wa = new Microsoft.Office.Interop.Word.Application(); wa.Documents.Add(rutaDelDoc); Microsoft.Office.Interop.Word.Document wd = wa.ActiveDocument; string ruta = rutaDelXPS; wd.SaveAs(ruta, Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatXPS); wa.Quit(); xd = new XpsDocument(ruta, FileAccess.Read);
NOTA: he omitido las cláusulas try-catch por facilidad, pero es recomendable capturar los errores que puedan ocurrir.
La variable rutaDelDoc contiene la ruta del documento de Word que queremos transformar. La variable rutaDelXPS contiene la ruta donde guardaremos el documento XPS. Finalmente, en la variable xd tenemos nuestro documento XPS final. Ahora podemos pasarle este documento a nuestro DocumentViewer así:
docview.Document = xd.GetFixedDocumentSequence();
Con esto, al ejecutar nuestro aplicativo WPF, veremos algo como esto:
No hay comentarios:
Publicar un comentario
Si deseas extender esta entrada, por favor hazlo