peLmeL.org
Accueil du site > peLmeL Blog > PHP, Applications et Framework > Classes ODF en PHP

Classes ODF en PHP

mardi 3 mars 2009, par Brice Favre


ODF est, d’après ce que j’ai pu en lire, un format libre, dont les spécifications sont disponibles. Ce qui est assez bizarre, c’est le mal que l’on a à trouver des librairies pour générer ce type de document en PHP. Voici quelques projets trouvé sur le net

ODT PHP

On commence par ce petit projet français, lancé par des membres d’Anaska, une société de formation. La classe fournie ici permet d’utiliser les fichiers ODT comme des fichiers de template. L’avantage est que vous préparez vos différents documents et n’avez qu’à les intégrer comme un template classique.

Exemple, voici un fichier lettre.odt

  1. Bonjour {civilite} {nom} {prenom}
  2. ...

En PHP, avec la classe ODTPHP :

  1. $oDoc = new odf ('lettre.odt');
  2. $oDoc->setVars ('civilite', $civilite);
  3. $oDoc->setVars ('nom', $nom);
  4. $oDoc->setVars ('nom', $prenom);
  5.  
  6. $odf->exportAsAttachedFile();

Et vous voilà avec votre fichier ODT, directement téléchargeable sur votre poste ou celui de vos clients. On dispose même d’une syntaxe pour traiter les tableaux.

Cette classe est très prometteuse et permet déjà de traiter bien des cas. Le problème, dans mon cas, est que l’on a besoin de connaître à l’avance le contenu du document. Il serait possible de créer un système de template au plus simple, je n’ai pas encore regarder de plus près pour ça.

URL du projet : http://sourceforge.net/projects/odtphp/

OpenDocument PHP

OpenDocument PHP est un projet très ambitieux mais malheureusement très inactif. Au départ, la volonté est de créer une véritable API pour générer des fichiers suivant la norme Open Document, à savoir ODT et ODS. L’API est disponible en version 0.5.3 sur un serveur SVN, il existe même un serveur PEAR pour faciliter les intégrations.

Las, le projet n’est plus mis à jour depuis plus d’un an. L’utilisation s’en relève ardue, malgré la présence d’un peu de doc. Dommage, car là on peut vraiment créer un document de A à Z et effectuer des conversions de HTML en ODT.

A noter que ce projet est toujours référencé comme référence sur la page WikiPedia de l’Open Document.

URL du projet : http://opendocumentphp.org/

Autres projets ?

Pour le reste, c’est plutôt faible. Il existe bien quelques projets de conversion de ODT en HTML, ainsi qu’un projet sur PEAR, mais rien de bien stable ou mature. Dommage, y’a encore du travail et des chantier à exploiter

En chantier

Merci à Palleas qui a répondu à mon twitt sur le sujet.

Répondre à cet article

6 Messages de forum

  • Classes ODF en PHP

    3 mars 2009 21:51, par Palleas

    De rien :)

    Je n’ai pas beaucoup testé la première, mais je suppose que ça doit être bien pratique pour des documents types à envoyer aux clients...

    Par contre, j’aurais aimé trouver une classe qui permettre de générer un fichier from scratch, au même titre qu’on en a un stock pour la génération de PDF -_-"

    Voir en ligne : http://www.palleas.com

    Répondre à ce message

    • Classes ODF en PHP 4 mars 2009 09:22, par Cyruss

      Salut,

      voici quelques liens complémentaires :

      - http://phpdocwriter.sourceforge.net/index.php ?lang=en
      - http://www.wstech2.net/index.php ?do=puno
      - http://wiki.services.openoffice.org/wiki/ODFDOM
      - http://www.tinybutstrong.com/fr/tbsooo.php

      Il y a deux approches pour la manipulation de fichier ODT :
      - templating
      - creation from scratch

      Le premier est le plus facile à mettre en place techniquement. Pour le second l’approche la plus perenne serait de se baser sur le moteur d’Openoffice : uno, sinon on se retrouvera embarassé à chaque changement de norme d’odf.

      Concernant le projet odtPHP on a un développeur qui va venir bosser sur le sujet pour son stage pendant 3 mois. Cela permettra d’avancer sur le sujet.

      Cyril Pierre de Geyer Anaska odtPHP member

      Voir en ligne : Cyruss Web Log

      Répondre à ce message

      • Classes ODF en PHP 4 mars 2009 14:24, par Brice Favre

        Merci de ces liens supplémentaires et bonne nouvelle pour le projet odtPHP

        L’utilisation d’UNO est une bonne idée qui a déjà été implémenté à plusieurs reprises mais elle contient quelques inconvénients majeurs à mon avis. Tout d’abord il n’existe pas de librairie propre à PHP (enfin stable) et le serveur en lui-même qui n’est pas vraiment un serveur.

        Dans notre cas c’est pas jouable car ça implique trop de contraintes et assez peu de stabilité.

        Répondre à ce message

  • Classes ODF en PHP

    4 mars 2009 09:48, par orouk

    Pour répondre au problème de BRICE " Le problème, dans mon cas, est que l’on a besoin de connaitre à l’avance le contenu du document"

    Solution : Recherche de variable dans les templates

    Il suffit d’utiliser cette classe Cela permet d’éviter d’avoir les messages d’erreurs avec la méthode setVars() : quand la variable envoyé n’existe pas dans le modèle

    class myOdfClass extends Odf

    public function scanTemplate() $subject = $this->__toString() ;

    $pattern = ’/.*\\’.parent ::DELIMITER_LEFT.’(.*)\\’.parent ::DELIMITER_RIGHT.’.*/mU’ ;

    preg_match_all($pattern, $subject, $matches) ;

    return $matches[1] ;

    // object instanciation $odf = new myOdfClass ("tpl/myTemplate.odt") ;

    // Recueillir les variables inclus dans le template $marks = $odf->scanTemplate() ;

    // Remplacer les variables par les valeurs si elles sont connus ou des des valeurs vides foreach ($marks as $val)

    if (isset($defaultVal[$val]))

    $odf->setVars($val, $defaultVal[$val]) ;

    else

    $odf->setVars($val, ’’) ;

    // end foreach ($marks ...

    voir sur commentaire sur le projet http://sourceforge.net/tracker/index.php ?func=detail&aid=2351428&group_id=237833&atid=1104171

    Sinon il existe tbsoo

    PS : les accolades apparemment ne s’affiche pas dans spip (désolé)

    Voir en ligne : tbsooo

    Répondre à ce message

  • Classes ODF en PHP

    29 mai 2009 16:47, par cyruss

    Bonjour,

    suite à tes remarques et à quelques demandes d’utilisateurs nous avons finalisé une version 0.9 corrigeant les problèmes !

    J’en ai profité pour mettre à jour un article sur PHPFrance :

    http://www.phpfrance.com/tutoriaux/index.php/2009/05/25/53-manipuler-des-fichiers-opendocument-avec-php

    Voir en ligne : Article sur phpfrance

    Répondre à ce message


Suivre la vie du site RSS 2.0 | Plan du site | Espace privé | SPIP | squelette