What is TCPDF?
TCPDF is an Open Source
PHP class for generating PDF documents.
Its a best way to
generate PDF in CakePHP, comparatively any other available helper i ever
used.
How to use ?
Below are the steps.
Step: 1 Download and
Configure
- Go to http://www.tcpdf.org and download the latest
version of TCPDF.
- Extract to one of your vendors folders, such as
app/vendors. It will create a directory tcpdf there with tcpdf.php and
more in it. You need at least the folders tcpdf/config and tcpdf/fonts
in your application.
- Configure TCPDF, see its documentation. You want at
least to have a look at tcpdf/config/tcpdf_config.php.
Step 2: Extend TCPDF to customize your header and footer
There is a default
header and footer in TCPDF, defined in a header() and a footer() method, which
is supposed to be overwritten by you, if needed. This can be done by extending
TCPDF and then calling this extended TCPDF class from your application.
In app/vendors
create the file xtcpdf.php with this content:
<?php
App::import('Vendor', 'tcpdf/tcpdf');
class XTCPDF extends TCPDF {
var $xheadertext = 'Heading';
var $xheadercolor = array(0, 0, 200);
var $xfootertext = 'Footer';
var $xfooterfont = 'times';
var $xfooterfontsize = 12;
/**
* Overwrites the default header
* set the text in the view using
* $fpdf->xheadertext = 'YOUR ORGANIZATION';
* set the fill color in the view using
* $fpdf->xheadercolor = array(0,0,100); (r, g, b)
* set the font in the view using
* $fpdf->setHeaderFont(array('YourFont','',fontsize));
*/
function Header() {
list($r, $b, $g) = $this->xheadercolor;
$this->SetY(-290);
$this->SetFillColor($r, $b, $g);
$this->SetTextColor(0, 0, 0);
$this->SetFont('times', '', 14);
$this->writeHTMLCell(-250, '', '', '', $this->xheadertext, 0, 0, false, true, 'C');
$this->SetY(-280);
$this->Cell(0,8, '','T',1,'C');
}
/**
* Overwrites the default footer
* set the text in the view using
* $fpdf->xfootertext = 'Copyright © %d YOUR ORGANIZATION. All rights reserved.';
*/
function Footer() {
$footertext = sprintf($this->xfootertext, $year);
$this->SetY(-20);
$this->SetTextColor(0, 0, 0);
$this->SetFont($this->xfooterfont,'',$this->xfooterfontsize);
$this->Cell(0,8, '','T',1,'C');
$this->SetY(-18);
// write the second column
$this->writeHTMLCell(180, '', '', '', $this->xfootertext, 0, 0, false, true, 'C');
}
}
?>
Step 3: Create your layout for PDF
You cannot use your
default layout, as it would wrap the PDF file in your HTML page code. You need
a layout such as this one, save it as app/views/layouts/pdf.ctp :
<?php
header("Content-type: application/pdf");
echo $content_for_layout;
?>
Step 4: For your Controller
function downloadPdf() {
$this->layout = 'pdf';
Configure::write('debug', 0);
$tcpdf = new XTCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true,
'UTF-8', false);
$some_filed = $_REQUEST['some_filed'];
$some_filed = $_REQUEST['some_filed'];
$some_filed = $_REQUEST['some_filed'];
$obj = new SomeHelper();
$Somefiled = ucwords($obj->getSomefiled($brand));
$rowsArray = $obj->SomeFunction($some_filed, $some_filed, $some_filed);
$this->set('tcpdf', $tcpdf);
$this->set('some_filed', $some_filed);
$this->set('rowsArray', $rowsArray[);
$this->render('/reports/procurement/download_pdf');
}
Step 5: For your View
View Template:
<?php
$html='';
$slno=1;
$textfont
= 'times'; // looks better, finer, and more condensed than 'dejavusans'
//set
margins
$tcpdf->SetMargins(PDF_MARGIN_LEFT,
PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$tcpdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$tcpdf->SetFooterMargin(PDF_MARGIN_FOOTER);
//set auto
page breaks
$tcpdf->SetAutoPageBreak(TRUE,
PDF_MARGIN_BOTTOM);
$tcpdf->setHeaderFont(array($textfont,
'', 18));
$tcpdf->xheadercolor
= array(255, 255, 255);
$tcpdf->xheadertext
= "<p style='text-align: center;'> <b> Header of the page </b> </p>";
$tcpdf->xfootertext
= "<b><i>Copy Right
Message</i></b></p>";
// add a
page (required with recent versions of tcpdf)
$tcpdf->AddPage();
// Front Page
$html_1 =
"<p style='text-align: center;'> $supplier </p>";
$tcpdf->SetY(-270);
$tcpdf->SetTextColor(0,
0, 0);
$tcpdf->SetFont('times',
'', 12);
$tcpdf->writeHTMLCell(-250,
'', '', '', $html_1, 0, 0, false, true, 'C');
$curNtDateTime
= explode(' ', Date('d-m-Y H:i:s'));
$curDate =
$curNtDateTime[0];
$curTime =
$curNtDateTime[1];
$lefthtml
= "<b>Date: </b>$curDate";
$tcpdf->SetY(-260);
$tcpdf->SetTextColor(0,
0, 0);
$tcpdf->SetFont('times',
'', 12);
$tcpdf->writeHTMLCell(-250,
'', '', '', $lefthtml, 0, 0, false, true, 'L');
$righthtml
= "<b>Time: </b>$curTime";
$tcpdf->SetY(-260);
$tcpdf->SetTextColor(0,
0, 0);
$tcpdf->SetFont('times',
'', 12);
$tcpdf->writeHTMLCell(-250,
'', '', '', $righthtml, 0, 0, false, true, 'R');
$html =
"<style>
table
{
border-collapse:collapse;
}
table,th, td
{
border: 1px solid black;
}
</style>
<table cellspacing='0' cellpadding='20'>
<tr>
<td >S. No</td>
<td >some_filed</td>
<td >some_filed</td>
<td >some_filed</td>
<td >some_filed</td>
<td >some_filed</td>
</tr>";
foreach
($rowsArray as $row) {
$html.= '<tr>';
$html.= '<td>' . $slno++ . '</td><td>' . $row['some_filed'] .
'</td>';
$html.= '<td>' . $row['some_filed'] . '</td><td>' . (int) $row['some_filed']
. '</td>';
$html.= '<td>' . $row['some_filed'] . '</td>';
$html.= '<td>' . $row['mrp'] . '</td>';
$html.= '</tr>';
}
$html.="</table>";
$tcpdf->setY(-240);
$tcpdf->SetTextColor(0,
0, 0);
$tcpdf->SetFont($textfont,
'', 12);
// output
the HTML content
$tcpdf->writeHTML($html,
true, false, true, false, '');
// reset
pointer to the last page
$tcpdf->lastPage();
echo
$tcpdf->Output('File_Name.pdf', 'D');
?>
So is it done?
Yeah.. Now you are done ;)
Enjoy!!
References:
http://bakery.cakephp.org/articles/kalileo/2010/06/08/creating-pdf-files-with-cakephp-and-tcpdf