Ejmeplo de impresion con un objeto FixedDocument

Descripción general

Imprimir con un objeto FixedDocument es la forma más sencilla de hacer alguna impresión con control de paginación, margen y todo lo demás.

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

    Public Shared Sub TestFixedDocument()
        '-------------------------------------
        'Bibliografía
        'WPF Printing Part 2 – The Fixed Document
        'http://www.nbdtech.com/Blog/archive/2009/04/20/wpf-printing-part-2-the-fixed-document.aspx
        '-------------------------------------
        'Impresión de un FixedDocument es la forma más sencilla de hacer alguna impresión "real" 
        'con Control de paginación, margen y todo lo demás.
        'Primero tenemos que conseguir la configuración de la impresora, 
        'sobre todo necesitamos el tamaño de página para crear un documento con el mismo tamaño de la página,
        'Para ello usaremos PrintDialog 
        Dim pd As New PrintDialog()
        If (pd.ShowDialog() <> True) Then Return
        ' Ahora cree un documento [FixedDocument] y definimos su tamaño de página: 
        Dim document As New FixedDocument()
        document.DocumentPaginator.PageSize = New Size(pd.PrintableAreaWidth, pd.PrintableAreaHeight)
        '---------------------------------------------------------------
        ' Proceso de creación y carga de texto de la primera pagina
        '---------------------------------------------------------------
        ' A) Crear la primera página y  definir (también aquí) el tamaño de la página: 
        Dim page1 As New FixedPage()
        page1.Width = document.DocumentPaginator.PageSize.Width
        page1.Height = document.DocumentPaginator.PageSize.Height
        ' B) Crear un TextBlock para meter en el todo el texto de la pagina
        ' Observa que en la página se define también:
        ' El texto de la pagina, el tamaño de la letra y el margen
        Dim page1text As New TextBlock
        With page1text
            .Text = "Esta es la primera página"
            .FontSize = 40
            .Margin = New Thickness(96)
        End With
        ' C) Agregar el TextBlock a la página:
        page1.Children.Add(page1text)
        ' D) Agregar la pagina al documento
        ' Agregar la página al documento, es un poco complicado porque necesitamos usar 
        ' un objeto [PageContent] como intermediario. 
        ' ¡ Problemilla tonto! No podemos usar [PageContent]  directamente, sino que tendremos que usar la interfaz IAddChild
        ' Una observación:
        ' Según la documentación se supone que no se debe usar IAddChild directamente pero es la única manera de construir un documento fijo.
        Dim Page1Content As New PageContent
        DirectCast(Page1Content, System.Windows.Markup.IAddChild).AddChild(page1)
        document.Pages.Add(Page1Content)
        '/Eof primera pagina
        '---------------------------------------------------------------
        ' Repetir el proceso para una segunda pagina
        Dim page2 As New FixedPage()
        page2.Width = document.DocumentPaginator.PageSize.Width
        page2.Height = document.DocumentPaginator.PageSize.Height
        Dim page2Text As New TextBlock()
        page2Text.Text = "Esta es la SEGUNDA página"
        page2Text.FontSize = 40
        page2Text.Margin = New Thickness(96)
        page2.Children.Add(page2Text)
        Dim Page2Content As New PageContent
        DirectCast(Page1Content, System.Windows.Markup.IAddChild).AddChild(page2)
        document.Pages.Add(Page2Content)
        ' Por ultimo, imprimir el documento resultante: 
        ' usando [PrintDialog] definida al principio de la función
        Dim NombreTrabajoParaInfoImpresora As String = "Mi primer trabajo de impresión [FixedDocument]."
        pd.PrintDocument(document.DocumentPaginator, NombreTrabajoParaInfoImpresora)
        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]