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