Wpf- Impresión de documentos dinámicos

Descripción general

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. 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.

[TOC] Tabla de Contenidos

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 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 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 la apariencia de las fuentes.


↑↑↑

Observación

La docuemtación de Microsoft Información general sobre documentos dinámicos es francamente buena y contiene ilustraciones, ejemplos e información detallada sobre documentos dinámicos.


↑↑↑

Estudio Preliminar

    Private Sub EsturdioPreliminarFlowDocument()
        '----------------------------------------------------------------------------------
        'Bibliografía
        'https://www.codeproject.com/Articles/33076/WPF-Printing-Basic-Text-Printing
        'WPF Printing - Basic Text Printing
        'Este artículo te enseña cómo realizar la impresión de texto básico en WPF.
        '----------------------------------------------------------------------------------
        'En primer lugar, vamos a crear un texto para imprimir
        Dim textoParaImprimir As String = "Imprime este texto tan importante"
        ' En segundo lugar, vamos a crear el título impresión: este es el texto que aparecerá en la cola de 
        ' impresión de Windows al abrir la impresora y ver los trabajos de impresión. 
        ' Sólo aparece mientras el trabajo se está imprimiendo.
        Dim nombreTrabajoImpresion As String = "Mi primer trabajo de impresión."
        ' Lo siguiente que debemos es crear una nueva instancia de la clase [PrintDialog].
        ' Esta clase no solo se utiliza para mostrar un cuadro de diálogo de impresión 
        ' para que el usuario pueda seleccionar una impresora y modificar las opciones de impresora, 
        ' también puede ser utilizado para realizar la impresión, incluso sin mostrar el 
        ' cuadro de diálogo Imprimir.PrintDialog
        Dim diag As New PrintDialog()
        ' Sin embargo, vera rápidamente que la clase PrintDocument no funciona de esta manera. 
        ' El método PrintDocument toma un  DocumentPaginator (System.Windows.Documents.DocumentPaginator).
        ' y como DocumentPaginator es una clase "Must Inherit" (abstract), no se puede crear una nueva instancia de la misma.
        ' ¿Por lo tanto, cómo conseguimos uno?
        ' Aqui es donde la cosa se pone un poco complicadilla... 
        ' La clase FlowDocument (System.Windows.Documents.FlowDocument) 
        ' es una clase que puede utilizar para guardar y dar formato al texto que queremos imprimir. 
        ' Aunque la clase  FlowDocument no es un DocumentPaginator,
        ' implementa la interfaz IDocumentPaginatorSource.DocumentPaginator
        ' que proporciona acceso a su DocumentPaginator
        ' Desgraciadamente, el constructor de la claseFlowDocument acepta como argumento un objeto 
        ' (System.Windows.Documents.Block), que, convenientemente, es otra clase "Must Inherit" (abstract) . 
        ' Como la clase Paragraph (System.Windows.Documents.Paragraph) hereda de la clase (Block), 
        ' puede utilizarse como argumento en su lugar.
        ' Crear una clase Run, pasando en el constructor el texto
        ' La case run contiene el texto que se va a imprimir
        Dim r As New Run(textoParaImprimir)
        ' Crear una clase Paragraph pasándole la instancia de la clase Run
        Dim ph As New Paragraph(r)
        'Crear el documento (FlowDocument) pasando la instancia de la clase párrafo
        Dim doc As New FlowDocument(ph)
        ' crear el margen de alrededor de la pagina
        Dim margenPagina As New Thickness()
        margenPagina.Bottom = 100
        margenPagina.Left = 100
        margenPagina.Right = 100
        margenPagina.Top = 100
        doc.PagePadding = margenPagina
        ' alternativa para los cuatro bordes iguales
        doc.PagePadding = New Thickness(100)
        ' Enviar el documento a la impresora
        diag.PrintDocument(
        CType(doc, IDocumentPaginatorSource).DocumentPaginator,
            nombreTrabajoImpresion)
        End Sub


↑↑↑

Funcion compacta

Todo lo anterior, se puede condensar en una funcion que hace el mismo trabajo

    Public Sub PrintUsingDocumentCondensed(ByVal textoParaImprimir As String, Optional ByVal nombreTrabajoImpresion As String = "")
        ' Crear una clase Run, pasando en el constructor el texto
        ' Crear una clase Paragraph pasándole la instancia de la clase Run
        ' Crear el documento (FlowDocument) pasando la instancia de la clase párrafo
        Dim doc As New FlowDocument(New Paragraph(New Run(textoParaImprimir)))
        ' Crear el margen de alrededor de la pagina
        doc.PagePadding = New Thickness(100)
        ' Se utiliza para realizar la impresión
        Dim diag As New PrintDialog()
        ' Enviar el documento (directamente) a la impresora
        diag.PrintDocument(
        CType(doc, IDocumentPaginatorSource).DocumentPaginator,
            nombreTrabajoImpresion)
        End Sub

↑↑↑

A.2.Enlaces

[Para saber mas]
[También debes consultar]
[Grupo de documentos]
[Documento Index]
[Documento Start]
[Imprimir el Documento]
© 1997 - - La Güeb de Joaquín
Joaquín Medina Serrano
Ésta página es española

Codificación
Fecha de creación
Última actualización
[HTML5 Desarrollado usando CSS3]