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


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;
    }
}