Crear PDF en Symfony

En cualquier sistema siempre se requieren reportes, y una buena forma de presentarlos es en PDF. Lo bueno es que podemos crear PDF’s a partir de código HTML y CSS, existen varias librerías que permiten hacerlo, como DOMPdf, TCPDF, mPDF y otos.
En lo personal, estuve intentando hacer mis PDF’s con TCPDF, el cual tiene un plugin en Symfony llamado sfTCPDFPlugin, pero se me hizo difícil la generación del PDF, así que intenté con otra librería, que dicen incluso es más rápida para generar los PDF’s; así que el código que les mostraré está basado en la librería mPDF, mi artículo está basado en este otro, les recomiendo leerlo.
http://nibsirahsieu.com/2010/02/21/generating-pdf-using-mpdf-library-in-symfony
Mi modificación consiste en que utilizo jQuery para obtener el HTML y enviarlo a través de un formulario.
Agradezco mucho a nibsirahsieu que incluso me ayudó a mejorar mi código.
http://pastebin.com/embed_iframe.php?i=eTkn8WmX

// pon esto en el template que desees o en tu archivo .js

$().ready(function() {
  $('#pdf').click(function() {
    var f = document.createElement('form');
    f.style.display = 'none';
    this.parentNode.appendChild(f);
    f.method = 'post';
    f.action = '';
    var m = document.createElement('input');
    m.setAttribute('type', 'hidden');
    m.setAttribute('name', 'html');
    m.setAttribute('value', $('#job').html());
    f.appendChild(m);
    f.submit();
    return false;
  });
});

// ubica esto en el html de tu template
<div class="pdf"><a id="pdf" href="#">PDF</a></div>

// este método se agrega a la clase action
/**
* Esta acción se encarga de la creación de el PDF
*/
public function executePdf(sfWebRequest $request)
{
  $html = $request->getPostParameter('html');

  $mpdf = new mPDF('es_ES','Letter','','',32,25,27,25,16,13);
  $mpdf->useOnlyCoreFonts = true;

  // load a stylesheet
  $stylesheet = file_get_contents(sfConfig::get('sf_web_dir').'/css/mypdf.css');
  $mpdf->WriteHTML($stylesheet,1); // el parámetro le dice que sólo es css y no contenido html
  $mpdf->WriteHTML($html,2);

  $mpdf->Output('mpdf.pdf','D');
  throw new sfStopException();
}
Anuncios

3 thoughts on “Crear PDF en Symfony

  1. Por favor ayudame como llamo a la accón executePdf en un controlador en Symfony para imprimir lo que necesito ..
    De antemano

    Gracias

    1. Karina, si sigues usando el Symfony 1.4, y según te entiendo estarías procesando la información desde un action y luego enviando la información procesada al action que genera el PDF. En ese escenario sería de la siguiente forma:

      function executeAction1(sfWebRequest $request)
      {
      // do your stuffs and store it in $content

      $this->getRequest()->setParameter(‘myContent’,$content);
      $this->forward(‘themodule’,’createPdf’);
      }

      // esta es el otro action, que puede o no estar en el mismo module

      function executeCreatePdf(sfWebRequest $request)
      {
      $myContent = $this->getRequest()->getParameter(‘myContent’);

      // haces todo el procesado del PDF
      }

      Espero te funcione… me comentas si no 😉

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s