WEB-d Développement Web

PHP, SQL, HTML5, CSS3, Javascript, Mootools, Référencement, SEO, CMS, e-commerce, Apache, Linux, Ubuntu, ...

Créer des fichiers OpenOffice (.odt) avec PHP

Si vous souhaitez créer des documents OpenOffice.org (.odt) à partir de votre application PHP, il existe une librairie pour cela.

Vous pouvez télécharger odtphp sur Github. Il faut ensuite créer un document texte OpenOffice et définir les emplacements à l'aide d’accolades {mot_cle} (comme dans l'exemple ci-dessus). Il ne reste plus qu'à créer le document final en PHP:


require "./chemin/vers/odtphp/odf.php";
$odf = new odf("odtphp-exemple1.odt", array('ZIP_PROXY' => 'PhpZipProxy'));

$odf->setVars('titre', 'Mon titre dynamique');
$odf->setVars('texte', "Mon texte,\n\n\nAvec plusieurs lignes...");

// Ajouter une image:
$odf->setImage('image', 'web-d.jpg');

$odf->exportAsAttachedFile("Exemple ODTPHP");
 

Listes

Il est possible de créer des listes. Il faut pour cela utiliser des "segments". Un segment commence par [!-- BEGIN nom_du_segment --] et se termine par [!-- END segment1 --] (attention, OpenOffice essaiera peut-être de remplacer les deux tirets (--) par une seule ligne, ce qui ne fonctionne pas!). A l'intérieur du segment, on utilise toujours les mêmes accolades.

Dans le code PHP,

  1. on crée la liste avec la méthode setSegment("nom_du_segment"),
  2. puis pour chaque élément de la liste on doit effectuer un merge(),
  3. et finalement on fait un merge du segment.


$odf = new odf("odtphp-exemple2.odt", array('ZIP_PROXY' => 'PhpZipProxy'));
$odf->setVars('titre', 'Titre dynamique');

$segment = $odf->setSegment('segment1');

$segment->setVars("element_titre", "Chapitre 1");
$segment->setVars("element_texte", "Lorem ipsum...");
$segment->merge();

$segment->setVars("element_titre", "Chapitre 2");
$segment->setVars("element_texte", "Lorem ipsum...");
$segment->merge();

$odf->mergeSegment($segment);


$odf->exportAsAttachedFile("Exemple avec liste");
 

Tableaux

Odtphp peut également créer un tableau de plusieurs lignes. Il y a cependant un truc supplémentaire: pour indiquer à odtphp qu'il s'agit bien d'une ligne de tableau, et pas d'une simple ligne, le segment doit commencer par row.

Le code PHP par contre reste identique:


$odf = new odf("odtphp-exemple3.odt", array('ZIP_PROXY' => 'PhpZipProxy'));
$odf->setVars('titre', 'Titre dynamique');

$segment = $odf->setSegment('segment1');

$segment->element_texte("Lorem ipsum...");
$segment->setVars("element_titre", "Chapitre 1");
$segment->merge();

$segment->setVars("element_titre", "Chapitre 2");
$segment->element_texte("Lorem ipsum...");
$segment->merge();

$odf->mergeSegment($segment);

$odf->exportAsAttachedFile("Exemple avec tableau");
 

Articles similaires