/// <summary> /// Print the content of the RichTextBox /// </summary> /// <param name="printType">Printing type to define how to perform the printing process</param> /// <param name="margins">Page margins or null value for use default margins</param> /// <param name="printType">Delegate invoked before print each page</param> public static void Print(this RichTextBox richTextBox, PrintType printType, Margins margins, BeforePagePrintDelegate beforePagePrintDelegate) { new RichTextBoxHelper(richTextBox).Print(printType, margins, beforePagePrintDelegate); }
public void Print(PrintType printType, Margins margins, BeforePagePrintDelegate beforePagePrintDelegate) { var doc = new PrintDocument(); doc.BeginPrint += new PrintEventHandler(Document_BeginPrint); doc.EndPrint += new PrintEventHandler(Document_EndPrint); doc.PrintPage += new PrintPageEventHandler(Document_PrintPage); doc.DefaultPageSettings.Margins = margins ?? new Margins(20, 20, 20, 20); doc.DocumentName = "CompactView document"; this.beforePagePrintDelegate = beforePagePrintDelegate; try { switch (printType) { case PrintType.DirectPrint: MeasureOnly = false; doc.Print(); break; case PrintType.ShowPrintDialog: case PrintType.ShowPrintDialogWithTotalPages: if (printType == PrintType.ShowPrintDialogWithTotalPages) { MeasureOnly = true; PrintController controller = doc.PrintController; doc.PrintController = new PreviewPrintController(); doc.Print(); // Only for calculate total pages doc.PrintController = controller; } else { TotalPages = int.MaxValue; } MeasureOnly = false; var printDlg = new PrintDialog { Document = doc, AllowSomePages = true }; printDlg.PrinterSettings.FromPage = 1; printDlg.PrinterSettings.MinimumPage = 1; printDlg.PrinterSettings.ToPage = TotalPages; printDlg.PrinterSettings.MaximumPage = TotalPages; if (printDlg.ShowDialog() == DialogResult.OK) { doc.Print(); } break; case PrintType.PrintPreview: MeasureOnly = false; var previewDlg = new PrintPreviewDialog { WindowState = FormWindowState.Maximized, Document = doc, ShowIcon = false }; previewDlg.ShowDialog(); break; } } catch (Exception ex) { Trace.WriteLine(ex.Message); } }