Ich habe ein bevorstehendes Projekt, das in der Lage sein muss, einfache Berichte aus seinen Daten zu drucken. Es wird WPF-basiert sein und ich frage mich, welchen Weg ich gehen soll.
Ich weiß, dass WPF eine eigene Drucktechnologie (basierend auf XPS) einführt, die recht einfach zu bedienen aussieht. Ein Teil von mir fragt sich jedoch, ob es einfacher wäre, das ReportViewer-Steuerelement zu verwenden und es in ein Windows Forms-Hoststeuerelement einzubetten, da Benutzer dadurch in eine Vielzahl von Formaten exportieren und drucken können.
Hat jemand Erfahrung mit dem Drucken / Berichten von WPF? Welche Richtung würden Sie empfehlen?
Antworten:
Wir hatten das gleiche Problem und haben vorerst RDLC / ReportViewer verwendet. Es gibt kein natives WPF-Berichterstellungstool (das ich kenne) und RDLC ist ziemlich einfach zu verwenden und kostenlos. Der Laufzeitaufwand dafür ist gering (ca. 2 MB), aber Sie müssen daran denken, ihn zu verteilen, da er nicht Teil von .NET Framework ist.
quelle
Einschränkungen von RDL
Ich habe ursprünglich RDLC / ReportViewer zum Drucken mit WPF verwendet, fand es aber sehr einschränkend. Einige der Einschränkungen, die ich gefunden habe, waren:
Das Drucken direkt aus WPF ist sehr einfach
Aufgrund dieser Einschränkungen habe ich mich mit der Erstellung von Berichten mit reinem WPF befasst und festgestellt, dass dies wirklich ziemlich trivial ist. Mit WPF können Sie Ihre eigene
DocumentPaginator
Unterklasse implementieren , die Seiten generieren kann.Ich habe eine einfache DocumentPaginator-Unterklasse entwickelt, die alle visuellen Elemente verwendet, den visuellen Baum analysiert und ausgewählte Elemente ausblendet, um jede Seite zu erstellen.
DocumentPaginator-Details
Folgendes bewirkt meine DocumentPaginator-Unterklasse während der Initialisierung (aufgerufen beim Abrufen des ersten PageCount oder beim ersten Aufruf von GetPage ()):
Die GetPage-Methode meines DocumentPaginator lautet wie folgt:
Dispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, new Action(() => {} ));
), um alle Aufgaben zum Rendern des Hintergrunds abzuschließenDies stellte sich als recht einfacher Code heraus und ermöglichte es mir, praktisch alles, was ich mit WPF erstellen konnte, in Seiten umzuwandeln und auszudrucken.
Zusätzliche Berichtsunterstützung
Jetzt, da mein Paginator funktioniert, muss ich mir keine Sorgen mehr machen, ob ich meine WPF-Inhalte für Bildschirm oder Papier erstelle. Tatsächlich funktioniert die Benutzeroberfläche, die ich für die Dateneingabe und -bearbeitung erstelle, häufig auch sehr gut zum Drucken.
Von dort aus fügte ich eine einfache Symbolleiste und etwas Code hinzu, was zu einem vollwertigen Berichtssystem führte, das auf WPF basiert und weitaus leistungsfähiger als RDL ist. Mein Berichtscode kann in Dateien exportiert, auf dem Drucker gedruckt, Seitenbilder ausgeschnitten / eingefügt und Daten für Excel ausgeschnitten / eingefügt werden. Ich kann auch jede meiner Benutzeroberflächen mit einem Klick auf ein Kontrollkästchen auf "Druckansicht" umschalten, um zu sehen, wie sie beim Drucken aussehen wird. All dies in nur wenigen hundert Zeilen C # und XAML!
An diesem Punkt denke ich, dass die einzige Funktion, die RDL nicht in meinem Berichtscode hat, die Möglichkeit ist, eine formatierte Excel-Tabelle zu generieren. Ich kann sehen, wie dies getan werden kann, aber bisher war dies nicht erforderlich - das Ausschneiden und Einfügen der Daten allein hat ausgereicht.
Aus meiner Erfahrung heraus würde ich empfehlen, einen Paginator zu schreiben und dann WPF selbst zu verwenden, um Ihre Berichte zu erstellen.
quelle
Schauen Sie sich http://wpfreports.codeplex.com/ an.
quelle
Schauen Sie sich PdfReports an . Es handelt sich um eine Code First Reporting Engine, die auf den Bibliotheken iTextSharp und EPPlus aufbaut. Es ist sowohl mit .NET 3.5+ Web- als auch mit Windows-Anwendungen kompatibel.
quelle
Wie wäre es mit Scryber? Damit können PDF-Berichtsvorlagen mithilfe von XML definiert und zur Laufzeit an Daten in Ihrer Anwendung gebunden werden. http://scryber.codeplex.com/
quelle
Weitere Informationen zur Ray Burns-Antwort finden Sie unter: Benutzerdefinierter Paginator für Datenrasterdokumente
Welches ist ein guter Ausgangspunkt.
quelle
Ich habe kürzlich die Aufgabe erfüllt, ein eigenes Berichtssystem zu entwickeln, das im Wesentlichen aus Designumgebung und Datenquellen-Manager besteht. Die erste Aufgabe bestand darin, eine WYSWIG-ähnliche Designumgebung zu entwickeln. Ich habe dies mit GDI + gemacht, ohne mich um das Drucken zu kümmern, da das Drucken / Generieren der Druckvorschau am einfachsten war als ich erwartet hatte. Im Allgemeinen müssen nur alle Dinge auf dem Bildschirm auf das Grafikobjekt des Druckereignisses gezeichnet werden.
Ich denke, dass es im Fall von WPF ähnlich wäre. Sie sollten sich also nur darum kümmern, Ihren Bericht auf dem Bildschirm anzuzeigen, und das Drucken würde nur wenige Codezeilen umfassen.
quelle
Ohne eine ganze politische Diskussion über die Zukunft von WPF zu führen, war die beste Option, die wir gefunden haben, den ReportViewer in ein Windows Forms-Hoststeuerelement zu packen.
http://blog.pineywoodstech.com/index.php/2012/01/using-microsoft-reportviewer-with-wpf/
quelle