2009-07-24 1 views
5

Ich verwende den WPF-Druckpfad, um große große Diagramme zu handhaben, die in unserer Anwendung erstellt wurden. Das gesamte Diagramm besteht aus Visuals.Speichern und Drucken von XPSDocument über Paginator (scheint) verursacht eine Rasterisierung des Inhalts

Ein so genannter "DesignerPaginator" paginiert das Diagramm (es ist ziemlich einfach). Ab diesem Punkt mache ich die folgenden drei Dinge: - Ich drucke das Dokument mit PrintDialog.PrintDocument (Paginator, Titel) - Ich auch ein XPS-Dokument mit XpsDocumentWriter.Write (Paginator, PrintTicket); die ich speichern auf der Festplatte - Von der XpsDocument I XpsDocumentWriter.GetFixedDocumentSequence() zu einem Document

In aller Kürze folgenden Code zuweisen ist wichtig:

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"); 

Der Ausgang ist die folgende:

XPS auf HDD -> absolut verschwommen. Du kannst nichts erkennen. Es ist wie eine GIF-Datei mit einem 100-fachen Zoom. FixedDocumentSequence aus dem XPSDocument im DocumentViewer -> Perfect. Dies sollte sein, was die XPS-Datei soll Druckausgabe -> Horrible, verschwommen, aber zumindest viel besser als die XPS-Datei

Und jetzt der geheimnisvolle Teil: Wenn ich direkt aus dem DocumentViewer drucken (in dem die FixedDocumentSequence scheint perfekt), bekomme ich die gleiche verschwommene Ausgabe vom ersten Druck.

Mein Gedanke über diesen Fall ist, dass das XPS-System des WPF den Inhalt rastert und das Zeug als qualitativ minderwertige Bitmap in das xps-Dokument legt. Es sind alles Vektoren, und trotzdem erscheint die Ausgabe einer Bitmap mit niedriger Auflösung immer vertraut.

Ich würde jede Hilfe zu schätzen wissen. Ich habe keine Ideen mehr. Ich habe viel versucht, um dieses Problem zu beheben, aber irgendwie scheint es etwas Einfaches und Zartes zu sein.

+0

Auch ich habe die Rasterisierung wie verrückt gekämpft. überhaupt kein Spaß. –

Antwort

4

Ich habe herausgefunden, wie ich mein Problem vermeiden kann, aber ich kann nicht garantieren, dass die Lösung auch für Ihre Anwendung gilt. In der Tat scheint es, dass die Verwendung von zwei verschachtelten VisualBrushes projiziert auf Ihrem Visual Sie Ergebnisse in der verschwommenen Ausgabe verwendet.

Ein VisualBrush, den wir im WPF-Druck verwenden, kann nicht vermieden werden: Es ist derjenige, der über unseren Paginator angewendet wird, um das Visual zu schneiden und auf mehrere Seiten zu verteilen. Ich hatte auch ein UserControl, das als "Vorlage" diente. Ich zeichne ein Rechteck mit dem VisualBrush unseres Diagramms in das UserControl, und nach dieser Operation zeichnet sich das UserControl selbst als Rectangle mit einem VisualBrush auf die Seiten durch den Paginator. Da der WPF-Druckpfad XPS zum Drucken verwendet, können Sie auch ein XPSDocument erstellen, den Dateityp in zip ändern, extrahieren und eine Seite Ihres Dokuments mit einem beliebigen Texteditor analysieren. Dies wird Ihnen sehr helfen, Ihr Problem zu verstehen.

Ich vermute auch, dass das Dokument "gerastert" wird, wenn der Inhalt der VisualBrush nicht mit dem ursprünglichen 1: 1 Höhe/Breite-Verhältnis der Visual hat. Fehler in einer Größenanpassungsberechnung führten zu einem 1: 0,9948 Height/Width-Verhältnis für den angewendeten VisualBrush, was zu einer unscharfen Ausgabe führte (mit Ausnahme des "verschachtelten VisualBrush" -Problems).

Dies ist immer noch ein Verdacht. Mein Problem wurde gelöst, indem der "extra" VisualBrush ausgeschlossen wurde und das ursprüngliche Seitenverhältnis beibehalten wurde. Es kann auch angenommen werden, dass eines/oder beide Probleme nur in Kombination mit einem bestimmten Visual/Effect/Transformation oder sogar LinearBrushes auftreten.

Wenigstens habe ich eine Sache über den WPF-Druckpfad gelernt, wenn es um solche Probleme geht: Denken Sie daran, dass Ihre Sachen immer zu xps hinter der Szene konvertiert werden, und xps ist ähnlich wie wpf, tut es aber nicht unterstütze alles was wpf tut. In der Tat, wenn ich es nicht missverstanden habe, war XPS die Inspiration für XAML in WPF.

Ich würde auch jede echte Antwort auf dieses Problem begrüßen. Mein Problem ist gelöst, aber ich möchte wissen, warum es passiert ist.

+0

Ich würde gerne herausfinden, wie man diese Situationen debuggt und nicht auf Versuch und Irrtum zurückgreifen muss. (was nur deine "Id wie eine echte Antwort" wiedergibt). –

Verwandte Themen