Documentos en WPF

Windows Presentation Foundation (WPF) proporciona una gama amplia de características de documentos que permiten la creación de contenido de alta fidelidad diseñado facilitar su acceso y lectura con respecto a las generaciones anteriores de Windows. Además de las mejoras en las funciones y en la calidad, WPF proporciona servicios integrados para la presentación, empaquetado y seguridad de los documentos. En este tema se proporciona una introducción a los tipos y al empaquetado de documentos de WPF.

Este tema contiene las secciones siguientes.

  • Tipos de documentos
  • Controles de documentos y diseño del texto
  • Empaquetado de documentos
  • Documentos XPS
  • Temas relacionados

Tipos de documentos

WPF divide los documentos en dos categorías generales basándose en su uso previsto; estas categorías de documento se denominan "documentos fijos" y "documentos dinámicos".

Los documentos fijos están diseñados para las aplicaciones que requieren una presentación "what you see is what you get" (WYSIWYG) precisa, independiente del hardware de pantalla o de impresión utilizado. Los usos típicos para los documentos fijos incluyen la creación de publicaciones, el procesamiento de textos y el diseño de formularios, donde es vital que se respete el diseño de página original. Un documento fijo mantiene la colocación posicional precisa de los elementos de contenido con independencia del dispositivo de pantalla o de impresión utilizado. Por ejemplo, una página de un documento fijo presentada en una pantalla de 96 ppp aparecerá exactamente igual cuando se imprima en una impresora láser de 600 ppp o en una máquina tipográfica fotográfica de 4800 ppp. El diseño de la página permanece inalterado en todos los casos, aunque la calidad del documento se maximiza de acuerdo con las funciones 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 constituye el principal escenario de consumo del documento. En lugar de establecerse en un diseño predefinido, este tipo de documentos ajusta y recoloca dinámicamente su contenido basándose en las variables de tiempo de ejecución, tales como el tamaño de la ventana, la resolución del dispositivo y las preferencias opcionales del usuario. Una página web constituye un ejemplo sencillo de un documento dinámico donde se da formato al contenido de la página dinámicamente para ajustarlo a la ventana activa. Los documentos dinámicos optimizan la experiencia de visualización y lectura del usuario, basándose en el entorno de tiempo de ejecución. Por ejemplo, el mismo documento dinámico cambiará su formato dinámicamente para aportar una legibilidad óptima en una pantalla de 19 pulgadas de alta resolución o en la pequeña pantalla de un PDA de 2 x 3 pulgadas. Además, los documentos dinámicos tienen varias características integradas que incluyen la búsqueda, modos de presentación que optimizan la legibilidad y la capacidad de cambiar el tamaño y aspecto de las fuentes. Consulte Información general sobre documentos dinámicos para obtener ilustraciones, ejemplos e información detallada sobre 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 los documentos fijos, los documentos dinámicos y el texto general dentro de la aplicación. La presentación de contenido de documentos fijos se admite mediante 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 del usuario (consulte las secciones más adelante). Otros controles WPF proporcionan diseño simplificado para admitir los usos de texto general (consulte Texto en la interfaz de usuario, más adelante).

Control de documentos fijos: DocumentViewer

El control DocumentViewer está diseñado para mostrar contenido FixedDocument. El control DocumentViewer proporciona una interfaz de usuario intuitiva que ofrece compatibilidad integrada para las operaciones comunes, tales como las operaciones de salida impresa, copia en el portapapeles, aplicación de zoom o búsqueda de texto. El control proporciona acceso a las páginas de contenido mediante un mecanismo de desplazamiento conocido. Al igual que todos los controles de WPF, DocumentViewer admite el cambio de estilo completo o parcial, lo que permite integrar el control visualmente en la práctica totalidad de las aplicaciones y los entornos.

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

Controles de documentos dinámicos

Nota: para obtener información más detallada sobre las características de los documentos dinámicos y cómo crearlos, consulte Información general sobre documentos dinámicos.

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

FlowDocumentReader

FlowDocumentReader dispone de características que permiten al usuario elegir dinámicamente distintos modos de visualización, incluido el modo de visualización de una sola página (una página a la vez), dos páginas a la vez (formato de lectura de libro) y 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 sola página, mientras que FlowDocumentScrollViewer muestra el contenido en modo de desplazamiento continuo. Tanto FlowDocumentPageViewer como FlowDocumentScrollViewer son fijos para un modo de visualización concreto. Puede compararlos con FlowDocumentReader, que incluye características que permiten al usuario elegir dinámicamente entre varios modos de visualización (suministrados por la enumeración FlowDocumentReaderViewingMode), a costa de exigir un uso más intensivo de recursos que FlowDocumentPageViewer o FlowDocumentScrollViewer.

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

Texto en la interfaz de usuario

