Crear un generador de PDF con Composer y PHP

En una entrada anterior estudiamos que era Composer y como podíamos instalarlo en GNU/Linux, hoy veremos como podemos utilizar esta herramienta para crear rápidamente un componente en PHP que nos permita generar archivos PDF.

Lo primero que debemos hacer es crear una carpeta en el directorio principal de nuestro servidor web en este caso /var/www/ llamada PDF la cual contendrá nuestro proyecto, luego de creada la carpeta nos posicionamos en su interior y creamos un archivo llamado composer.json con el siguiente contenido.

{
    "name": "PDF",
    "version": "1.0",
    "type": "example",
    "description": "Componente para exportar a pdf",
    "keywords": [
        "example",
        "testing"
    ],
    "homepage": "http://www.blog.opensoluciones.com",
    "time": "2015-03-25",
    "license": "CopyLeft",
    "authors": [
        {
            "name": "Adalberto Adrian",
            "homepage": "http://www.blog.opensoluciones.com"
        }
    ],
    "require": {
        "php": " >= 5.4"
    },
    "autoload": {
        "psr-4": {
            "Monolog\\": "src/",
            "Vendor\\Namespace\\": ""
        }
    }
}

Si nos fijamos este archivo contiene los parámetros utilizados por Composer para generar nuestro proyecto.

La sección que encontramos antes de la etiqueta  "require" contiene toda la información sobre el proyecto y sus autores.

En la sección "require" se especifican las dependencias que tendrá nuestro proyecto, por los momentos solo especificaremos como requerimiento una instalación de PHP en una versión igual o superior a 5.4

En el apartado "autoload" indicamos las especificaciones de autocarga de las clases PHP que para este caso usaremos el estándar psr-4.

Ahora con nuestro archivo ya generado creamos nuestro proyecto con el siguiente comando.


composer install

Esto debería generar una salida como esta.


Loading composer repositories with package information
Installing dependencies (including require-dev)
Nothing to install or update
Writing lock file
Generating autoload files

Luego de esto nos daremos cuenta que dentro de nuestro directorio PDF se creo una carpeta llamada vendor la cual contiene un archivo llamado autoload.php en el cual encontramos la información de autocarga de las clases y un directorio llamado composer en donde se generaron varios archivos php.

Ya en este punto podemos instalar el componente necesario para que nuestro proyecto genere los PDF, en este caso utilizaremos dompdf puedes conseguir información sobre el mismo en su link de descarga https://github.com/dompdf/dompdf

Gracias a Composer no es necesario instalar el componente de manera manual en nuestro proyecto sino que utilizamos la herramienta para que lo haga por nosotros, para ello lo primero que debemos hacer es editar el archivo que creamos anteriormente composer.json  y en la sección "require" agregamos la nueva dependencia que tiene nuestro proyecto para que nos quede de esta manera.


"require": {
        "php": " >= 5.4",
        "dompdf/dompdf": "dev-master"
    },

Luego que hacemos esto debemos decirle a Composer que actualice nuestro proyecto con las nuevas dependencias que le especificamos y así el se encargara de descargar y instalar automaticamente el dompdf.


composer update

Y obtenemos una salida como la siguiente.


Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing phenx/php-font-lib (0.2.2)
    Loading from cache
 
  - Installing dompdf/dompdf (dev-master c3527d9)
    Loading from cache
 
Writing lock file
Generating autoload files

Listo ahora si exploramos el directorio vendor nos damos cuenta que se crearon los directorios dompdf phenx pertenecientes a las nuevas dependencias de nuestro proyecto.

Bien luego de ya instaladas todas nuestras dependencias ya podemos crear el archivo que generara nuestro PDF.

En nuestro directorio raíz PDF creamos un archivo llamado index.php con el siguiente contenido.

<?php
// somewhere early in your project's loading, require the Composer autoloader
// see: http://getcomposer.org/doc/00-intro.md
require 'vendor/autoload.php';
 
// disable DOMPDF's internal autoloader if you are using Composer
define('DOMPDF_ENABLE_AUTOLOAD', false);
 
// include DOMPDF's default configuration
require_once 'vendor/dompdf/dompdf/dompdf_config.inc.php';
 
ob_start();
include "includes/html.php";
$html = ob_get_clean();
 
$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->render();
$dompdf->stream("salida.pdf");
?>

y también vamos a crear un directorio llamado includes dentro del cual creamos un archivo llamado html.php con el siguiente contenido.


<html>
        <body>
                <p>Mi Primer PDF</p>
        </body>
</html>

Si detallamos el código descubrimos que dentro del archivo html.php se encuentra el código html que mostrara nuestra página en este caso Mi primer PDF el cual es llamado desde el index.php y es capturado dentro de la variable $html por la función ob_get_clean() de PHP, luego el dompdf se encarga de enviar nuestra variable a un archivo pdf llamado salida.pdf

Ahora para probar nuestro programa solo debemos ejecutar en nuestro navegador web el archivo index.php y ver como funciona.

Tags: