pmh/pdf-report-bundle

Symfony Bundle. Wrapper of wkhtmltopdf that uses twig templating to generate pdf files.

1.0.5 2017-08-11 12:08 UTC

This package is not auto-updated.

Last update: 2024-05-17 18:42:48 UTC


README

Symfony Bundle. Wrapper of wkhtmltopdf that uses twig templating to generate pdf files.

Instalation

You need of the wkhtmltopdf installed in your OS.

Require the bundle with composer:

composer require pmh/internal-pdf-report-bundle

Enable the bundle in the kernel:

public function registerBundles()
{
    $bundles = [
        // ...
        new PMH\PdfReportBundle\PMHPdfReportBundle(),
        // ...
    ];
    ...
}

How to use

In controllers instead of use:

return $this->render(...);

You should use:

$pdfReport = $this->get('pmh.pdf-report');

$pdfReport->setHeader('default/header.twig');
$pdfReport->setFooter('default/footer.twig');
$pdfReport->setMargins(20, 20, 20, 20);
$pdfReport->addPages('default/testReport.twig', []);

return $pdfReport->generate();

Example of twig report based on records which shows 4 records per page:

{% for i in ((pdfReportPageNumber -1) * 4)..(((pdfReportPageNumber * 4)-1) < (obj|length - 1) ? ((pdfReportPageNumber * 4)-1) : obj|length-1) %}
<div>{{ obj[i] }}</div>
{% endfor %}

Example Symfony Controller

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use PMH\PdfReportBundle\Service\PdfReport;

class DefaultController extends Controller
{
    /**
     * @Route("/", name="homepage")
     */
    public function indexAction(Request $request)
    {
        $pdfReport = $this->get('pmh.pdf-report');
        
        $pdfReport->setSavePDF("/var/tmp/pdfreport.pdf");
        $pdfReport->setHeader('default/header.twig');
        $pdfReport->setFooter('default/footer.twig');
        $pdfReport->setMargins(20, 20, 20, 20);
        //Default size is A4. You can use A0, A1, A2, A3, A4, A5 or pass custom size array as [width, height]
        $pdfReport->setPageSize(PdfReport::A3);
        $pdfReport->setGrayscale(true);
        $pdfReport->setOrientationLandscape();
        $pdfReport->setTotalPages(2);
        $pdfReport->setHeaderHeight(40);
        $pdfReport->setFooterHeight(40);
        $pdfReport->setCss("#footer p {
            font-size: 10px;
            text-align: center;
            background: #ccc;
        }
        
        #content {
            width:      168mm;
            /*border: 1px #000000 solid;*/
        }
        
        p {
            /*border: 1px #FF0000 solid;*/
            max-width:      168mm;
            text-indent: 30px;
            margin-bottom: 15px;
            line-height: 20px;
            font-size: 14px;
            text-align: justify;
        }");
        $pdfReport->addPages('default/testeRel.twig', ['obj' => ['a', 'b', 'c', 'd', 'e', 'f', 'g'] ]);
        return $pdfReport->generate();
        //return $pdfReport->renderHTML(); //use for debug
    }
}

Licence

This bundle is under the MIT license. See the complete license in the bundle.

Credits

Author: Rodrigo Ramos

Prefeitura Municipal de Hortolândia - Secretaria Municipal de Planejamento Urbano e Gestão Estratégica - Departamento de Tecnologia da Informação - Setor de Desenvolvimento de Software