flosy.info | Développement Web, Open source …

TAG | pmPDFKitPlugin

Je suis à la recherche d’une bibliothèque PHP qui me permette de créer des documents PDF. Commençons par une recherche des plugins PDF existants.

Une recherche dans la base de symfony remonte les plugins suivants :

  • sfTCPDFPlugin utilisé par 85 personnes
  • pmPDFKitPlugin utilisé par 2 personnes

Le choix de la bibliothèque sera conditionné par les attentes suivantes :

  1. les fonctionnalités proposées (au moins la gestion des images, des listes et des tableaux),
  2. la simplicité d’utilisation,
  3. la rapidité de mise en œuvre.

sfTCPDFPlugin

Le plugin est dans une version stable (1.6.2) et il repose sur la bibliothèque TCPDF.

Installation et configuration

Le plugin s’installe classiquement avec la commande « symfony plugin:install ».

Attention le plugin ne fournit pas TCPDF et vous devez le récupérer sur sourceforge. La version 5.9.044 est utlisée pour ce test.

La configuration est faite au travers d’un fichier pdf_config.yml à placer dans le répertoire config de l’application.

Pour effectuer rapidement un test de la bibliothèque, un module est fourni avec 2 exemples. Nous allons activer ce module pour réaliser les tests. Nous éditons pour cela le fichier settings.yml.

all:
  .settings:
    # Default modules  
    enabled_modules: [default, sfTCPDF]

Lors de mes essais quelque soit l’exemple j’obtenais une erreur fatale.

Fatal error: Maximum execution time of 30 seconds exceeded

Après quelques recherches la solution au problème tient au paramétrage de l’option « font subset » (Vous trouverez d’autres conseils d’optimisation dans le forum : http://sourceforge.net/projects/tcpdf/forums/forum/435311/topic/3785743).

Pour mettre en place la correction, après avoir instancié la classe sfTCPDF, utilisez la méthode setFontSubsetting.

<?php
  //create new PDF document (document units are set by default to millimeters)
  $pdf = new sfTCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true);
 
  $pdf->setFontSubsetting(false);
  ...
?>

Fonctionnalités

TCPDF est particulièrement complète parmi toutes les fonctionnalités disponibles voici celles qui m’ont paru utiles.

  • Gestion des entêtes et pieds de page.
  • Gestion des tableaux.
  • Transformation HTML vers PDF
  • Gestion des graphiques
  • Gestion des tables des matières
  • Gestion des images

pmPDFKitPlugin

Le plugin est en version stable (1.0.0) et il repose sur la bibliothèque wkhtmltopdf.

Installation et configuration

Le plugin s’installe classiquement avec la commande « symfony plugin:install ».

Il faut là aussi télécharger la bibliothèque tierce à cette adresse : http://code.google.com/p/wkhtmltopdf/downloads/list.

Ensuite nous activons le filtre du plugin dans le fichier filters.yml de l’application.

rendering: ~
security:  ~
 
# insert your own filters here
pm_pdfkit:
  class: pmPDFKitFilter
 
cache:     ~
execution: ~

Pour le paramétrage de l’application nous modifions la taille de la page pour qu’elle soit au format A4.

all:
  pm_pdfkit:
    page-size: A4

Enfin il faut modifier le fichier routing.yml de l’application pour prendre en compte les formats.

default_index:
  url:   /:module.:sf_format
  param: { action: index, sf_format: html }
 
default:
  url:   /:module/:action.:sf_format/*
  param: { sf_format: html }

Ceci permet de déclencher la génération PDF d’une action, à l’utilisation de du format pdf. Par exemple http://flosy.info/default/index.pdf.

Fonctionnalités

Le plugin transforme tout simplement une action en document PDF. Le plugin semble avoir un bug au niveau des CSS et des images.

Autres bibliothèques

En plus de ces 2 plugins et de leur bibliothèque respective, il sera intéressant de tester le composant Zend_Pdf du Zend Framework.

Related Posts:

· · · · ·

Theme Design by devolux.nh2.me