LosPdf
, (*1)
Introduction
This ZF2 module provides a wrapper to mPdf (more coming) to generate PDF documents from html., (*2)
Requirements
Instalation
Instalation can be done with composer ou manually, (*3)
Installation with composer
For composer documentation, please refer to getcomposer.org., (*4)
- Enter your project directory
-
Create or edit your composer.json
file with following contents:, (*5)
json
{
"require": {
"los/lospdf": "1.*",
"mpdf/mpdf" : ">=v5.7.4",
}
}
, (*6)
- Run
php composer.phar install
-
Open my/project/directory/config/application.config.php
and add LosPdf
to your modules
, (*7)
<?php
return array(
'modules' => array(
'LosPdf',
'Application'
),
'module_listener_options' => array(
'config_glob_paths' => array(
'config/autoload/{,*.}{global,local}.php',
),
'module_paths' => array(
'./module',
'./vendor',
),
),
);
Installation without composer
- Clone this module LosPdf to your vendor directory
- Enable it in your config/application.config.php like the step 4 in the previous section.
Usage
Render to browser
The following example demonstrates a typical usage of the LosPdf module inside an Action in a Controller:, (*8)
public function pdfAction()
{
$generated = new \DateTime('now');
$genetared = $gerado->format('d/m/Y H:i:s');
$pdf = new PdfModel();
$renderer = $this->getServiceLocator()->get('ViewPdfRenderer');
$renderer->getEngine()->setHTMLHeader('<table width="100%" style="vertical-align: bottom; font-family: serif; font-size: 8pt; color: #000000; font-weight: bold; font-style: italic; border-bottom: 1px solid #000"><tr>
<td width="33%"><span style="font-weight: bold; font-style: italic;">Client</span></td>
<td width="33%" align="center" style="font-weight: bold; font-style: italic;">Report Name</td>
<td width="33%" style="text-align: right; ">My Company</td>
</tr></table>
');
$renderer->getEngine()->setHTMLFooter('Footer', '
Generated: '.$generated.' |
Page {PAGENO} |
');
$pdf->setTerminal(true);
$pdf->setVariables(['name'=>'Leandro']);
$pdf->setOption("paperSize", "a4");
return $pdf;
}
And use the view file as usual., (*9)
You can set any mPdf option through $renderer->getEngine():, (*10)
$renderer = $this->getServiceLocator()->get('ViewPdfRenderer');
$renderer->getEngine()->pagenumPrefix = 'Page n ';
Render to string
You can capture the pdf output to a string:, (*11)
public function pdfAction()
{
$generated = new \DateTime('now');
$genetared = $gerado->format('d/m/Y H:i:s');
$pdf = new PdfModel();
$renderer = $this->getServiceLocator()->get('ViewPdfRenderer');
$renderer->getEngine()->setHTMLHeader('<table width="100%" style="vertical-align: bottom; font-family: serif; font-size: 8pt; color: #000000; font-weight: bold; font-style: italic; border-bottom: 1px solid #000"><tr>
<td width="33%"><span style="font-weight: bold; font-style: italic;">Client</span></td>
<td width="33%" align="center" style="font-weight: bold; font-style: italic;">Report Name</td>
<td width="33%" style="text-align: right; ">My Company</td>
</tr></table>
');
$renderer->getEngine()->setHTMLFooter('Footer', '
Generated: '.$generated.' |
Page {PAGENO} |
');
$pdf->setTerminal(true);
$pdf->setVariables(['name'=>'Leandro']);
$pdf->setOption("paperSize", "a4");
$pdf->setTemplate('site/index/pdf');
$output = $renderer->renderToString($pdf);
//Do something with output
}
Render to file
You can save the pdf to a file:, (*12)
public function pdfAction()
{
$generated = new \DateTime('now');
$genetared = $gerado->format('d/m/Y H:i:s');
$pdf = new PdfModel();
$renderer = $this->getServiceLocator()->get('ViewPdfRenderer');
$renderer->getEngine()->setHTMLHeader('<table width="100%" style="vertical-align: bottom; font-family: serif; font-size: 8pt; color: #000000; font-weight: bold; font-style: italic; border-bottom: 1px solid #000"><tr>
<td width="33%"><span style="font-weight: bold; font-style: italic;">Client</span></td>
<td width="33%" align="center" style="font-weight: bold; font-style: italic;">Report Name</td>
<td width="33%" style="text-align: right; ">My Company</td>
</tr></table>
');
$renderer->getEngine()->setHTMLFooter('Footer', '
Generated: '.$generated.' |
Page {PAGENO} |
');
$pdf->setTerminal(true);
$pdf->setVariables(['name'=>'Leandro']);
$pdf->setOption("paperSize", "a4");
$pdf->setTemplate('site/index/pdf');
$renderer->renderToFile($pdf, '/tmp/report.pdf');
}
Mixing outputs
You can use more than one render type. the following example will save the pdf to a file, render the pdf to a string and to the browser:, (*13)
public function pdfAction()
{
$generated = new \DateTime('now');
$genetared = $gerado->format('d/m/Y H:i:s');
$pdf = new PdfModel();
$renderer = $this->getServiceLocator()->get('ViewPdfRenderer');
$renderer->getEngine()->setHTMLHeader('<table width="100%" style="vertical-align: bottom; font-family: serif; font-size: 8pt; color: #000000; font-weight: bold; font-style: italic; border-bottom: 1px solid #000"><tr>
<td width="33%"><span style="font-weight: bold; font-style: italic;">Client</span></td>
<td width="33%" align="center" style="font-weight: bold; font-style: italic;">Report Name</td>
<td width="33%" style="text-align: right; ">My Company</td>
</tr></table>
');
$renderer->getEngine()->setHTMLFooter('Footer', '
Generated: '.$generated.' |
Page {PAGENO} |
');
$pdf->setTerminal(true);
$pdf->setVariables(['name'=>'Leandro']);
$pdf->setOption("paperSize", "a4");
$pdf->setTemplate('site/index/pdf');
$output = $renderer->renderToString($pdf);
$renderer->renderToFile($pdf, '/tmp/report.pdf');
return $pdf;
}