The library offers a very high flexibility in managing the generated PDF document headers and footers. Basically you can add any element in headers and footers: HTML, images, text, page numbering. It is possible to set the header and footer visibility in each page or completely change the header and footer in any page of the generated PDF document in the PdfConverter..::..PrepareRenderPdfPageEvent event handler. Below you can see a complete example of adding headers and footers to the generated PDF document.

Code Sample - Headers and Footers

C# Copy imageCopy
protected void btnConvert_Click(object sender, EventArgs e)
{
    string urlToConvert = textBoxWebPageURL.Text.Trim();

    PdfConverter pdfConverter = new PdfConverter();

    // set the license key
    pdfConverter.LicenseKey = "B4mYiJubiJiInIaYiJuZhpmahpGRkZE=";

    // set header
    pdfConverter.PdfHeaderOptions.HeaderHeight = float.Parse(textBoxHeaderHeight.Text.Trim());
    AddHeaderElements(pdfConverter);

    // set footer
    pdfConverter.PdfFooterOptions.FooterHeight = float.Parse(textBoxFooterHeight.Text.Trim());
    AddFooterElements(pdfConverter);

    // handle the PrepareRenderPdfPageEvent to set the header and footer visibility in each page
    pdfConverter.PrepareRenderPdfPageEvent += new PrepareRenderPdfPageDelegate(pdfConverter_PrepareRenderPdfPageEvent);

    // Performs the conversion and get the pdf document bytes that can 
    // be saved to a file or sent as a browser response
    byte[] pdfBytes = pdfConverter.GetPdfBytesFromUrl(urlToConvert);

    // remove event handler
    pdfConverter.PrepareRenderPdfPageEvent -= new PrepareRenderPdfPageDelegate(pdfConverter_PrepareRenderPdfPageEvent);

    // send the generated PDF document to client browser

    // get the object representing the HTTP response to browser
    HttpResponse httpResponse = HttpContext.Current.Response;

    // add the Content-Type and Content-Disposition HTTP headers
    httpResponse.AddHeader("Content-Type", "application/pdf");
    httpResponse.AddHeader("Content-Disposition", String.Format("attachment; filename=HtmlToPdfFeatures.pdf; size={0}", pdfBytes.Length.ToString()));

    // write the PDF document bytes as attachment to HTTP response 
    httpResponse.BinaryWrite(pdfBytes);

    // Note: it is important to end the response, otherwise the ASP.NET
    // web page will render its content to PDF document stream
    httpResponse.End();
}

void pdfConverter_PrepareRenderPdfPageEvent(PrepareRenderPdfPageParams eventParams)
{
    // set the header and footer visibility on first, odd and even pages
    if (cbShowFooter.Checked)
    {
        if (eventParams.PageNumber == 1 && !cbShowFooterOnFirstPage.Checked)
            eventParams.Page.ShowFooter = false;
        else if ((eventParams.PageNumber % 2) == 0 && !cbShowFooterOnEvenPages.Checked)
            eventParams.Page.ShowFooter = false;
        else if ((eventParams.PageNumber % 2) == 1 && !cbShowFooterOnOddPages.Checked)
            eventParams.Page.ShowFooter = false;
    }

    if (cbShowHeader.Checked)
    {
        if (eventParams.PageNumber == 1 && !cbShowHeaderOnFirstPage.Checked)
            eventParams.Page.ShowHeader = false;
        else if ((eventParams.PageNumber % 2) == 0 && !cbShowHeaderOnEvenPages.Checked)
            eventParams.Page.ShowHeader = false;
        else if ((eventParams.PageNumber % 2) == 1 && !cbShowHeaderOnOddPages.Checked)
            eventParams.Page.ShowHeader = false;
    }
}

private void AddHeaderElements(PdfConverter pdfConverter)
{
    // set the header HTML area
    HtmlToPdfElement headerHtml = new HtmlToPdfElement(0, 0, 0, pdfConverter.PdfHeaderOptions.HeaderHeight,
            "<b>HTML in Header</b>", null, 1024, 0);
    headerHtml.FitHeight = true;
    headerHtml.EmbedFonts = cbEmbedFonts.Checked;
    pdfConverter.PdfHeaderOptions.AddElement(headerHtml);

    if (cbDrawHeaderLine.Checked)
    {
        // set the header line
        float pdfPageWidth = 0;
        if (pdfConverter.PdfDocumentOptions.PdfPageOrientation == PdfPageOrientation.Portrait)
            pdfPageWidth = pdfConverter.PdfDocumentOptions.PdfPageSize.Width;
        else
            pdfPageWidth = pdfConverter.PdfDocumentOptions.PdfPageSize.Height;

        LineElement headerLine = new LineElement(0, pdfConverter.PdfHeaderOptions.HeaderHeight,
                    pdfPageWidth - pdfConverter.PdfDocumentOptions.LeftMargin - pdfConverter.PdfDocumentOptions.RightMargin,
                    pdfConverter.PdfHeaderOptions.HeaderHeight);
        headerLine.LineStyle.LineWidth = 0.5f;
        headerLine.ForeColor = Color.FromKnownColor((KnownColor)Enum.Parse(typeof(KnownColor), ddlHeaderLineColor.SelectedItem.ToString()));
        pdfConverter.PdfHeaderOptions.AddElement(headerLine);
    }
}

private void AddFooterElements(PdfConverter pdfConverter)
{
    //write the page number
    TextElement footerText = new TextElement(0, pdfConverter.PdfFooterOptions.FooterHeight - 15, "This is page &p; of &P;  ",
        new System.Drawing.Font(new System.Drawing.FontFamily("Times New Roman"), 10, System.Drawing.GraphicsUnit.Point));
    footerText.EmbedSysFont = true;
    footerText.TextAlign = HorizontalTextAlign.Right;
    pdfConverter.PdfFooterOptions.AddElement(footerText);

    // set the footer HTML area
    HtmlToPdfElement footerHtml = new HtmlToPdfElement(0, 0, 0, pdfConverter.PdfFooterOptions.FooterHeight,
                "<i>HTML in Footer</i>", null, 1024, 0);
    footerHtml.FitHeight = true;
    footerHtml.EmbedFonts = cbEmbedFonts.Checked;
    pdfConverter.PdfFooterOptions.AddElement(footerHtml);

    if (cbDrawFooterLine.Checked)
    {
        // set the footer line
        float pdfPageWidth = 0;
        if (pdfConverter.PdfDocumentOptions.PdfPageOrientation == PdfPageOrientation.Portrait)
            pdfPageWidth = pdfConverter.PdfDocumentOptions.PdfPageSize.Width;
        else
            pdfPageWidth = pdfConverter.PdfDocumentOptions.PdfPageSize.Height;

        LineElement footerLine = new LineElement(0, 0,
                    pdfPageWidth - pdfConverter.PdfDocumentOptions.LeftMargin - pdfConverter.PdfDocumentOptions.RightMargin, 0);
        footerLine.LineStyle.LineWidth = 0.5f;
        footerLine.ForeColor = Color.FromKnownColor((KnownColor)Enum.Parse(typeof(KnownColor), ddlFooterLineColor.SelectedItem.ToString()));
        pdfConverter.PdfFooterOptions.AddElement(footerLine);
    }
}

See Also

Reference

Other Resources