2009-07-24 9 views
5

Utilizo la ruta de impresión de WPF para manejar diagramas grandes y grandes creados en nuestra aplicación. El diagrama completo consiste en imágenes.Guardar e imprimir XPSDocument a través de Paginator (parece) provoca una rasterización del contenido

Un llamado "DiseñadorPaginador" pagina el diagrama (es bastante simple). A partir de este punto, hago lo siguiente tres cosas: - Imprimo el documento con PrintDialog.PrintDocument (Paginator, Título) - También creo un documento XPS con XpsDocumentWriter.Write (Paginator, PrintTicket); lo que puedo guardar en el disco duro - Desde el XpsDocument asigno XpsDocumentWriter.GetFixedDocumentSequence() a un DocumentViewer

En pocas palabras, es importante siguiente código:

PrintDialog _pdialog = new PrintDialog(); 
System.Printing.ValidationResult result = this.PrintQueue.MergeAndValidatePrintTicket(this.PrintQueue.UserPrintTicket, this.PrintTicket); 

_pdialog.PrintTicket = result.ValidatedPrintTicket; 
XpsDocument _xpsDocument = new XpsDocument("C:\\test.xps",FileAccess.ReadWrite); 
XpsDocumentWriter xpsdw = XpsDocument.CreateXpsDocumentWriter(_xpsDocument); 
xpsdw.Write(this.Paginator, result.ValidatedPrintTicket); 
documentviewer.Document = _xpsDocument.GetFixedDocumentSequence(); 
_xpsDocument.Close(); 

_pdialog.PrintQueue = this.PrintQueue; 
_pdialog.PrintDocument(this.Paginator, "Model Test"); 

La salida es la siguiente:

XPS en HDD -> absolutamente borroso. No puedes reconocer nada Es como un archivo GIF con un zoom 100x. FixedDocumentSequence desde XPSDocument en DocumentViewer -> Perfecto. Esto debería ser lo que el archivo XPS debe ser Salida de impresión -> Horrible, borroso, pero al menos mucho mejor que el archivo xps

Y ahora la parte misteriosa: Si imprimo directamente desde el DocumentViewer (en el que FixedDocumentSequence parece perfecto), obtengo el mismo resultado borroso de la primera impresión.

Mi idea sobre este caso es que el sistema XPS de WPF rasteriza el contenido y lo coloca como mapa de bits de baja calidad dentro del documento xps. Son todos los vectores, y a pesar de esto, la salida siempre parece familiar a un mapa de bits de baja resolución.

Agradeceria cualquier ayuda. Estoy sin ideas. Traté mucho de depurar este problema, pero de alguna manera parece ser algo simple y delicado al mismo tiempo.

+0

Yo también he estado luchando contra la rasterización como un loco. no es divertido en absoluto. –

Respuesta

4

Descubrí cómo evitar mi problema, pero no puedo garantizar que la solución también se aplique a la suya. De hecho, parece que al usar dos VisualBrushes anidados proyectados en su Visual, está utilizando resultados en la salida borrosa.

One VisualBrush que usamos en la impresión wpf no puede evitarse: es el que se aplica a través de nuestro Paginator para cortar Visual y distribuirlo en varias páginas. También tuve un UserControl que sirvió como "Plantilla". Dibujé un rectángulo con el VisualBrush de nuestro diagrama en UserControl, y después de esta operación el UserControl mismo se dibuja como un rectángulo con un VisualBrush en las páginas por el paginador. Dado que la ruta de impresión de WPF usa XPS para imprimir, también puede crear un XPSDocument, cambiar el tipo de archivo a zip, extraerlo y analizar una página de su documento con cualquier editor de texto. Esto le ayudará a comprender su problema.

También sospecho que el documento está "rasterizado" cuando el contenido de VisualBrush no se aplica con la relación de altura/anchura original 1: 1 que tiene Visual. Los errores dentro de un cálculo de cambio de tamaño llevaron a una relación de altura/ancho de 1: 0,9948 para el VisualBrush aplicado, y esto condujo a una salida borrosa (excluyendo el problema "VisualBrush anidado").

Esto todavía es solo una sospecha. Mi problema ha sido resuelto excluyendo el VisualBrush "extra" y respetando la relación de aspecto original. También es posible suponer que uno o ambos problemas solo aparecen en combinación con un determinado Visual/Effect/Transformation o incluso LinearBrushes.

Al menos, aprendí una cosa sobre la ruta de impresión de WPF cuando se trata de tales cuestiones: piense en el hecho de que sus cosas siempre se convierten en xps detrás de la escena, y xps es similar a wpf, pero no soportar cualquier cosa que haga wpf. De hecho, si no lo entendí mal, XPS fue la inspiración para XAML en WPF.

También agradecería cualquier respuesta real a este problema. Mi problema está resuelto, pero quiero saber por qué sucedió.

+0

Me encantaría saber cómo depurar esta situación y no tener que recurrir a prueba y error. (que simplemente está reafirmando su "Id como una respuesta real"). –

Cuestiones relacionadas