Zend Framework

Utiliser une Library Externe : Html2Pdf

Aujourd’hui nous allons voir comment implanter HTML2PDF à Zend. Cet article m’a été demandé par quelques personnes ces derniers jours et justement, je pensais en parler.

HTML2PDF ainsi que d’autres libraries PHP disponibles sur internet comme PHPThumb n’utilisent pas la convention PEAR. Leur inclusion ainsi que leur utilisation ne s’effectuera pas comme les libraries utilisant la convention PEAR.

Afin d’utiliser facilement la library html2pdf, nous allons passer par une aide d’action Zend, permettant de faire la transition (Vous pouvez faire une aide de vue ou autre chose utilisant la même logique).

Pour ce faire, nous allons créer une nouvelle classe PHP dans notre library perso App. Elle s’appellera App_Helper_Html2Pdf.

/**
 * Ligne nous permettant d'utiliser la classe HTML2PDF dans souci avec Zend
 */
require_once LIBRARY_PATH.'/html2pdf/html2pdf.class.php';

class App_Helper_Html2Pdf extends Zend_Controller_Action_Helper_Abstract{

    /**
     * @var Zend_Loader_PluginLoader
     */
    public $pluginLoader;

    /**
     * Constructeur: initialisee le chargeur de classes d'aides ou plugins
     *
     * @return void
     */
    public function __construct()
    {
        $this->pluginLoader = new Zend_Loader_PluginLoader();
    }

    /**
     * Constructeur
     *
     * @param string sens portrait ou landscape
     * @param string format A4, A5, ...
     * @param string langue : fr, en, it...
     * @param boolean $unicode TRUE means that the input text is unicode (default = true)
     * @param  String $encoding charset encoding; default is UTF-8
     * @param array marges par defaut, dans l'ordre (left, top, right, bottom)
     * @return null
     */
    public function instanceClass($sens = 'P', $format = 'A4', $langue='fr', $unicode=true, $encoding='UTF-8', $marges = array(5, 5, 5, 8)){
        $html2pdf = new HTML2PDF($sens, $format, $langue, $unicode, $encoding, $marges);

        return $html2pdf;
    }

    /**
     * Fonction permettant d'appeler directement instanceClass
     */
    public function direct($sens = 'P', $format = 'A4', $langue='fr', $unicode=true, $encoding='UTF-8', $marges = array(5, 5, 5, 8)){
        return $this->instanceClass($sens, $format, $langue, $unicode, $encoding, $marges);
    }
}

Pour que Html2Pdf marche ici, nous utilisons, à la première ligne de notre fichier, un require_once pointant sur la classe principale. De là, nous sommes tranquille pour la suite, PHP va se débrouiller. Pour utiliser votre aide d’action, n’oubliez pas de rajouter la partie suivante dans votre Bootstrap.

protected function _initHelpers(){
    Zend_Controller_Action_HelperBroker::addPrefix('App_Helper');
}

Pour finir, pour récupérer votre objet PDF, vous n’aurez plus qu’à faire ceci dans un controller et vous pourrez manipuler votre objet Html2Pdf :

$html2pdf = $this->_helper->Html2Pdf('P','A4','fr', false, 'ISO-8859-15');

Maintenant vous savez comment rajouter une library externe n’utilisant pas la convention PEAR au sein d’un projet Zend. Malheureusement, avec l’arrivée de ZF2 et de PHP5.3 avec les namespaces, cela risque encore de changer.