Documentos en WPF

Windows Presentation Foundation (WPF) ofrece una amplia variedad de características de documentos que permiten la creación de contenido de alta fidelidad diseñado para que resulte más accesible y fácil de leer que en generaciones anteriores de Windows. Además de las capacidades y la calidad mejoradas, WPF también proporciona servicios integrados de presentación, empaquetado y seguridad de documentos. En este tema se proporciona una introducción a los tipos de documentos y el empaquetado de documentos de WPF.

Tipos de documentos

WPF divide los documentos en dos categorías amplias según su uso previsto; estas categorías de documentos se denominan "documentos fijos" y "documentos dinámicos".

Los documentos fijos están diseñados para aplicaciones que requieren una presentación precisa de tipo WYSIWYG ("lo que se ve se lo que se obtiene"), independiente del hardware de pantalla o de impresora utilizado. Entre los usos típicos de los documentos fijos se incluyen la publicación de escritorio, el procesamiento de textos y el diseño de formularios, donde es fundamental no apartarse del diseño de página original. Como parte de su diseño, un documento fijo mantiene la colocación posicional precisa de los elementos de contenido, independientemente de la pantalla o el dispositivo de impresión en uso. Por ejemplo, una página de un documento fijo que se vea en una pantalla de 96 ppp, aparecerá exactamente igual cuando se imprima en una impresora láser de 600 ppp o en un fotocomponedor de 4800 ppp. El diseño de página sigue siendo el mismo en todos los casos, mientras que la calidad del documento se maximiza según las capacidades de cada dispositivo.

En comparación, los documentos dinámicos están diseñados para optimizar su presentación y legibilidad, y son óptimos para su uso cuando la facilidad de lectura es el escenario de consumo principal del documento. En lugar de establecer un diseño predefinido, los documentos dinámicos ajustan y redistribuyen dinámicamente su contenido basándose en variables en tiempo de ejecución, como el tamaño de la ventana, la resolución del dispositivo y las preferencias opcionales del usuario. Una página web es un ejemplo sencillo de un documento dinámico donde se da formato al contenido de la página de manera dinámica para ajustarse a la ventana actual. Los documentos dinámicos optimizan la experiencia de visualización y lectura para el usuario, según el entorno en tiempo de ejecución. Por ejemplo, el mismo documento dinámico cambiará de formato de manera dinámica para mejorar la legibilidad óptima en una pantalla de 19 pulgadas de alta resolución o en una pantalla de PDA pequeña de 2×3 pulgadas. Además, los documentos dinámicos tienen varias características integradas, como la búsqueda, los modos de visualización que optimizan la legibilidad, y la capacidad de cambiar el tamaño y el aspecto de las fuentes. Consulte Información general sobre documentos dinámicos para ver ilustraciones, ejemplos e información detallada sobre los documentos dinámicos.

Controles de documentos y diseño del texto

.NET Framework proporciona un conjunto de controles previamente compilados que simplifican el uso de documentos fijos, de documentos dinámicos y de texto general dentro de la aplicación. La visualización de contenido de documentos fijos es compatible si se usa el control DocumentViewer. Tres controles diferentes admiten la presentación de contenido de documentos dinámicos: FlowDocumentReader, FlowDocumentPageViewer y FlowDocumentScrollViewer, que se asignan a distintos escenarios de usuario (vea las secciones siguientes). Otros controles de WPF proporcionan un diseño simplificado para admitir usos de texto generales (vea Texto en la interfaz de usuario, más adelante).

Control de documentos fijos: DocumentViewer

El control DocumentViewer está diseñado para mostrar contenido de FixedDocument. El control DocumentViewer proporciona una interfaz de usuario intuitiva que ofrece compatibilidad integrada para operaciones comunes, incluida la salida de impresión, copiar en el Portapapeles, zoom y características de búsqueda de texto. El control proporciona acceso a las páginas de contenido a través de un mecanismo de desplazamiento conocido. Como todos los controles de WPF, DocumentViewer admite cambios de estilo completos o parciales, lo que permite integrar visualmente el control en prácticamente cualquier aplicación o entorno.

DocumentViewer está diseñado para mostrar contenido en modo de solo lectura; la edición o modificación de contenido no está disponible y no se admite.

Controles de documentos dinámicos

Nota:

Para obtener más información sobre las características de los documentos dinámicos y cómo crearlos, vea Información general sobre documentos dinámicos.

Tres controles admiten la presentación de contenido de documentos dinámicos: FlowDocumentReader, FlowDocumentPageViewer y FlowDocumentScrollViewer.

FlowDocumentReader

FlowDocumentReader incluye características que permiten elegir dinámicamente entre distintos modos de visualización, incluido un modo de visualización de página única (una página a la vez), un modo de visualización de dos páginas a la vez (formato de lectura de libro) y un modo de visualización de desplazamiento continuo (sin límite). Para obtener más información sobre estos modos de visualización, vea FlowDocumentReaderViewingMode. Si no necesita la capacidad de cambiar dinámicamente entre distintos modos de visualización, FlowDocumentPageViewer y FlowDocumentScrollViewer proporcionan visores de contenido dinámico más ligeros que son fijos para un modo de visualización concreto.

FlowDocumentPageViewer y FlowDocumentScrollViewer

FlowDocumentPageViewer muestra el contenido en el modo de visualización de una página a la vez, mientras que FlowDocumentScrollViewer muestra el contenido en modo de desplazamiento continuo. Tanto FlowDocumentPageViewer como FlowDocumentScrollViewer son fijos para un modo de visualización concreto. Se pueden comparar con FlowDocumentReader, que incluye características que permiten elegir dinámicamente entre distintos modos de visualización (como lo establece la enumeración FlowDocumentReaderViewingMode), a costa de consumir más recursos que FlowDocumentPageViewer o que FlowDocumentScrollViewer.

De manera predeterminada, siempre se muestra una barra de desplazamiento vertical y una barra de desplazamiento horizontal se vuelve visible cuando es necesario. La UI predeterminada para FlowDocumentScrollViewer no incluye una barra de herramientas, pero se puede usar la propiedad IsToolBarVisible para habilitar una barra de herramientas integrada.

Texto en la interfaz de usuario

Además de agregar texto a documentos, el texto, obviamente, puede usarse en la UI de una aplicación, como en formularios. WPF incluye varios controles para dibujar texto en la pantalla. Cada control se destina a un escenario diferente y tiene su propia lista de características y limitaciones. En general, el elemento TextBlock debe usarse cuando se necesita compatibilidad de texto limitada, como una frase breve en una interfaz de usuario (UI). Label puede usarse cuando se necesita una compatibilidad de texto mínima. Para obtener más información, consulte Información general sobre TextBlock.

Empaquetado de documentos

Las API de System.IO.Packaging proporcionan un medio eficaz para organizar los datos de las aplicaciones, el contenido de los documentos y los recursos relacionados en un contenedor único de fácil acceso, portátil y fácil de distribuir. Un archivo ZIP es un ejemplo de un tipo Package capaz de contener varios objetos como una unidad única. Las API de empaquetado proporcionan una implementación ZipPackage predeterminada, diseñada con un estándar de Convenciones de empaquetado abierto con arquitectura de archivos XML y ZIP. Las API de empaquetado de WPF facilitan la creación de paquetes, así como el almacenamiento y el acceso a objetos dentro de ellos. Un objeto almacenado en un Package se conoce como PackagePart ("elemento"). Los paquetes también pueden incluir certificados digitales firmados que pueden utilizarse para identificar al originador de un elemento y para validar que no se ha modificado el contenido de un paquete. Los paquetes también incluyen una característica PackageRelationship, que permite agregar información adicional a un paquete o asociarla con elementos concretos sin modificar realmente el contenido de los elementos existentes. Los servicios de paquete también admiten Microsoft Windows Rights Management (RM).

La arquitectura de paquetes de WPF sirve como base para varias tecnologías clave:

  • Documentos XPS conformes a la especificación XML Paper Specification (XPS).

  • Documentos XML de formato abierto (.docx) de Microsoft Office "12".

  • Formatos de almacenamiento personalizados para su propio diseño de aplicaciones.

Basada en las API de empaquetado, una clase XpsDocument está diseñada específicamente para almacenar documentos de WPF de contenido fijo. XpsDocument es un documento autocontenido que se puede abrir en un visor, mostrarse en un control DocumentViewer, dirigirse a una cola de impresión o imprimirse directamente en una impresora compatible con XPS.

En las secciones siguientes se proporciona información adicional sobre las API Package y XpsDocument proporcionadas con WPF.

Componentes de paquetes

Las API de empaquetado de WPF permiten organizar los documentos y datos de la aplicación en una sola unidad portátil. Un archivo ZIP es uno de los tipos más comunes de paquetes, y es el tipo de paquete predeterminado que se proporciona con WPF. Package es una clase abstracta desde la que se implementa ZipPackage mediante una arquitectura de archivos XML y ZIP de estándar abierto. El método Open usa ZipPackage para crear y usar archivos ZIP de manera predeterminada. Un paquete puede contener tres tipos básicos de elementos:

