begin process at 2012 02 05 02:26:50
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > GÉNÉRER DES DOCUMENTS OPENOFFICE (OPENDOCUMENT) OU WORD 2007 AVEC PHP

GÉNÉRER DES DOCUMENTS OPENOFFICE (OPENDOCUMENT) OU WORD 2007 AVEC PHP


 Information sur la source

Note :
Aucune note
Catégorie :Class et Objet ( POO ) Classé sous :openoffice, opendocument, word 2007, odt, template Niveau :Initié Date de création :06/05/2009 Date de mise à jour :09/05/2009 15:30:30 Vu / téléchargé :5 653 / 369

Auteur : oloynet

Ecrire un message privé
Commentaire sur cette source (15)
Ajouter un commentaire et/ou une note

 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

  • // 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();
// 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

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

09 mai 2009 15:30:31 :
Une nouvelle version (1.0.3) de la classe permet d'utiliser la méthode de compression par 'shell' en remplaçant la fonction PHP escapeshellcmd par une méthode statique self::escapeShellCommand()

 Sources de la même categorie

CLASSE DE GESTION DE "VARIABLES GLOBALES D'ENVIRONNEMENT" par pifou25
Source avec Zip COLLECTION.CLASS.MIN.PHP par thunderhunter
Source avec Zip SIMPLETEMPLATE par thunderhunter
Source avec Zip Source avec une capture VOIR QUI VISITE VOTRE SITE par Dariumis
Source avec Zip CLASS SIMPLE CBASEDONNEE par smag42

 Sources en rapport avec celle ci

Source avec Zip SIMPLETEMPLATE par thunderhunter
Source avec Zip MOTEUR DE TEMPLATE PHPBB3 SIMPLIFIÉ EN PHP5 par gagah1
Source avec Zip Source avec une capture ODTPHP - UPDATE POUR PHP 5.2.7 ET + par stailer
Source avec Zip CHANGEMENT DE TEMPLATE par starkeny
Source avec Zip TEMPLATE ENGINE SIMPLE ET PUISSANT. EXTENTION DE FONCTIONS P... par BlackWizzard

Commentaires et avis

Commentaire de oloynet le 06/05/2009 11:21:42

Le lien pour les examples

[url]http://tinydoc.unesolution.fr/examples[/url]

Commentaire de Arto_8000 le 06/05/2009 15:24:20

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.

Commentaire de stailer le 08/05/2009 22:22:26

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 ?

Commentaire de stailer le 08/05/2009 23:29:51

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

Commentaire de oloynet le 09/05/2009 11:13:28

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

Commentaire de oloynet le 09/05/2009 12:15:29

La suite....

Il faut que j'ajoute dans ma classe des fonctionnalités pour traiter le problème pour zip et unzip pour windows
Pour l'instant je conseille de mettre zip et unzip dans le path de windows

ex.
> click droit sur "Poste de travail" pour obtenir les "propriétés du système"
> click sur l'onglet "Avancé"
> click sur le bouton "Variables d'environnement"

Dans les variables systèmes, choisir "path"

> click sur le bouton "modifier"
> Et rajouter à la fin, par exemple :
  C:\Program Files\zip
avec un ; pour séparer

Si les binaires de zip et unzip sont installés dans C:\Program Files\zip

*** pour que les modifications soient actives, il faut fermer ou redémarrer la session windows

Commentaire de stailer le 09/05/2009 12:19:43

En fait j'ai essayé les 2 et même si je n'ai plus de message d'erreur , le fichier est corrompu.. je pense que c'est à cause d'OO 3.1. Ca marche chez toi avec cette version ?

Commentaire de oloynet le 09/05/2009 13:36:53

Je n'ai pas testé avec la dernière version 3.1.0
Actuellement je travaillais avec la version 3.0.1
Je télécharge et je fais quelques tests avant.

Commentaire de oloynet le 09/05/2009 15:37:47

J'ai testé la classe avec la dernière version d'OpenOffice 3.1.0 et c'est OK.
Pour les problèmes d'archive corrompue, cela vient de la compression avec la librairie PECL ZipArchive.

Exemple de configuration par la méthode 'shell'

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

ou si vous devez fixer le chemin complet vers les exécutables.

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

Il n'est pas nécessaire de mettre des guillemets (") dans le nom du chemin, c'est automatique
Pour Windows on peut écrire soit avec des slashs (/) ou soit avec des antislashs (\)

Commentaire de stailer le 13/05/2009 18:33:21

Donc on revient bien sur le problème de ZipArchive... et contrairement à ce que tu disais dans un commentaire sur ma source modifiée de odtphp, il n'y a pas de "hack" possible et l'utilisation d'une classe externe pour le zip reste le plus simple et le plus portable.

Commentaire de oloynet le 13/05/2009 18:57:48

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


Commentaire de lockkcol le 05/06/2009 10:47:55

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

Commentaire de oloynet le 05/06/2009 11:32:05

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



Commentaire de patator13 le 08/06/2009 11:52:01

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

Commentaire de ERDOGANAK le 31/08/2009 12:53:53

Bonjour,

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

Merci,

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Template :: Comment ça marche??? [ par Adagyo ] Salut @ tous,Je souhaiterais proposer au utilisateur plusieurs theme d'affichage de mes page web... Pour cela, j'ai essayé de décortiquer un peux vBul template.inc [ par joedalton ] bonjourVoila, je possede un fichier template.inc qui me permet de définir ma classe template, mais le probleme c'est que ce fichier est valable pour l template aide [ par thedentiste ] Voila est ce que quelqu'un pourrais m'aider pour utlisation de template j'ai chope plein de tuto mais je trouve pas ce qu'il le faut je cherche a fair Template phplib [ par TuXAveRy ] Bonjour,Voila j'ai un problème de logique assez basic :/J'utilise smarty depuis quelque temps déjà et pour des raisons technique je souhaiterais passe php dans template [ par BirD ] hello, une tite question par rapport aux templates : peut -on ins&#233;rer du code&nbsp; php dans le fichier de template et faire que ca fonctionne ? fusion php mysql openoffice [ par titoye ] Bonjour &#224; tous, j'aimerai depuis un page php fusionner un document texte openoffice.Le top serai de pouvoir lancer directement la fusion mais pou template [ par Urukai1 ] bonjour a tous g une question sur les termplates j'utilise celle de PHPLib en gros j'ai fait un modele de page web a laquelle j'applique des valeurs Comment gérer les boutons submits [ par alaise ] Bonjour,Je cherche &#224; savoir comment je peux faire pour g&#233;rer les boutons submits lorsque j'ai plusieurs formulaires dans une page (template) Prob avec preg_replace() [ par Kevergeek ] Voici mon code : &lt;?php $file = "templates/default/test.tpl"; $template['TITLE'] = "titre"; $template['TEXT'] = "blabla"; $file = file_get_content Generation documents OpenOffice 2.0 [ par darunia ] Bonjour,Je souhaiterais savoir si il existe une librairie permettant de generer des documents sxw pour OpenOffice Writer 2.0.Si oui, merci de m'indiqu


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,920 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales