Aprende a crear archivos pdf con php en symfony 2 3 con tcpdf.

Cómo crear un archivo pdf con php en symfony 2 y 3 con tcpdf

TCPDF es ahora uno de los proyectos de código abierto más activos del mundo, utilizado a diario por millones de usuarios e incluido en miles de CMS y aplicaciones web para generar archivos pdf con php.

Para usar tcpdf en Symfony 2, agregaremos un paquete que nos facilita la implementación. En Symfony 2, es una buena práctica usar paquetes en lugar de usar require once en un controlador para incluir nuestra biblioteca. El creador de este paquete (no la biblioteca PHPExcel) es WhiteOctober y el código fuente se puede ver en el repositorio oficial en github .

Para instalar nuestro paquete, agregaremos el archivo composer.json en la zona requerida

"whiteoctober/tcpdf-bundle": "dev-master",

Si usa composer directamente en la consola, ejecute:

$ composer require whiteoctober/tcpdf-bundle

cuando se haya descargado el componente requerido, simplemente agregue el paquete a su kernel (archivo AppKernel.php ubicado en /app/AppKernel.php) así:

$bundles = array(
        // ...
        new WhiteOctober\TCPDFBundle\WhiteOctoberTCPDFBundle(),// registrar paquete
    );

Crear un PDF a partir de HTML

TCPDF le permite crear un pdf a partir del marcado html (¿no es impresionante?). Para devolver un PDF en una respuesta, use el siguiente código:

public function returnPDFResponseFromHTML($html){
         // set_time_limit (30); descomenta esta línea según tus necesidades
         // Si no estás en un controlador, recupere de alguna manera el contenedor de servicios y luego recupérelo
        //$pdf = $this->container->get("white_october.tcpdf")->create('vertical', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
        // si estás en un controlador, usa:
        $pdf = $this->get("white_october.tcpdf")->create('vertical', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
        $pdf->SetAuthor('Our Code World');
        $pdf->SetTitle(('Our Code World Title'));
        $pdf->SetSubject('Our Code World Subject');
        $pdf->setFontSubsetting(true);
        $pdf->SetFont('helvetica', '', 11, '', true);
        //$pdf->SetMargins(20,20,40, true);
        $pdf->AddPage();
        
        $filename = 'ourcodeworld_pdf_demo';
        
        $pdf->writeHTMLCell($w = 0, $h = 0, $x = '', $y = '', $html, $border = 0, $ln = 1, $fill = 0, $reseth = true, $align = '', $autopadding = true);
        $pdf->Output($filename.".pdf",'I'); // Esto generará el PDF como respuesta directamente
}

El ejemplo anterior devuelve una respuesta en PDF directamente en el navegador, ahora si queremos usar esta función en un controlador Symfony podemos simplemente llamar a la función en cualquier línea. Sí, no necesitas una respuesta especial de Symfony cuando usas la salida como PDF en línea, esto lo maneja la biblioteca TCPDF. Luego, en nuestro controlador podemos usar:

public function indexAction(){
    // Puedes enviar el html como quieras
   //$html = '<h1>Plain HTML</h1>';

     // ¡pero en este caso renderizaremos una vista de Symfony!
     // Estamos en un controlador y podemos usar la función renderView que recupera el html de una vista
     // luego enviamos ese html al usuario.
    $html = $this->renderView(
         'Templates/template.html.twig',
         array(
          'someDataToView' => 'Something'
         )
    );
  
    $this->returnPDFResponseFromHTML($html);
}

TCPDF hace las cosas realmente fáciles para el desarrollador. Puede leer la documentación oficial de TCPDF aquí  y todos los ejemplos aquí .


Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores