xtrareports-400019-desktop-reporting-common-features-printing-print-reports-in-wpf-share-printer-settings-between-reports.md
This example demonstrates how to use the same printer settings for multiple reports. It invokes the Print dialog for the first printed report only, and then prints all other reports using the specified printing settings.
Handle the PrintingSystemBase.StartPrint event for all the target reports and use the event argument’s PrintDocument property to access the PrinterSettings property.
Call the PrintHelper.PrintDirect method for the first report to open the Print dialog and the PrintHelper.PrintDirect method for the other reports.
using System.Drawing.Printing;
using DevExpress.Xpf.Printing;
using DevExpress.XtraReports.UI;
using DevExpress.XtraPrinting;
//...
private PrinterSettings printingSettings;
private void simpleButton_Click(object sender, RoutedEventArgs e) {
XtraReport1 report1 = new XtraReport1();
XtraReport[] reports = new XtraReport[] { new XtraReport2(), new XtraReport3() };
report1.PrintingSystem.StartPrint += new PrintDocumentEventHandler(FirstReportEventHandler);
foreach (XtraReport report in reports) {
report.PrintingSystem.StartPrint += new PrintDocumentEventHandler(OtherReportsEventHandler);
}
PrintHelper.Print(report1);
foreach (XtraReport report in reports) {
PrintHelper.PrintDirect(report);
}
}
private void FirstReportEventHandler(object sender, PrintDocumentEventArgs e) {
printingSettings = e.PrintDocument.PrinterSettings;
}
private void OtherReportsEventHandler(object sender, PrintDocumentEventArgs e) {
int pageCount = e.PrintDocument.PrinterSettings.ToPage;
e.PrintDocument.PrinterSettings = printingSettings;
// The following line is required if the number of pages for each report varies,
// and you consistently need to print all pages.
e.PrintDocument.PrinterSettings.ToPage = pageCount;
}
Imports System.Drawing.Printing
Imports DevExpress.Xpf.Printing
Imports DevExpress.XtraReports.UI
Imports DevExpress.XtraPrinting
' ...
Private Sub simpleButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
Dim report1 As XtraReport1 = New XtraReport1()
Dim reports As XtraReport() = New XtraReport() {New XtraReport2(), New XtraReport3()}
report1.PrintingSystem.StartPrint += New PrintDocumentEventHandler(FirstReportEventHandler)
For Each report As XtraReport In reports
report.PrintingSystem.StartPrint += New PrintDocumentEventHandler(OtherReportsEventHandler)
Next
PrintHelper.Print(report1)
For Each report As XtraReport In reports
PrintHelper.PrintDirect(report)
Next
End Sub
Private Sub FirstReportEventHandler(ByVal sender As Object, ByVal e As PrintDocumentEventArgs)
printingSettings = e.PrintDocument.PrinterSettings
End Sub
Private Sub OtherReportsEventHandler(ByVal sender As Object, ByVal e As PrintDocumentEventArgs)
Dim pageCount As Integer = e.PrintDocument.PrinterSettings.ToPage
e.PrintDocument.PrinterSettings = printingSettings
' The following line is required if the number of pages for each report varies,
' and you consistently need to print all pages.
e.PrintDocument.PrinterSettings.ToPage = pageCount
End Sub