2010-02-05 12 views
5

Tengo una ventana WPF con un marco. Tengo un código para imprimir el contenido del marco usando printdialog e printvisual. Pero esto solo imprimirá lo que aparezca en la pantalla aunque el marco se desplace y haya otras partes disponibles.WPF - paginación al imprimir un visual

¿Hay una manera de agregar la paginación y asegurarse de que todo el contenido de mi marco imprimirá.

¿O hay otra manera de tomar el contenido de mi marco e imprimirlo? es decir, para no utilizar printvisual?

Respuesta

13

Sí. He hecho esto No es muy dificil

  1. envolver su marco dentro de un ScrollViewer que normalmente tiene su desplazamiento horizontal y vertical desactivada

  2. Cuando esté listo para imprimir, habilite el desplazamiento vertical. Esto provocará que se diga al Marco que tiene espacio vertical infinito, por lo que representará todo el contenido. Luego, llame a UpdateLayout() para obtener el diseño para actualizar.

  3. Implemente IDocumentPaginator para que devuelva el mismo fotograma para cada página, pero ajuste el clip y RenderTransform cada vez para mostrar una parte diferente del fotograma real.

  4. de impresión mediante el encargo IDocumentPaginator

La descripción anterior supone que desea fijar el ancho del marco al ancho de página y paginarla verticalmente. Esto sería apropiado para una página web pero no para una hoja de cálculo. Para el contenido similar a una hoja de cálculo, configuraría ScrollViewer para permitir el desplazamiento en ambas direcciones, dando al cuadro infinito espacio en cada sentido. En este caso, IDocumentPaginator es el mismo excepto que RenderTransforms y clipping se eligen para iterar tanto horizontal como verticalmente.

Esta técnica realmente funciona para cualquier contenido de WPF, no solo un Marco.

+0

Hola Ray, esto parece interesante ... ¿puedes darnos algunas muestras de código sobre cómo lo lograste, por favor? ¡Muchas gracias! – Sid

+0

También me gustaría saber cómo se hace esto, Ray. ¿Hay muestras ** buenas ** o tutoriales paso a paso disponibles? – DeMama

+0

Tal vez esto te ayude a empezar http://robertmcintosh.ca/2011/02/05/paginated-printing-of-wpf-visuals/ –

0

Usted puede recorrer de forma recursiva a través del árbol visual con el VisualTreeHelper y traducir todos los controles que se encuentran a una serie de elementos para su uso en un flujo de documentos. Este documento de flujo puede imprimir. Creo que no hay una forma aceptable de imprimir un contenido directamente desde la interfaz gráfica de usuario.

Cuestiones relacionadas