I am using the Winnovative's PdfConverter to convert my HTML page to a PDF, i am able to get the PDF with header footer and all. But i have a requirement where i need to set the height of the Header and footer dynamically based on the content of the text that needs to be added. Below is the code i tried to achieve this but was not successful. Please can you help on what would i be missing here, or is there any other method i need to follow. The PdfFooterOptions.FooterHeight is initially set to default 40px.
PdfConverter pdfConverter = new PdfConverter();
// set the converter options
pdfConverter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4;
pdfConverter.PdfDocumentOptions.PdfCompressionLevel = PdfCompressionLevel.Normal;
pdfConverter.PdfDocumentOptions.PdfPageOrientation = PdfPageOrientation.Portrait;
// set header and footer
pdfConverter.PdfDocumentOptions.ShowHeader = true;
pdfConverter.PdfDocumentOptions.ShowFooter = true;
//Add header and footer text
AddHeaderElements(pdfConverter, text);
AddFooterElements(pdfConverter, text);
// set the HTML content
pdfConverter.PdfDocumentOptions.FitWidth = true;
// set the embedded fonts option
pdfConverter.PdfDocumentOptions.EmbedFonts = true;
// set the live HTTP links option
pdfConverter.PdfDocumentOptions.LiveUrlsEnabled = true;
// set the JavaScript
pdfConverter.JavaScriptEnabled = true;
// set the images in PDF are compressed with JPEG to reduce the PDF document size
pdfConverter.PdfDocumentOptions.JpegCompressionEnabled = true;
// enable auto-generated bookmarks for a specified list of tags (e.g. H1 and H2)
pdfConverter.PdfBookmarkOptions.HtmlElementSelectors = new string[] { "H1", "H2" };
// Performs the conversion and get the pdf document bytes that can be further
// saved to a file or sent as response to browser
// The baseURL parameter helps the converter to get the CSS files and images
// referenced by a relative URL in the HTML string.
byte[] pdfValue = null;
pdfValue = pdfConverter.GetPdfBytesFromHtmlString(htmlCodeToConvert);
private void AddFooterElements(PdfConverter pdfConverter, string title)
{
//write the page number
TextElement footerText = new TextElement(550, pdfConverter.PdfFooterOptions.FooterHeight - 20,
string.Format(uiContentController.GetText("Aanvarag_Page"), "&p;", "&P;"),
new System.Drawing.Font(new System.Drawing.FontFamily("Tahoma"),
7, System.Drawing.GraphicsUnit.Point));
footerText.EmbedSysFont = true;
footerText.TextAlign = HorizontalTextAlign.Left;
pdfConverter.PdfFooterOptions.AddElement(footerText);
// set the footer HTML area
HtmlToPdfElement footerHtml = new HtmlToPdfElement(10, 0, 0,
0,
title, null, 1024, 0);
footerHtml.NavigationCompletedEvent += OnFooterHtmlNavigationCompleted;
pdfConverter.PdfFooterOptions.AddElement(footerHtml);
}
void OnFooterHtmlNavigationCompleted(NavigationCompletedParams eventParams)
{
// Get the header HTML width and height from event parameters
float footerHtmlWidth = eventParams.HtmlContentWidthPt;
float footerHtmlHeight = eventParams.HtmlContentHeightPt;
// Calculate the header width from coverter settings
float footerWidth = pdfConverter.PdfDocumentOptions.PdfPageSize.Width - pdfConverter.PdfDocumentOptions.LeftMargin -
pdfConverter.PdfDocumentOptions.RightMargin;
// Calculate a resize factor to fit the header width
float resizeFactor = 1;
if (footerHtmlWidth > footerWidth)
resizeFactor = footerWidth / footerHtmlWidth;
// Calculate the header height to preserve the HTML aspect ratio
float footerHeight = footerHtmlHeight * resizeFactor;
// Set the calculated header height
pdfConverter.PdfFooterOptions.FooterHeight = footerHeight;
}