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 or to a PdfDocument object that can be further modified and then saved.
The Convert methods of the of the HiQPdfClient.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 HiQPdfClient.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
HtmlToPdfConvertUrlToPdfDocument(String) - Converts a HTML document from a given URL and produces a HiQPdfClientPdfDocument 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
HtmlToPdfConvertHtmlToPdfDocument(String, String) - Converts a given HTML code and produces a HiQPdfClientPdfDocument 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 HiQPdfClient.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 HiQPdfClient.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 HiQPdfClient.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 HiQPdfClient.PdfDocumentControl class controls the generated PDF document page orientation. The default value of this property is Portrait.
The Margins property of the HiQPdfClient.PdfDocumentControl class controls the generated PDF document page margins. By default the generated document margins are all 0.
The FontEmbedding property of the HiQPdfClient.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 HiQPdfClient.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 HiQPdfClient.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 HiQPdfClient.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 HiQPdfClient.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 HiQPdfClient.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.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Hosting;
using HiQPdfClient;
namespace HiQPdf_Demo.Controllers
{
public class ConvertHtmlToPdfController : Controller
{
IFormCollection m_formCollection;
IWebHostEnvironment m_hostingEnvironment;
public ConvertHtmlToPdfController(IWebHostEnvironment hostingEnvironment)
{
m_hostingEnvironment = hostingEnvironment;
}
// GET: ConvertHtmlToPdf
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult ConvertToPdf(IFormCollection collection)
{
m_formCollection = collection;
string serverIP = collection["textBoxServerIP"];
uint serverPort = uint.Parse(collection["textBoxServerPort"]);
string serverPassword = collection["textBoxServerPassword"];
// create the HTML to PDF converter
HtmlToPdf htmlToPdfConverter = new HtmlToPdf(serverIP, serverPort);
// use server password if necessary
if (serverPassword.Length > 0)
htmlToPdfConverter.ServerPassword = serverPassword;
// set a demo serial number
htmlToPdfConverter.SerialNumber = "YCgJMTAE-BiwJAhIB-EhlWTlBA-UEBRQFBA-U1FOUVJO-WVlZWQ==";
// set browser width
htmlToPdfConverter.BrowserWidth = int.Parse(collection["textBoxBrowserWidth"]);
// set browser height if specified, otherwise use the default
if (collection["textBoxBrowserHeight"][0].Length > 0)
htmlToPdfConverter.BrowserHeight = int.Parse(collection["textBoxBrowserHeight"]);
// set HTML Load timeout
htmlToPdfConverter.HtmlLoadedTimeout = int.Parse(collection["textBoxLoadHtmlTimeout"]);
// 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 = collection["checkBoxPdfA"].Count > 0 ? 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 = collection["checkBoxFontEmbedding"].Count > 0;
// set triggering mode; for WaitTime mode set the wait time before convert
switch (collection["dropDownListTriggeringMode"])
{
case "Auto":
htmlToPdfConverter.TriggerMode = ConversionTriggerMode.Auto;
break;
case "WaitTime":
htmlToPdfConverter.TriggerMode = ConversionTriggerMode.WaitTime;
htmlToPdfConverter.WaitBeforeConvert = int.Parse(collection["textBoxWaitTime"]);
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 = collection["textBoxOpenPassword"];
htmlToPdfConverter.Document.Security.AllowPrinting = collection["checkBoxAllowPrinting"].Count > 0;
// 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";
// convert HTML to PDF
byte[] pdfBuffer = null;
if (collection["UrlOrHtmlCode"] == "radioButtonConvertUrl")
{
// convert URL to a PDF memory buffer
string url = collection["textBoxUrl"];
pdfBuffer = htmlToPdfConverter.ConvertUrlToMemory(url);
}
else
{
// convert HTML code
string htmlCode = collection["textBoxHtmlCode"];
string baseUrl = collection["textBoxBaseUrl"];
// convert HTML code to a PDF memory buffer
pdfBuffer = htmlToPdfConverter.ConvertHtmlToMemory(htmlCode, baseUrl);
}
FileResult fileResult = new FileContentResult(pdfBuffer, "application/pdf");
if (collection["checkBoxOpenInline"].Count == 0)
fileResult.FileDownloadName = "HtmlToPdf.pdf";
return fileResult;
}
private void SetHeader(PdfDocumentControl htmlToPdfDocument)
{
// enable header display
htmlToPdfDocument.Header.Enabled = m_formCollection["checkBoxAddHeader"].Count > 0;
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 = PdfColor.WhiteSmoke;
string headerImageFile = m_hostingEnvironment.WebRootPath + "/DemoFiles/Images/HiQPdfLogo.png";
PdfImage logoHeaderImage = new PdfImage(5, 5, 40, 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 = m_formCollection["checkBoxFontEmbedding"].Count > 0;
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 = PdfColor.Navy;
htmlToPdfDocument.Header.Layout(borderRectangle);
}
private void SetFooter(PdfDocumentControl htmlToPdfDocument)
{
// enable footer display
htmlToPdfDocument.Footer.Enabled = m_formCollection["checkBoxAddFooter"].Count > 0;
if (!htmlToPdfDocument.Footer.Enabled)
return;
// set footer height
htmlToPdfDocument.Footer.Height = 50;
// set footer background color
htmlToPdfDocument.Footer.BackgroundColor = PdfColor.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 = m_formCollection["checkBoxFontEmbedding"].Count > 0;
htmlToPdfDocument.Footer.Layout(footerHtml);
// add page numbering
PdfFont pageNumberingFont = new PdfFont("Times New Roman", 8, true);
PdfText pageNumberingText = new PdfText(5, footerHeight - 12, "Page {CrtPage} of {PageCount}", pageNumberingFont);
pageNumberingText.HorizontalAlign = PdfTextHAlign.Center;
pageNumberingText.EmbedSystemFont = true;
pageNumberingText.ForeColor = PdfColor.DarkGreen;
htmlToPdfDocument.Footer.Layout(pageNumberingText);
string footerImageFile = m_hostingEnvironment.WebRootPath + "/DemoFiles/Images/HiQPdfLogo.png";
PdfImage logoFooterImage = new PdfImage(footerWidth - 40 - 5, 5, 40, 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 = PdfColor.DarkGreen;
htmlToPdfDocument.Footer.Layout(borderRectangle);
}
private PdfPageSize GetSelectedPageSize()
{
switch (m_formCollection["dropDownListPageSizes"])
{
case "A0":
return PdfPageSize.A0;
case "A1":
return PdfPageSize.A1;
case "A10":
return PdfPageSize.A10;
case "A2":
return PdfPageSize.A2;
case "A3":
return PdfPageSize.A3;
case "A4":
return PdfPageSize.A4;
case "A5":
return PdfPageSize.A5;
case "A6":
return PdfPageSize.A6;
case "A7":
return PdfPageSize.A7;
case "A8":
return PdfPageSize.A8;
case "A9":
return PdfPageSize.A9;
case "ArchA":
return PdfPageSize.ArchA;
case "ArchB":
return PdfPageSize.ArchB;
case "ArchC":
return PdfPageSize.ArchC;
case "ArchD":
return PdfPageSize.ArchD;
case "ArchE":
return PdfPageSize.ArchE;
case "B0":
return PdfPageSize.B0;
case "B1":
return PdfPageSize.B1;
case "B2":
return PdfPageSize.B2;
case "B3":
return PdfPageSize.B3;
case "B4":
return PdfPageSize.B4;
case "B5":
return PdfPageSize.B5;
case "Flsa":
return PdfPageSize.Flsa;
case "HalfLetter":
return PdfPageSize.HalfLetter;
case "Ledger":
return PdfPageSize.Ledger;
case "Legal":
return PdfPageSize.Legal;
case "Letter":
return PdfPageSize.Letter;
case "Letter11x17":
return PdfPageSize.Letter11x17;
case "Note":
return PdfPageSize.Note;
default:
return PdfPageSize.A4;
}
}
private PdfPageOrientation GetSelectedPageOrientation()
{
return (m_formCollection["dropDownListPageOrientations"] == "Portrait") ?
PdfPageOrientation.Portrait : PdfPageOrientation.Landscape;
}
}
}