Original URL: https://www.theregister.com/2007/12/10/pdf_excel_reports_with_php/
Build your PDF and Excel reports with PHP
Office 2.0 without the fluff
Posted in Channel, 10th December 2007 19:43 GMT
Hands on The Portable Document Format (PDF) and Microsoft's Excel spreadsheet are commonly used for presentation of reports and data.
PHP, meanwhile, has become one of the most commonly used scripting languages on the web today, with 35 per cent of web sites running PHP. The TIOBE index of programming languages also indicates an increase in the usage of PHP.
Given the prevelance of PHP, Excel and PDF it's fortunate there exists class libraries for the generation of PDF documents and Excel spreadsheets using PHP. In my latest guide to PHP, I shall look at generating an Excel spreadsheet using the PHP Extension and Application Repository (PEAR) module, Spreadsheet_Excel_Writer
and the ClibPDF
PHP library to generate a PDF report. Along the way I'll dig into PDF and Excel report features such as setting fonts and adding a hyperlink.
Installing ClibPDF
First, install PHP 5 and Apache2 HTTP Server and configure the Apache server with PHP. We won't discuss configuring Apache server with PHP as it was discussed in an earlier article on PHP, Accessing DB2 UDB with PHP. The ClibPDF
PHP class library extension is included in the Collection of PECL modules for PHP 5.3. Extract the php_cpdf.dll
from the PECL modules zip file to the C:/PHP/ext
directory. Add the following PHP directive to the php.ini
configuration file.
extension=php_cpdf.dll
Restart the Apache HTTP server.
Creating a PDF Document with ClibPDF
Create a PHP file catalog.php
in the C:\Apache2\htdocs
directory, the document root directory of Apache2 server. In the PHP file, create a new PDF document using the cpdf_open ( )
function. If document compression is to be set, specify compression as a non 0 value. A file name may be specified to output the generated PDF document. If filename is not specified an in memory PDF document is created that may be output to a file or stdout.
$cpdf=cpdf_open(0);
Set the title of the document.
cpdf_set_title($cpdf, "Catalog PDF");
Start a new page using cpdf_page_init()
. Specify page number as 1, and page size as A4 (595x842). Set orientation to portrait (0)
. Orientation may also be set to landscape (1)
. The unit parameter is optional and specifies the number of postscript points per unit; the default value is 72, which corresponds to 1 inch.
cpdf_page_init($cpdf, 1, 0, 595, 842);
Add a bookmark for the current page. Specify the text of the bookmark in the text parameter.
cpdf_add_outline($cpdf, 0, 0, 0, 1, "Page 1");
Next, add title text of the PDF document. Start a text section with cpdf_begin_text ( )
. Set the font to Courier-Bold, font size to 25 and font encoding to WinAnsiEncoding
using cpdf_set_font ( )
. Encoding may be set to MacRomanEncoding
, MacExpertEncoding
, WinAnsiEncoding
or NULL
. If encoding is set to NULL
, the font's built-in encoding is used.
cpdf_set_font($cpdf, "Courier-Bold", 25, "WinAnsiEncoding");
Set the coordinates of the text with cpdf_set_text_pos ( )
. The mode
parameter specifies the unit length in postscript points. If mode is 0 or is omitted the default unit length is used.
cpdf_set_text_pos($cpdf,4.70,7.5);
Specify how text is to be rendered. A rendermode
value of 0 fills the text and a rendermode
value of 1 uses stroke text.
cpdf_set_text_rendering($cpdf, 1);
Add the text to the PDF document using cpdf_text( )
. Text coordinates may be specified with cpdf_text()
. The mode parameter in cpdf_text()
specifies the unit length in postscript points. The orientation
parameter specifies the rotation of the text in degrees. The alignmode
parameter specifies the alignment of the text.
cpdf_text($cpdf,"Catalog PDF");
The alignmode
parameter specifies alignment with respect to the (x,y) coordinates of the text. End the title section with cpdf_end_text( )
.
cpdf_end_text($cpdf);
Next, add some text to the PDF document using cpdf_begin_text()
, cpdf_text()
and cpdf_end_text()
functions. Text is added to a new line using cpdf_continue_text( )
. Create a table using cpdf_rect()
. Add header row cells using cpdf_rect( )
and cpdf_stroke( )
.
cpdf_rect($cpdf, 1.0, 6.0, 2.0, 0.5); cpdf_stroke($cpdf);
Add text to the header cells. Specify the text position. Set text rendering to fill text. Set text font name, font size and font encoding. A row of data is added similar to a header row. A hyperlink may be added to row text using cpdf_set_action_url ( )
. For example add an hyperlink to the title column data.
cpdf_set_action_url ( $cpdf, 7.20, 5.70, 8.5, 5.85, "http://www-128.ibm.com/developerworks/java/library/x-jaxpval.html");
End the PDF page using cpdf_finalize_page ( )
. End the PDF document using cpdf_finalize ( )
cpdf_finalize_page($cpdf, 1); cpdf_finalize($cpdf);
Set the Content-type
header to application/pdf
and save the PDF document to a file using cpdf_save_to_file ( )
.
Header("Content-type: application/pdf"); cpdf_save_to_file($cpdf,"catalog.pdf");
The PHP script, catalog.php
, used to generate an example PDF document is available in resources zip here. Run the catalog.php
script with the URL http://localhost/catalog.php. You can see the PDF document, catalog.pdf
in my screen shot. The hyperlinks are shown with blue rectangles in the Title column.
Installing Spreadsheet_Excel_Writer
The Spreadsheet_Excel_Writer
is available as a PEAR module. Therefore, first install the PEAR package Manager. Download the PEAR PHP file. and save the file as go-pear.php
in the C:/PHP
directory, the directory in which PHP 5 is installed. Install the PEAR Package Manager with the following command.
C:/PHP>php go-pear.php
The php.ini
configuration file gets modified in installing the PEAR Package Manager. Therefore, restart the Apache2 HTTP server. Download Spreadsheet_Excel_Writer version 0.9.1. Save the zip file to the C:/PHP
directory. The Spreadsheet_Excel_Writer
has a required dependency, the PEAR OLE 0.5 package. Install the OLE 0.5 package with the following command.
C:/PHP>pear install channel://pear.php.net/OLE-0.5
Install the Spreadsheet_Excel_Writer
with the following command.
C:/PHP>pear install Spreadsheet_Excel_Writer-0.9.1.tgz
Creating an Excel Spreadsheet
Create a PHP script, catalog-excel.php
, in the C:\Apache2\\htdocs
directory. Create a Workbook
object. Specify filename as catalog.xls
.
$workbook = new Spreadsheet_Excel_Writer('catalog.xls');
Add a worksheet to the workbook. If sheet name is not specified the sheet name is Sheeti, with i in [1..].
$worksheet =& $workbook->addWorksheet('Catalog');
Set page margins in inches. Center the page horizontally.
$worksheet->setMargins(0.25); $worksheet->centerHorizontally(1);
Set the worksheet as the active worksheet.
$worksheet->activate();
First, we shall add a title to the worksheet. Add a format to the workbook for the title. Set the text to bold. Set the color of the cell's content to "blue". Set the font size to 25 pixels. Merge the cells in the row by setting the cell alignment to 'merge'.
$format_title =& $workbook->addFormat(); $format_title->setBold(); $format_title->setColor('blue'); $format_title->setSize(25); $format_title->setAlign('merge');
Set the worksheet title to "Catalog Spreadsheet" in the first row and the third column using the Worksheet::write()
function. The rows and columns in a worksheet are 0 indexed. The $format_title
format that we created previously is used to add the title.
$worksheet->write(0, 2, 'Catalog Spreadsheet', $format_title);
Next, add a header row for a catalog. Add another format to the workbook for the header row. Set text to bold and font size to 15 pixels. Create a format for the data to be added to the worksheet. Set the font style to italic using Format::setItalic()
and font size to 12 pixels. Set alignment of text to 'center' with Format::setAlign()
. Horizontal alignment may be set to left, center, right, fill, justify, merge, or equal_space. Vertical alignment may be set to top, vcenter, bottom, vjustify, or vequal_space. A combination of horizontal and vertical alignment may be specified by invoking the setAlign()
function more than once. Using the format for row data add a row of data with Worksheet::write()
. The rows and columns are 0 indexed. Add a hyperlink to the Title column value with Worksheet::writeUrl()
. The $url
parameter specifies the URL of the hyperlink and the $string
parameter specifies the label for the hyperlink.
Catalog-excel.php
for creating an Excel spreadsheet is available in resources zip here. Run the PHP script with the URL http://localhost/catalog.php to create an Excel spreadsheet in the htdocs
directory.
And you're out...
After all that you should now have an Excel spreadsheet that looks similar to my screen shot.
If you have, then you've successfully created a document in the business world's chosen medium for expressing information using one of the internet's hottest programming languages. ®