Elemento Descripción
PackagePart Archivos de contenido, datos, documentos y recursos de la aplicación.
PackageDigitalSignature [Certificado X.509] para la identificación, autenticación y validación.
PackageRelationship Información agregada relacionada con el paquete o un elemento concreto.

PackageParts

PackagePart ("elemento") es una clase abstracta que hace referencia a un objeto almacenado en una clase Package. En un archivo ZIP, los elementos del paquete corresponden a los archivos individuales almacenados en el archivo ZIP. ZipPackagePart proporciona la implementación predeterminada de los objetos serializables almacenados en una clase ZipPackage. Al igual que un sistema de archivos, los elementos incluidos en el paquete se almacenan en directorios jerárquicos o en una organización de "estilo de carpetas". Mediante las API de empaquetado de WPF, las aplicaciones pueden escribir, almacenar y leer varios objetos PackagePart mediante un único contenedor de archivos ZIP.

PackageDigitalSignatures

Por seguridad, una clase PackageDigitalSignature ("firma digital") puede asociarse con elementos dentro de un paquete. PackageDigitalSignature incorpora [509], que proporciona dos características:

  1. Identifica y autentica al originador del elemento.

  2. Valida que no se haya modificado el elemento.

La firma digital no impide que se modifique un elemento, pero no se podrá realizar la comprobación de validación de la firma digital si el elemento se ha modificado de alguna manera. La aplicación, a continuación, puede emprender la acciones apropiadas: por ejemplo, bloquear la apertura del elemento o notificar al usuario que se ha modificado el elemento y que los datos no son seguros.

PackageRelationships

Una clase PackageRelationship ("relación") proporciona un mecanismo para asociar información adicional con el paquete o con un elemento dentro del paquete. Una relación es una función de nivel del paquete que puede asociar información adicional a un elemento sin modificar el contenido real del elemento. Insertar directamente nuevos datos en el contenido del elemento no suele ser práctico en muchos casos:

  • No se conocen el tipo real del elemento ni su esquema de contenido.

  • Incluso si se conocen, el esquema de contenido podría no proporcionar un medio para agregar nueva información.

  • El elemento puede estar firmado digitalmente o cifrado, impidiendo cualquier modificación.

Las relaciones de los paquetes proporcionan un medio reconocible para agregar y asociar información adicional a los elementos individuales o al paquete completo. Las relaciones de los paquetes se utilizan para dos funciones principales:

  1. Definir las relaciones de dependencia de un elemento con otro elemento.

  2. Definir las relaciones de información que agregan notas u otros datos relacionados con el elemento.

Una clase PackageRelationship proporciona un medio rápido y reconocible para definir las dependencias y agregar otra información asociada con un elemento del paquete o con el paquete en su conjunto.

Relaciones de dependencia

Las relaciones de dependencia se utilizan para describir las dependencias que mantiene un elemento con otros elementos. Por ejemplo, un paquete puede contener un elemento HTML que incluya una o más etiquetas de imagen <img>. Las etiquetas de imagen hacen referencia a imágenes que se encuentran en otros elementos internos del paquete o externos al paquete (por ejemplo, a los que se pueda acceder a través de Internet). Crear una relación PackageRelationship asociada con un archivo HTML permite la detección y el acceso rápido y sencillo a los recursos dependientes. Una aplicación de explorador o de visor puede tener acceso directamente a las relaciones entre los elementos y comenzar a ensamblar de inmediato los recursos dependientes sin conocer el esquema ni analizar el documento.

Relaciones de información

Una relación PackageRelationship, similar a una nota o a una anotación, puede utilizarse también para almacenar otros tipos de información que se asociarán con un elemento sin tener que modificar el contenido mismo del elemento.

Documentos XPS

Un documento XML Paper Specification (XPS) es un paquete que contiene uno o más documentos fijos, junto con todos los recursos y la información necesarios para su representación. XPS también es el formato de archivo nativo de cola de impresión de Windows Vista. Una clase XpsDocument se almacena en el conjunto de datos ZIP estándar y puede incluir una combinación de componentes XML y binarios, como archivos de imagen y de fuentes. Se utilizan PackageRelationships para definir las dependencias entre el contenido y los recursos necesarios para representar totalmente el documento. El diseño de XpsDocument proporciona una solución de documento única y de alta fidelidad que admite varios usos:

  • Lectura, escritura y almacenamiento de contenido y recursos de documentos fijos como un archivo único portátil y fácil de distribuir.

  • Visualización de documentos con el visor de XPS.

  • Generación de documentos en el formato nativo de salida de cola de impresión de Windows Vista.

  • Enrutamiento de documentos directamente a una impresora compatible con XPS.

Vea también