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

Soyez le premier à donner votre avis sur cette source.

Vue 9 071 fois - Téléchargée 611 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

oloynet
Messages postés
10
Date d'inscription
jeudi 3 mars 2005
Statut
Membre
Dernière intervention
5 juin 2009
-
Le lien pour les examples

[url]http://tinydoc.unesolution.fr/examples/url
Arto_8000
Messages postés
1051
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
13 juillet 2010
5 -
Il y a un petit bug dans tes exemples, le rendu pour word n'affiche que du code PHP.

Sinon, l'idée d'utiliser un moteur de template est vraiment intéressant pour ce genre de source surtout que ça multiplie les possibilités sans avoir à se cassé la tête pour le développer.
cs_stailer
Messages postés
511
Date d'inscription
jeudi 28 mars 2002
Statut
Membre
Dernière intervention
13 mai 2009
1 -
Ca l'air vraiment très bien et en plus il gère du word.
Malgré tout, pour OpenOffice je préfère un truc indépendant comme ODTPHP car ta source dépend de tinyButStrong. Ca peut être toujours un peu inquiétant pour l'évolution mais c'est un avis perso.

Sinon après installation (PHP 5.2.9) :

Fatal error: Uncaught exception 'tinyDocException' with message '"zip" not executable' in D:\wamp\www\tinydoc\tinyDoc.class.php:919 Stack trace: #0 D:\wamp\www\tinydoc\executeBasic.php(9): tinyDoc->setZipBinary('zip') #1 {main} thrown in D:\wamp\www\tinydoc\tinyDoc.class.php on line 919

D'ou cela pourrait il venir ? le même problème que dans la version de base d'ODTPHP ?
cs_stailer
Messages postés
511
Date d'inscription
jeudi 28 mars 2002
Statut
Membre
Dernière intervention
13 mai 2009
1 -
Ta classe est-elle compatible avec OpenOffice 3.0 ? Mon problème d'utilisation pourrait venir de la ?
Si non, ce serait bien que tu fasses évoluer ta classe pour OO 3.X
oloynet
Messages postés
10
Date d'inscription
jeudi 3 mars 2005
Statut
Membre
Dernière intervention
5 juin 2009
-
Bonjour,

Il y a deux choix de configuration, soit

1/ Les binaires zip/unzip sont installés

$doc->setZipMethod('shell');
$doc->setZipBinary('zip');
$doc->setUnzipBinary('unzip');

ou

2/ on a la classe Zip de PECL

$doc->setZipMethod('ziparchive');

Dans la méthode 1, il faut que les binaires zip.exe et unzip.exe soit dans le path de windows ou sinon, il faut fixer le chemin complet.

Attention, j'utilise les '/' et non les '\' car il y a un bug avec la fonction de PHP (escapeshellcmd) sous windows

S'il y a un espace dans le chemin, il faut mettre des " comme ci-dessous

$doc->setZipMethod('shell');
$doc->setZipBinary('"C:/Program Files/Zip/zip.exe"');
$doc->setUnzipBinary('"C:/Program Files/Zip/unzip.exe"');

Olivier

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.