Wie druckt man in WPF eine WPF Seite oder Control-Element in einer Druckvorschau aus?
Unter Microsoft Windows WPF gibt es keine richtige Lösung um eine Seite in der Druckvorschau anzuzeigen oder zu drucken.
Hier ist eine Lösung, mit welcher man WPF Controls, Windows oder Pages in einer Druckvorschau anzeigen kann und drucken kann.
Die Lösung funktioniert über eine Ausgabe des xpsDocuments, einer festen Pixel orientierten Druckausgabe.
Anschliessend wird die Seite mit einem Documentpreviewer angezeigt.
DruckVorschau einer WPF Anwendung:
Der folgende Code erstellt eine Druckvorschau
private void BtnPrint_Click(object sender, RoutedEventArgs e) { Print_WPF_Preview(Grid_Plan); }
public void Print_WPF_Preview(FrameworkElement wpf_Element) { //------------< WPF_Print_current_Window >------------ //--< create xps document >-- XpsDocument doc = new XpsDocument("print_previw.xps", FileAccess.ReadWrite); XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(doc); SerializerWriterCollator preview_Document = writer.CreateVisualsCollator(); preview_Document.BeginBatchWrite(); preview_Document.Write(wpf_Element); //*this or wpf xaml control preview_Document.EndBatchWrite(); //--</ create xps document >--
//var doc2 = new XpsDocument("Druckausgabe.xps", FileAccess.Read);
FixedDocumentSequence preview = doc.GetFixedDocumentSequence();
var window = new Window(); window.Content = new DocumentViewer { Document = preview }; window.ShowDialog();
doc.Close(); //------------</ WPF_Print_current_Window >------------
} |
Zur WPF seite muss man im Using Bereich die Verweise ergänzen:
using System.Windows.Documents; using System.Windows.Documents.Serialization; using System.Windows.Xps; using System.Windows.Xps.Packaging; |
Über Referenzes muss man eine neue Referenz setzen zu
Microsoft Printing Microsoft Reachframework |
Fehler:
The type or namespace name 'Packaging' does not exist in the namespace 'System.Windows.Xps' (are you missing an assembly reference?) |
Referenz System.Printing
Und Referenz: Reachframework