The HiQPdf Library offers all the methods you need to convert URLs and HTML code to a PDF buffer in memory, to a PDF file on disk, to a PDF stream or to a PdfDocument object that can be further modified and then saved.
The Convert methods of the of the HiQPdf.HtmlToPdf class are finally called to convert HTML documents to PDF. Function of how the HTML document to be converted is given, by URL or by content, and function of where the output PDF document is written the following Convert methods are defined in the HiQPdf.HtmlToPdf class:
Methods to convert the HTML document from a given URL to PDF:
HtmlToPdfConvertUrlToFile(String, String) - Converts a HTML document from a given URL to a PDF file
HtmlToPdfConvertUrlToMemory(String) - Converts a HTML document from a given URL and produces a PDF document as a memory buffer
HtmlToPdfConvertUrlToStream(String, Stream) - Converts a HTML document from a given URL to a PDF document and writes the resulted PDF document to an output stream
HtmlToPdfConvertUrlToPdfDocument(String) - Converts a HTML document from a given URL and produces a HiQPdfPdfDocument object that can be further modified and then saved
Methods to convert a HTML code to PDF:
HtmlToPdfConvertHtmlToFile(String, String, String) - Converts a given HTML code to a PDF file
HtmlToPdfConvertHtmlToMemory(String, String) - Converts a given HTML code and produces a PDF document as a memory buffer
HtmlToPdfConvertHtmlToStream(String, String, Stream) - Converts a given HTML code to a PDF document and writes the resulted PDF document to an output stream
HtmlToPdfConvertHtmlToPdfDocument(String, String) - Converts a given HTML code and produces a HiQPdfPdfDocument object that can be further modified and then saved
The HTML to PDF Converter Demo sample from the HiQPdf software package exemplifies the most important settings of the HTML to PDF converter. Below there is a detailed description of each of these settings and the C# source code of the sample.
The SerialNumber property of the of the HiQPdf.HtmlToPdf class must be set with the purchased serial number as described in the License Purchasing section. In the sample code below is set with an evaluation serial number.
The Document property of the HiQPdf.HtmlToPdf class having the PdfDocumentControl type is used to control most of the properties of the generated PDF document like page size, page orientation, page margins, header and footer, outlines, font embedding, the document standard and the document security.
The PageSize property of the HiQPdf.PdfDocumentControl class controls the generated PDF document page size. The default value of this property is A4. The final width and height of the PDF pages is also influenced by the PageOrientation property. For example, if the initial page orientation was portrait and then it is set to landscape then the width of and height sizes are swapped, the width becoming bigger than the height.
The PageOrientation property of the HiQPdf.PdfDocumentControl class controls the generated PDF document page orientation. The default value of this property is Portrait.
The Margins property of the HiQPdf.PdfDocumentControl class controls the generated PDF document page margins. By default the generated document margins are all 0.
The FontEmbedding property of the HiQPdf.PdfDocumentControl class controls if the true type fonts used in HTML document are embedded in the PDF document. By default the true type fonts are embedded only if it is necessary, for example when using Unicode characters in HTML document.
The PdfStandard property of the HiQPdf.PdfDocumentControl class controls the PDF standard to which the generated document conforms. The possible standards are PDF without restrictions, PDF/A-1b and PDF/X-1a. By default the PDF standard without restrictions is used.
The Security property of the HiQPdf.PdfDocumentControl class controls the security of the generated PDF document. It is possible to password protect the generated PDF document with open and permission password, allow or forbid the document priting, content copying, content editing, forms filling, edit annotations and assembling. By default the generated PDF document does not have any security features.
The Header and Footer properties of the HiQPdf.PdfDocumentControl class control whether the header and footer are visible and also control their content. The PdfHeader and PdfFooter classes have a PdfHeaderLayout(PdfObject) method which can be used to layout various PDF objects in header or footer like text, images, HTML and graphics.
The BrowserWidth property of the HiQPdf.HtmlToPdf class is a property having a very high influence against the HTML content rendering. Changing this property is basically the equivalent of resizing a web browser window when viewing a web page. By default the Browser Width is 1200 pixels and this is suitable for displaying most of the web pages.
The HtmlLoadedTimeout property of the HiQPdf.HtmlToPdf class controls the maximum time in seconds to wait for HTML document to be loaded. The default value is 120 seconds. An exception is thrown if the HTML document cannot be loaded in HtmlLoadedTimeout seconds.
In this demo you can convert an URL, a local file or a custom HTML string to PDF. You can control the PDF page size and orientation, PDF page margins, browser width, add header and footer with page numbering, embed true type fonts in the generated PDF document.As a security option it is possible to set a password requested when the created PDF document document is opened and it is possible to disable the document printing when it is opened in a viewer.
private void buttonConvertToPdf_Click(object sender, EventArgs e) { // create the HTML to PDF converter HtmlToPdf htmlToPdfConverter = new HtmlToPdf(); // set browser width htmlToPdfConverter.BrowserWidth = int.Parse(textBoxBrowserWidth.Text); // set browser height if specified, otherwise use the default if (textBoxBrowserHeight.Text.Length > 0) htmlToPdfConverter.BrowserHeight = int.Parse(textBoxBrowserHeight.Text); // set HTML Load timeout htmlToPdfConverter.HtmlLoadedTimeout = int.Parse(textBoxLoadHtmlTimeout.Text); // set PDF page size and orientation htmlToPdfConverter.Document.PageSize = GetSelectedPageSize(); htmlToPdfConverter.Document.PageOrientation = GetSelectedPageOrientation(); // set the PDF standard used by the document htmlToPdfConverter.Document.PdfStandard = checkBoxPdfA.Checked?PdfStandard.PdfA: PdfStandard.Pdf; // set PDF page margins htmlToPdfConverter.Document.Margins = new PdfMargins(5); // set whether to embed the true type font in PDF htmlToPdfConverter.Document.FontEmbedding = checkBoxFontEmbedding.Checked; // set triggering mode; for WaitTime mode set the wait time before convert switch (comboBoxTriggeringMode.SelectedItem.ToString()) { case "Auto": htmlToPdfConverter.TriggerMode = ConversionTriggerMode.Auto; break; case "WaitTime": htmlToPdfConverter.TriggerMode = ConversionTriggerMode.WaitTime; htmlToPdfConverter.WaitBeforeConvert = int.Parse(textBoxWaitTime.Text); break; case "Manual": htmlToPdfConverter.TriggerMode = ConversionTriggerMode.Manual; break; default: htmlToPdfConverter.TriggerMode = ConversionTriggerMode.Auto; break; } // set header and footer SetHeader(htmlToPdfConverter.Document); SetFooter(htmlToPdfConverter.Document); // set the document security htmlToPdfConverter.Document.Security.OpenPassword = textBoxOpenPassword.Text; htmlToPdfConverter.Document.Security.AllowPrinting = checkBoxAllowPrinting.Checked; // set the permissions password too if an open password was set if (htmlToPdfConverter.Document.Security.OpenPassword != null && htmlToPdfConverter.Document.Security.OpenPassword != String.Empty) htmlToPdfConverter.Document.Security.PermissionsPassword = htmlToPdfConverter.Document.Security.OpenPassword + "_admin"; Cursor = Cursors.WaitCursor; // convert HTML to PDF string pdfFile = null; try { if (radioButtonConvertUrl.Checked) { // convert URL string url = textBoxUrl.Text; pdfFile = Application.StartupPath + @"\DemoOut\ConvertUrl.pdf"; // ConvertUrlToFile() is called to convert the html document and save the resulted PDF into a file on disk // Alternatively, ConvertUrlToMemory() can be called to save the resulted PDF in a buffer in memory htmlToPdfConverter.ConvertUrlToFile(url, pdfFile); } else { // convert HTML code string htmlCode = textBoxHtmlCode.Text; string baseUrl = textBoxBaseUrl.Text; pdfFile = Application.StartupPath + @"\DemoOut\ConvertHtml.pdf"; htmlToPdfConverter.ConvertHtmlToFile(htmlCode, baseUrl, pdfFile); } } catch (Exception ex) { MessageBox.Show(String.Format("Conversion failed. {0}", ex.Message)); return; } finally { Cursor = Cursors.Arrow; } // open the PDF document try { System.Diagnostics.Process.Start(pdfFile); } catch (Exception ex) { MessageBox.Show(String.Format("Conversion succeeded but cannot open '{0}'. {1}", pdfFile, ex.Message)); } } private void SetHeader(PdfDocumentControl htmlToPdfDocument) { // enable header display htmlToPdfDocument.Header.Enabled = checkBoxAddHeader.Checked; if (!htmlToPdfDocument.Header.Enabled) return; // set header height htmlToPdfDocument.Header.Height = 50; float pdfPageWidth = htmlToPdfDocument.PageOrientation == PdfPageOrientation.Portrait ? htmlToPdfDocument.PageSize.Width : htmlToPdfDocument.PageSize.Height; float headerWidth = pdfPageWidth - htmlToPdfDocument.Margins.Left - htmlToPdfDocument.Margins.Right; float headerHeight = htmlToPdfDocument.Header.Height; // set header background color htmlToPdfDocument.Header.BackgroundColor = Color.WhiteSmoke; string headerImageFile = Application.StartupPath + @"\DemoFiles\Images\HiQPdfLogo.png"; PdfImage logoHeaderImage = new PdfImage(5, 5, 40, Image.FromFile(headerImageFile)); htmlToPdfDocument.Header.Layout(logoHeaderImage); // layout HTML in header PdfHtml headerHtml = new PdfHtml(50, 5, @"<span style=""color:Navy; font-family:Times New Roman; font-style:italic""> Quickly Create High Quality PDFs with </span><a href=""http://www.hiqpdf.com"">HiQPdf</a>", null); headerHtml.FitDestHeight = true; headerHtml.FontEmbedding = checkBoxFontEmbedding.Checked; htmlToPdfDocument.Header.Layout(headerHtml); // create a border for header PdfRectangle borderRectangle = new PdfRectangle(1, 1, headerWidth - 2, headerHeight - 2); borderRectangle.LineStyle.LineWidth = 0.5f; borderRectangle.ForeColor = Color.Navy; htmlToPdfDocument.Header.Layout(borderRectangle); } private void SetFooter(PdfDocumentControl htmlToPdfDocument) { // enable footer display htmlToPdfDocument.Footer.Enabled = checkBoxAddFooter.Checked; if (!htmlToPdfDocument.Footer.Enabled) return; // set footer height htmlToPdfDocument.Footer.Height = 50; // set footer background color htmlToPdfDocument.Footer.BackgroundColor = Color.WhiteSmoke; float pdfPageWidth = htmlToPdfDocument.PageOrientation == PdfPageOrientation.Portrait ? htmlToPdfDocument.PageSize.Width : htmlToPdfDocument.PageSize.Height; float footerWidth = pdfPageWidth - htmlToPdfDocument.Margins.Left - htmlToPdfDocument.Margins.Right; float footerHeight = htmlToPdfDocument.Footer.Height; // layout HTML in footer PdfHtml footerHtml = new PdfHtml(5, 5, @"<span style=""color:Navy; font-family:Times New Roman; font-style:italic""> Quickly Create High Quality PDFs with </span><a href=""http://www.hiqpdf.com"">HiQPdf</a>", null); footerHtml.FitDestHeight = true; footerHtml.FontEmbedding = checkBoxFontEmbedding.Checked; htmlToPdfDocument.Footer.Layout(footerHtml); // add page numbering Font pageNumberingFont = new Font(new FontFamily("Times New Roman"), 8, GraphicsUnit.Point); //pageNumberingFont.Mea PdfText pageNumberingText = new PdfText(5, footerHeight - 12, "Page {CrtPage} of {PageCount}", pageNumberingFont); pageNumberingText.HorizontalAlign = PdfTextHAlign.Center; pageNumberingText.EmbedSystemFont = true; pageNumberingText.ForeColor = Color.DarkGreen; htmlToPdfDocument.Footer.Layout(pageNumberingText); string footerImageFile = Application.StartupPath + @"\DemoFiles\Images\HiQPdfLogo.png"; PdfImage logoFooterImage = new PdfImage(footerWidth - 40 - 5, 5, 40, Image.FromFile(footerImageFile)); htmlToPdfDocument.Footer.Layout(logoFooterImage); // create a border for footer PdfRectangle borderRectangle = new PdfRectangle(1, 1, footerWidth - 2, footerHeight - 2); borderRectangle.LineStyle.LineWidth = 0.5f; borderRectangle.ForeColor = Color.DarkGreen; htmlToPdfDocument.Footer.Layout(borderRectangle); }