Además de agregar el texto a los documentos, es evidente que el texto se puede utilizar en la interfaz de usuario de la aplicación, como en los formularios, por ejemplo. 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 se debe usar cuando se necesita una compatibilidad de texto limitada, como una frase breve en una user interface (UI). Label se puede usar 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 APIs de System.IO.Packaging proporcionan un medio eficaz de organizar los datos de la aplicación, el contenido de los documentos y los recursos relacionados en un contenedor único de fácil acceso, portátil y sencillo de distribuir. Un archivo ZIP es un ejemplo de un tipo de Package capaz de contener varios objetos en una sola unidad. La APIs de empaquetado proporciona una implementación de ZipPackage predeterminada diseñada mediante una norma basada en la especificación Open Packaging Conventions (OPC, o Convenciones de empaquetado abierto) con arquitectura de archivo XML y ZIP. Las APIs de empaquetado de WPF facilitan la creación de paquetes, así como el almacenamiento y acceso de objetos en su interior. Un objeto almacenado en un Package se denomina PackagePart ("elemento"). Los paquetes también pueden incluir certificados digitales firmados que se pueden utilizar para identificar al originador de un elemento y comprobar que no se haya 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 que ello modifique el contenido de los elementos existentes. Los servicios de empaquetado también admiten Microsoft Windows Rights Management (RM).

La arquitectura de paquetes de WPF constituye los cimientos de varias tecnologías fundamentales:

  • Documentos XPS que cumplen 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.

Basándose en las API de empaquetado, XpsDocument está diseñado específicamente para almacenar documentos de contenido fijo de WPF. XpsDocument es un documento autónomo que se puede abrir en un visor, mostrar en un control DocumentViewer, enrutar a una cola de impresión o imprimir directamente en una impresora compatible con XPS.

En las secciones siguientes se proporciona información adicional sobre las APIs Package y XpsDocument que se proporcionan con WPF.

Empaquetar componentes

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

PackagePart

Contenido de aplicaciones, datos, documentos y archivos de recursos.

PackageDigitalSignature

Certificado X.509 para la identificación, autenticación y validación.

PackageRelationship

Información agregada relacionada con el paquete o con un elemento concreto del mismo.

PackageParts

Una clase PackagePart ("elemento") es una clase abstracta que hace referencia a un objeto que está almacenado en una clase Package. En un archivo ZIP, los elementos del paquete corresponden a los archivos individuales almacenados dentro del archivo ZIP. ZipPackagePart proporciona la implementación predeterminada para los objetos serializables almacenados en ZipPackage. Como en un sistema de archivos, los elementos contenidos en el paquete se almacenan con una organización de directorios jerárquicos o "de carpetas". Gracias a las API de empaquetado de WPF, las aplicaciones pueden escribir, almacenar y leer varios objetos PackagePart utilizando un solo contenedor de archivos ZIP.

PackageDigitalSignatures

Para aportar seguridad, es posible asociar PackageDigitalSignature ("firma digital") a los elementos de un paquete. PackageDigitalSignature incorpora un 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 evita que se modifique un elemento, pero se produce un error en una comprobación de la validación en la firma digital si el elemento se ha modificado de alguna forma. La aplicación puede emprender la acción adecuada; por ejemplo, bloquear la apertura del elemento o notificar al usuario que se ha modificado el elemento y ya no es seguro.

PackageRelationships

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

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

  • Aunque se conozca, el esquema de contenido podría no proporcionar un medio de agregar la nueva información.

  • El elemento puede estar firmada digitalmente o cifrada, lo que evitaría cualquier modificación.

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

  1. Definir las relaciones de dependencia entre un elemento y otro.

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

PackageRelationship proporciona un medio rápido y reconocible de definir 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 un elemento establece con otros elementos. Por ejemplo, un paquete podría contener un elemento HTML que incluya una o más etiquetas de imagen <img>. Las etiquetas de la imagen hacen referencia a las imágenes que se encuentran en otros elementos que pueden estar contenidos en el propio paquete o ser externos a él (por ejemplo, accesibles a través de Internet). La creación de una relación (PackageRelationship) asociada al archivo HTML facilita y agiliza la detección de los recursos dependientes y el acceso a ellos. Una aplicación de explorador o visor puede tener acceso directamente a las relaciones entre los elementos y comenzar inmediatamente a ensamblar los recursos dependientes sin conocer el esquema ni analizar el documento.

Relaciones de información

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

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 la presentación. XPS también es el formato de archivo nativo de cola de impresión de Windows Vista. XpsDocument se almacena en el conjunto de datos ZIP estándar, y puede incluir una combinación de XML y componentes binarios, como imágenes y archivos de fuente. Se utilizan PackageRelationships para definir las dependencias entre el contenido y los recursos necesarios para presentar totalmente el documento. El diseño de XpsDocument proporciona una solución de documento único de alta fidelidad que admite varios usos:

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

  • Presentación de documentos con la aplicación Visor de XPS.

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

  • Enrutamiento directo de documentos a las impresoras compatibles con XPS.

Vea también

Referencia

FixedDocument

FlowDocument

XpsDocument

ZipPackage

ZipPackagePart

PackageRelationship

DocumentViewer

Conceptos

Optimizar el rendimiento: Texto

Información general sobre documentos dinámicos

Información general sobre impresión

Almacenamiento y serialización de documentos