Générer des documents openoffice (opendocument) ou word 2007 avec php

Soyez le premier à donner votre avis sur cette source.

Vue 10 426 fois - Téléchargée 688 fois

Description

La classe PHP tinyDoc permet générer des documents OpenOffice (OpenDocument) ou Word 2007
Pré-requis :
- PHP 5.2
- ZipArchive

Historique :
La précédente version de la classe PHP s'appelait tbsOOo. Voici les nouvelles fonctionnalités :
- fonctionne avec la dernière version de TinyButStrong
- meilleur support des caractères spéciaux (CR, NL, TAB)
- peut générer des fichiers Word 2007
- peut fusionner des images (seulement OpenDocument)
- peut fusionner au format natif OpenOffice tableur
- deux méthodes pour zip/dézipper les documents (en ligne de commande avec ZIP ou ZipArchive de PECL)
- et un plugin pour symfony framework : sfTinyDocPlugin

Les formats de documents supportés :
- OpenOffice 1.0 or OpenDocument 1.0
- OpenOffice 2.0 or OpenDocument 1.1
Word 2007

C'est fait pour :
- Pour créer des documents texte ou tableur.
- Pour créer des rapports, des mailing, des documents multipages.

Ce n'est pas fait pour :
- Pour fabriquer complètement un document OpenOffice.
- Pour convertir un document OpenOffice en Word ou PDF. Voir le projet PyODConverter.

Avantages :
- Aucune installation d'OpenOffice sur le serveur.
- cela fonctionne avec les environnements *nix, windows et autres.
- les templates peuvent êtres facilement modifiés par les intégrateurs.
- la mise en page est effectuée avec OpenOffice et Word2007

Source / Exemple :


// libs
include('your-path-to-lib/tinyButStrong.class.php');
include('your-path-to-lib/tinyDoc.class.php');

// create the document
$doc = new tinyDoc();
$doc->setZipMethod('shell');
$doc->setZipBinary('zip');
$doc->setUnzipBinary('unzip');
$doc->setProcessDir('./tmp');

$doc->createFrom('templates/your-document.odt');
$doc->loadXml('content.xml');
$doc->mergeXmlField('field1', 'variable');
$doc->mergeXmlField('field2', array('id' => 55, 'name' => 'bob'));
$doc->mergeXmlBlock('block1',
  array(
    array('firstname' => 'John'   , 'lastname' => 'Doe'),
    array('firstname' => 'Douglas', 'lastname' => 'Adams'),
    array('firstname' => 'Roger'  , 'lastname' => 'Waters'),
  )
);
$doc->saveXml();
$doc->close();

// send and remove the document
$doc->sendResponse();
$doc->remove();

Conclusion :


Un dessin vaut mieux qu'un long discours, voici des exemples en ligne avec le code source

http://tinydoc.unesolution.fr/examples

Codes Sources

A voir également

Ajouter un commentaire Commentaires
ERDOGANAK Messages postés 44 Date d'inscription mercredi 9 septembre 2009 Statut Membre Dernière intervention 11 avril 2011
31 août 2009 à 12:53
Bonjour,

Quelqu'un pourrait m'éclairer sur l'utilisation de ce code (ou le placer...)

Merci,
patator13 Messages postés 4 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 7 octobre 2010
8 juin 2009 à 11:52
Bonjour,

J'ai un petit soucis pour récupérer une photo
Lorsque je prends l'exemple je ne rencontre pas de soucis, par contre lorsque je souhaite le mettre sur mon applicatif il ne m'affiche rien
Quelle est la meilleur solution
- c:\xammp\htdocs\monsite\template1\monimage.jpg
- ./template1/monimage.jpg
- /template1/monimage.jpg

Car aucune des 3 solutions ne fonctionnent

Merci d'avance
Patator
oloynet Messages postés 10 Date d'inscription jeudi 3 mars 2005 Statut Membre Dernière intervention 5 juin 2009
5 juin 2009 à 11:32
Bonjour,

Pour zipper et dézipper, il faut installer les binaires suivant de http://www.info-zip.org/

normalement pour les télécharger les binaires :
http://sourceforge.net/project/showfiles.php?group_id=118012

Mais je n'ai pas trouvé les binaires pour windows.

Un autre site
http://stahlforce.com/dev/index.php?tool=zipunzip

ZIP
http://stahlforce.com/dev/zip.exe

UNZIP
http://stahlforce.com/dev/unzip.exe

Olivier
lockkcol Messages postés 1 Date d'inscription jeudi 4 juin 2009 Statut Membre Dernière intervention 5 juin 2009
5 juin 2009 à 10:47
Bonjour,

J'ai un probleme avec ce petit script.
erreur :

Fatal error: Uncaught exception 'tinyDocException' with message 'Xml file not found

je vous joins aussi le script qui est identique au votre à l'exception des chemin

<?php


// libs
include('./lib/tinyButStrong.class.php');
include('./lib/tinyDoc.class.php');

// create the document
$doc = new tinyDoc();
$doc->setZipMethod('shell');
$doc->setZipBinary('C:/Program Files/7-Zip/7z.exe');
$doc->setUnzipBinary('C:/Program Files/7-Zip/7z.exe');
$doc->setProcessDir('./tmp');

$doc->createFrom('templates/basicWord.docx');
$doc->loadXml('content.xml');
$doc->mergeXmlField('field1', 'variable');
$doc->mergeXmlField('field2', array('id' => 55, 'name' => 'bob'));
$doc->mergeXmlBlock('block1',
array(
array('firstname' => 'John' , 'lastname' => 'Doe'),
array('firstname' => 'Douglas', 'lastname' => 'Adams'),
array('firstname' => 'Roger' , 'lastname' => 'Waters'),
)
);
$doc->saveXml();
$doc->close();

// send and remove the document
$doc->sendResponse();
$doc->remove();

?>

J'ai surement mal compris le script. Je travail en local avec easyphp et utilise 7-zip pour dézippé

Merci de votre réponse

cordialement

Lockkcol
oloynet Messages postés 10 Date d'inscription jeudi 3 mars 2005 Statut Membre Dernière intervention 5 juin 2009
13 mai 2009 à 18:57
Toujours ce problème de ZipArchive.
Personnellement je pensais avec le hack que j'avais préconisé que cela fonctionnait, car, bien que que l'archive soit corrumpue, le fichier reste lisible par OpenOffice.

Je suis d'accord aussi avec toi sur le fait qu'une classe externe pour Zipper/Dezipper est le mieux, c'est ce que j'avais prévu de mon côté.

Je n'ai pas plus investigué pourquoi ZipArchive ne fonctionne pas correctement depuis a priori PHP 5.2.7
Afficher les 15 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.