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