Dynamic PDF files using HTML and PHP

There always arises a need for converting content from one file format to another one. Some may need to convert some text into HTML and some may need to convert some HTML content to an image format. The main reason for the need to convert from one file format to another is because the target file format is best suited for a targeted medium where the content needs to be displayed. The targeted medium may be an email, a printed hard copy or a web browser.

The text format is best suited for sending emails, as the possibility of the email contents getting corrupted in the transition is much lesser, when compared to the HTML formatted emails. PDF document or a word document would be the best choice for taking a printed hard copy and obviously, HTML is best for showing contents in web browsers. PDF is the right choice for Documents such as bills or invoices to be downloaded. When you write a backend app, For example, a CRM, or an Invoicing system, you will require the documents to be created dynamically on the go, and sent as PDF. Either as Email attachments or as Downloads.

Here, we are going to study on converting HTML 2 PDF using PHP. This article is not going to explain the main logic of how to convert an HTML file to a PDF file. That would be a separate subject and it could not be covered in this short article. But we would be seeing how to use some free open source PHP scripts to accomplish this file conversion.

FPDF: The PDF Generator

The first and the main base for this file conversion is FPDF library. FPDF is a pure PHP class to generate PDF files on the fly. Let us start the PDF generation with a simple Hello world display.


$pdf=new FPDF();
$pdf->Cell(40,10,'Hello World!');

To generate a pdf file, first, we need to include the library file fpdf.php. Then we need to create an FPDF object using the default constructor FPDF(). This constructor can be passed three values namely page orientation (portrait or landscape), measure unit, and page size (A4, A5, etc.,). By default, pages are in A4 portrait and the measuring unit is millimeter. It could have been specified explicitly with:

$pdf=new FPDF('P','mm','A4');

It is possible to use landscape (L), other page formats (such as Letter and Legal), and measure units (pt, cm, in).

Then we have added a page to our pdf document with AddPage(). The origin is at the upper-left corner and the current position is by default placed at 1 cm from the borders; the margins can be changed with the function SetMargins().

To print a text, we need to first select a font with SetFont(). Let us select Arial bold 16:


We use Cell() function to output a text. A cell is a rectangular area, possibly framed, which contains some text. It is output at the current position. We specify its dimensions, its text (centered or aligned) if borders should be drawn, and where the current position moves after it (to the right, below, or to the beginning of the next line). To add a frame, we would do this:

$pdf->Cell(40,10,'Hello World !',1);

Finally, the document is closed and sent to the browser with Output(). We could have saved it in a file bypassing the desired file name.

There are a lot more functions in FPDF and we cannot cover all those in this article.
To learn FPDF, please browse http://www.fpdf.org.

HTML2FPDF: The Converter

HTML2FPDF is a PHP class library that uses the FPDF class library to convert HTML files to PDF files. This library consists of three classes namely PDF, HTML2FPDF, and FPDF (modified FPDF class). The class PDF extends the class HTML2FPDF that extends the class FPDF.

Now let us see, how to convert a sample HTML page into a PDF file using HTML2FPDF Library. The HTML page contains a table that lists a few nations with their corresponding national flags. Below is the code for the conversion.

$pdf=new HTML2FPDF();
$fp = fopen("sample.html","r");
$strContent = fread($fp, filesize("sample.html"));
echo "PDF file is generated successfully!";

First, we need to include the html2fpdf.php file that contains the HTML2FPDF class and an object is created using the constructor HTML2FPDF(). Then a new page is added to the pdf document using the function AddPage(). The HTML contents are read from the sample.html file using file functions. Then the HTML contents are written into the pdf format using WriteHTML() function. To view the HTML file, click here and to view the generated pdf, click here. The above sample code with the sample HTML file and images and the html2fpdf class libraries can be downloaded here.

The HTML2FPDF class library will be working best with the XHTML 1.0. Also, the class does not support all the features available with HTML. To know the supported HTML tags and other features, please refer http://html2fpdf.sourceforge.net

We welcome you to share this article on your Social Media if you like this.

If you are interested in Custom Web application development, we have an expert team of PHP developers to handle it. We welcome you to contact us.