protected void convertToPdfButton_Click(object sender, EventArgs e)
{
    // Create a HTML to PDF converter object with default settings
    HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();

    // Set license key received after purchase to use the converter in licensed mode
    // Leave it not set to use the converter in demo mode
    htmlToPdfConverter.LicenseKey = "fvDh8eDx4fHg4P/h8eLg/+Dj/+jo6Og=";

    // Set a handler for AfterRenderPdfPageEvent where to add the stamp in each PDF page over the main content
    htmlToPdfConverter.AfterRenderPdfPageEvent += new AfterRenderPdfPageDelegate(htmlToPdfConverter_AfterRenderPdfPageEvent);

    try
    {
        // The buffer to receive the generated PDF document
        byte[] outPdfBuffer = null;

        if (convertUrlRadioButton.Checked)
        {
            string url = urlTextBox.Text;

            // Convert the HTML page given by an URL to a PDF document in a memory buffer
            outPdfBuffer = htmlToPdfConverter.ConvertUrl(url);
        }
        else
        {
            string htmlString = htmlStringTextBox.Text;
            string baseUrl = baseUrlTextBox.Text;

            // Convert a HTML string with a base URL to a PDF document in a memory buffer
            outPdfBuffer = htmlToPdfConverter.ConvertHtml(htmlString, baseUrl);
        }

        // Send the PDF as response to browser

        // Set response content type
        Response.AddHeader("Content-Type", "application/pdf");

        // Instruct the browser to open the PDF file as an attachment or inline
        Response.AddHeader("Content-Disposition", String.Format("attachment; filename=Add_Elements_Over_Main_Content.pdf; size={0}", outPdfBuffer.Length.ToString()));

        // Write the PDF document buffer to HTTP response
        Response.BinaryWrite(outPdfBuffer);

        // End the HTTP response and stop the current page processing
        Response.End();
    }
    finally
    {
        // Uninstall the handler
        htmlToPdfConverter.AfterRenderPdfPageEvent -= new AfterRenderPdfPageDelegate(htmlToPdfConverter_AfterRenderPdfPageEvent);
    }
}

void htmlToPdfConverter_AfterRenderPdfPageEvent(AfterRenderPdfPageParams eventParams)
{
    if (!addStampCheckBox.Checked)
        return;

    // Get the rendered PDF page
    PdfPage pdfPage = eventParams.Page;

    int pageNumber = eventParams.PageNumber;
    int pageCount = eventParams.PageCount;
    bool isOddPage = pageNumber % 2 != 0;

    // Get the PDF document
    Document pdfDocument = pdfPage.Document;

    // Get the PDF page drawable area width and height
    float pdfPageWidth = pdfPage.ClientRectangle.Width;
    float pdfPageHeight = pdfPage.ClientRectangle.Height;

    // Create a .NET font
    Font timesNewRomanFont = new Font("Times New Roman", 50, GraphicsUnit.Point);

    // Create a PDF font
    PdfFont pdfFont = pdfDocument.AddFont(timesNewRomanFont, true);

    // The stamp text
    string text = String.Format("Stamp on Page {0} of {1}", pageNumber, pageCount);

    // Measure the text 
    float textWidth = pdfFont.GetTextWidth(text);

    // Calculate the PDF page diagonal
    float pdfPageDiagonal = (float)Math.Sqrt(pdfPageWidth * pdfPageWidth + pdfPageHeight * pdfPageHeight);

    // The text location on PDF page diagonal
    float xLocation = (pdfPageDiagonal - textWidth) / 2;

    // Create the stamp as a rotated text element
    TextElement stampTextElement = new TextElement(xLocation, 0, text, pdfFont);
    stampTextElement.ForeColor = isOddPage ? Color.Blue : Color.Green;
    stampTextElement.Rotate((float)(Math.Atan(pdfPageHeight / pdfPageWidth) * (180 / Math.PI)));
    stampTextElement.Opacity = 75;

    // Add the stamp to PDF page
    pdfPage.AddElement(stampTextElement);
}