The last tip in this series discusses creating PDF files using the open-source FPDI product.
We all know that companies have a lot of predefined letters that contain logos, special forms, and such, and it is always a challenge for us as programmers to fit our data into these predefined letters. Sometimes we just re-create the letter, and if changes occur, we start over again in order to make things look nice. But wouldn't it be great if we could put all our efforts into the data processing instead of the design of letters and forms?
Well, somebody at setasign.de must have felt the need because they created an extension to FPDF called FPDI, and they are kind enough to let the rest of us use it for free.
Basically, it reads in an PDF file as a template and then lets you add your own data on top of the template. In this tip, I will cover the function of using a template file to create a new document and add some data on top of it.
Just to let you know, FPDI offers several other functions, like the ability to add several different boxes around the imported page, but you can check that out for yourself on their Web site.
Installing FPDI
Before we dig into the code, let's get FPDI installed on our server.
Point your browser here. Download the file and unzip it into the same directory where you put FPDF. In my example, this is in a directory called /FPDF, which means that I have it installed at the same level as the code for the examples in the TechTips.
When that's done, download the last part of the package here. Unzip and install as above.
When done, you should have something like this in the FPDF directory:
Figure 1: Your files have been loaded into the chosen directory. (Click images to enlarge.)
And now, ladies and gentlemen, we are ready to move on to some PHP and once again be impressed by what some very clever people have created for us to use.
Let's Break Loose the Code
When you see the amount of code in this tip, please do not be disappointed. This last tip is the icing on the cake; therefore, the examples are very short. But I really expect you to combine this code with the code from the other two tips. Then, you should be able to solve all your PDF creation problems.
In the example, I use a template file that includes a company header logo and a footer and then I merge some data in between. (And yes, I know the output is not pretty, but you'll remember it many days from now because of that.)
The data is taken from an array, but it should be very easy for you to use an external data source like a CSV file or—even better—a MySQL table.
I will not explain every line in the code because I have added comments and hopefully that's enough to give you an idea of what is happening.
<?php
//======================================================================
//
// MC Press Online - Creating PDF files with PHP – part 1
//
// -- Import a PDF template
//
// Ex 1
//======================================================================
// Which page to load from the template file
$PageToUse = 1;
include_once("../fpdf/fpdf.php"); // Include the fpdf class
include_once("../fpdf/fpdi.php"); // Extend fpdf class
// Extend PDF
class PDF extends FPDI{}
// Fill some data into the array
$ary = array
(
0 => "I never saw the morning 'til I stayed up all night",
1 => "I never saw the sunshine 'til you turned out the light",
2 => "I never saw my hometown until I stayed away too long",
3 => "I never heard the melody, until I needed a song.",
4 => "",
5 => "I never saw the white line, 'til I was leaving you behind",
6 => "I never knew I needed you 'til I was caught up in a bind",
7 => "I never spoke 'I love you' 'til I cursed you in vain,",
8 => "I never felt my heart strings until I nearly went insane.",
9 => "I never saw the east coast 'til I move to the west",
10=> "",
11 => "I never saw the moonlight until it shone off your breast",
12=> "I never saw your heart until someone tried to steal, tried to steal it away",
13=> "I never saw your tears until they rolled down your face.",
14=> "",
15=> "I never saw the morning till I stayed up all night",
16=> "I never saw the sunshine till you turned out your love light, baby",
17=> "I never saw my home town until I stayed away too long",
18=> "I never heard the melody till I needed the song",
);
//Instantiation of inherited class
$pdf=new PDF();
// Add a page
$pdf->AddPage();
// Set the template
$pdf->setSourceFile('template-0.pdf');
// Import page 1
$tIdx = $pdf->importPage($PageToUse);
// Use the imported page
$pdf->useTemplate($tIdx);
$pdf->SetFillColor(84,114,169);
// now write some text above the imported page
$pdf->SetFont('Arial');
$pdf->SetTextColor(0,0,0);
$pdf->SetXY(30, 50);
$pdf->Cell(150,5,'Tom Waits - San Diego Serenade',0,2,'L',true,"http://www.youtube.com/watch?v=7hbC-_79p7I");
$pdf->SetXY(30, 60);
// Find number of elements in array
$elm = count($ary);
// Print the lyrics
for ($i = 0; $i < $elm; $i++) {
$pdf->Cell(0,5,$ary[$i],0,2,'L');
}
$pdf->Output('creating_pdf_3.pdf', 'D');
?>
The result is shown below.
Figure 2: You've created your first PDF!
If you try to load the template PDF file in a PDF reader, you will notice that it consists of two pages that are the same except for the background color, and you might ask yourself why. Well, if you look at the top of the program, you'll see the following line:
// Which page to load from the template file
$PageToUse = 1;
Here, I set the variable to 1.
Then, locate the line after the template is loaded. You'll see that I use the variable on the importPage function to select which page of the template file I would like to use.
$tIdx = $pdf->importPage($PageToUse);
Try changing the $PageToUse variable to 2 and run the script again. You get the same data but with a different background color!
Of course, you could have done the same thing by loading two different PDF template files, but I hope you get the idea. This is a very effective tool if you want to output the same data with different headers or languages or whatever you might meet.
Creating the PDF Template
You could write your own PHP script that would create the PDF template file, but a lot of you might already have created various template files in your company that you can start using right away. In this tip, I just used Open Office, which has a PDF export feature. Or maybe you'd prefer CutePDF Writer, which also does a very nice job.
Download and Install
You can download the files used in this tip here. If you use WinZip or FileZip, just use option "Extract to here," and everything will fall into place,
This Is the End
Well, that's all I have to say about creating PDF files for now. I hope these tips have given you an idea what a little PHP and some open source projects can do for you. This is just a scratch on the surface, but it should be enough to get you started.
In future tips, I'll serve some more nice PHP dishes for you.
By the way, after you create the sample PDF file, be sure to bring your partner in front of the screen, click the title of the Tom Waits song, sit back, close your eyes, and be happy that you created the file and that Mr. Waits created such a beautiful song.
as/400, os/400, iseries, system i, i5/os, ibm i, power systems, 6.1, 7.1, V7,
LATEST COMMENTS
MC Press Online