The print handler implementation given below shows print dialog before printing the loaded web page.
To learn how to reuse this print handler, please take a look at the corresponding article.
C#
public class DialogPrintHandler : PrintHandler { private Control parentControl; public DialogPrintHandler(Control parentControl) { this.parentControl = parentControl; } public PrintStatus OnPrint(PrintJob printJob) { ManualResetEvent waitEvent = new ManualResetEvent(false); bool print = false; PrintSettings settings = printJob.PrintSettings; parentControl.BeginInvoke((Action) (() => { PrintDialog dialog = new PrintDialog(); dialog.AllowSomePages = true; if (dialog.ShowDialog(parentControl) == DialogResult.OK) { print = true; settings.Copies = dialog.PrinterSettings.Copies; settings.PrinterName = dialog.PrinterSettings.PrinterName; settings.DuplexMode = (DuplexMode) dialog.PrinterSettings.DefaultPageSettings.PrinterSettings.Duplex; settings = convertPrintSettings(settings, dialog); settings.PaperSize = PaperSize.ISO_A3; } waitEvent.Set(); })); waitEvent.WaitOne(); return print ? PrintStatus.CONTINUE : PrintStatus.CANCEL; } private PrintSettings convertPrintSettings(PrintSettings printSettings, PrintDialog dlgPrint) { printSettings.PageMargins = new PageMargins(dlgPrint.PrinterSettings.DefaultPageSettings.Margins.Top, dlgPrint.PrinterSettings.DefaultPageSettings.Margins.Left, dlgPrint.PrinterSettings.DefaultPageSettings.Margins.Right, dlgPrint.PrinterSettings.DefaultPageSettings.Margins.Bottom); printSettings.PageRanges = new List<PageRange>() { new PageRange(dlgPrint.PrinterSettings.FromPage, dlgPrint.PrinterSettings.ToPage) }; printSettings.Landscape = dlgPrint.PrinterSettings.DefaultPageSettings.Landscape; return printSettings; } }
VB.NET
Public Class DialogPrintHandler Implements PrintHandler Private parentControl As Control Public Sub New(ByVal parentControl As Control) Me.parentControl = parentControl End Sub Public Function OnPrint(ByVal printJob As PrintJob) As PrintStatus _ Implements PrintHandler.OnPrint Dim waitEvent As ManualResetEvent = New ManualResetEvent(False) Dim print As Boolean = False Dim settings As PrintSettings = printJob.PrintSettings parentControl.BeginInvoke(CType((sub() Dim dialog As PrintDialog = New PrintDialog() dialog.AllowSomePages = True If dialog.ShowDialog(parentControl) = DialogResult.OK Then print = True settings.Copies = dialog.PrinterSettings.Copies settings.PrinterName = dialog.PrinterSettings.PrinterName settings.DuplexMode = CType(dialog.PrinterSettings.DefaultPageSettings.PrinterSettings.Duplex, DuplexMode) settings = convertPrintSettings(settings, dialog) settings.PaperSize = PaperSize.ISO_A3 End If waitEvent.Set() End sub), Action)) waitEvent.WaitOne() Return If(print, PrintStatus.CONTINUE, PrintStatus.CANCEL) End Function Private Function convertPrintSettings(ByVal printSettings As PrintSettings, ByVal dlgPrint As PrintDialog) _ As PrintSettings printSettings.PageMargins = New PageMargins(dlgPrint.PrinterSettings.DefaultPageSettings.Margins.Top, dlgPrint.PrinterSettings.DefaultPageSettings.Margins.Left, dlgPrint.PrinterSettings.DefaultPageSettings.Margins.Right, dlgPrint.PrinterSettings.DefaultPageSettings.Margins.Bottom) printSettings.PageRanges = New List(Of PageRange)() From { New PageRange(dlgPrint.PrinterSettings.FromPage, dlgPrint.PrinterSettings.ToPage) } printSettings.Landscape = dlgPrint.PrinterSettings.DefaultPageSettings.Landscape Return printSettings End Function End Class