tbsOOo : TinyButStrong OOo
Auteur : Olivier LOYNET (tbsooo@free.fr)
Date : 2006-06-12
Version : 0.7.9
Web site : http://www.tinybutstrong.com
Forum : http://www.tinybutstrong.com/forum.php
Type de licence : GNU LGPL http://www.gnu.org/copyleft/lesser.html
La classe tbsOOo est une extension du moteur de template TinyButStrong.
Elle permet de générer dynamiquement des documents OpenOffice en séparant présentation et données.
En pratique, il suffit de concevoir un document avec OpenOffice qui servira de modèle (template). Ensuite à partir du script PHP il reste à fusionner ce modèle avec une source de données pour obtenir un nouveau document OpenOffice.
Sommaire
Historique
- [2006-06-12] TinyButStrongOOo 0.7.9 publié
Correction des caractères EURO
Correction d'un paramètre de 'zip'
Nouvelle méthode AddFileToDoc method : Ajouter un fichier au document OpenOffice
- [2006-01] Forum
http://www.tinybutstrong.com/forum.php
- [2005-12-12] TinyButStrongOOo 0.7.8 publié
Nouvelle méthode : SetDataCharset
Définir le type d'encodage des données ISO 8859-1 ou UTF8 à fusionner. Par défaut c'est l'encodage ISO 8859-1
- [2005-11] PHP Classes : 5eme place du prix de l'innovation en Octobre 2005
Les gagnants
- [2005-10-12] Documentation
Petites corrections et version française (ce document)
- [2005-09-28] TinyButStrongOOo 0.7.7 publié
Conversion des caractères "\n" en <text:line-break/>
- [2005-09-23] TinyButStrongOOo 0.7.6 publié
Un grand merci à Skrol29 qui a écrit TinyButStrong et ma aidé à étendre sa classe pour travailler avec des documents OpenOffice.
Téléchargement
Fonctionnalités
- La classe fonctionne sous Linux et Windows…
- La classe supporte les formats d'OpenOffice en version 1.x ainsi que le nouveau format utilisé dans OpenOffice 2 (OpenDocument 1.0, OASIS standard).
- Il n'est pas nécessaire d'installer OpenOffice sur le serveur.
- La classe utilise les fonctions natives du moteur de template TinyButStrong. Vous pouvez fusionner variables et blocks en utilisant la syntaxe (var, block, if, then, frm, ...). La fusion respecte la mise en page, la justification et les styles utilisés lors de la création du gabarit.
Limites
- La classe ne permet pas d'ajouter ou de modifier des images à la volée dans les documents OpenOffice. Les images doivent être préalablement insérées lors de la création du document OpenOffice qui servira de gabarit.
- La classe ne permet pas d'ajouter ou de modifier des styles à la volée dans les documents OpenOffice. Les styles utilisés doivent être définis lors de la création du document OpenOffice qui servira de gabarit.
- La classe ne permet pas d'utiliser les formats natifs XML comme ‘date’, ‘url’, ‘nombre' dans les tableaux. Toutes les données fusionnées sont au format 'text' uniquement. A la place il est possible d'utiliser le paramètre 'frm' de TinyButStrong pour formater les dates ou les nombres.
Pré requis
coté serveur
coté client
Installation
Zip et Unzip
Les exécutables Zip et Unzip sont nécessaires sur le serveur pour que la classe tbsOOo puisse extraire/ajouter les fichier XML des documents OpenOffice.
Les noms des exécutables sont fixés par défaut sans le chemin complet et sans extension. Les valeurs sont : 'zip' et 'unzip'.
En environnement LINUX typiquement les chemins d'installation sont '/usr/bin/zip' et '/usr/bin/unzip'.
En environnement WIN32 il faut obligatoirement installer ZIP et UNZIP. Ils sont librement téléchargeable à partir du site d'info-zip.
Astuce : pour avoir un fonctionnement non dépendant du type de serveur, la variable d'environnement 'PATH' peut-être fixée par la commande DOS suivante :
set PATH=c:\program files\bin;%PATH%
(si les exécutables sont installés dans le répertoire : 'c:\program files\bin')
Demander assistance à votre administrateur système si besoin.
Le répertoire de travail
La classe a besoin d'un répertoire de travail pour la création des nouveaux documents OpenOffice.
Toutes les opérations (extraction, fusion, ...) sont effectuées dans ce répertoire avec un nom unique.
Ce répertoire doit être en écriture par le script PHP (en général l'utilisateur Apache).
La valeur par défaut est fixée dans la classe à : 'tmp/'.
Vous pouvez aussi utiliser le répertoire du système. Par exemple :
Sur un serveur Linux, fixez la valeur à '/tmp'.
Sur un serveur DOS, fixez la valeur à 'c:/windows/temp' ou à 'c:\\windows\\temp'.
OpenOffice
Si vous n'avez pas encore installé OpenOffice sur votre poste, c'est le moment. Il sera utile pour créer les gabarits (template) et pour visualiser les résultats après la fusion.
Pour une meilleure compréhension du format des documents OpenOffice, allez dans la rubrique astuces.
Tutorial
Etape 1. Création d'un gabarit avec OpenOffice.
- créez un document de type traitement de texte (.SXW).
- écrivez dans le document le code TBS suivant : [var.x]
- sauvegardez le document sous le nom : 'hello.sxw'
cliquez ici pour charger l'exemple.
Etape 2. Création d'un script PHP avec le code suivant.
<?
include_once('tbs_class.php');
include_once('tbsooo_class.php');
// data
$x = 'Hello World';
// instantiate a TBS OOo class
$OOo = new clsTinyButStrongOOo;
// setting the object
$OOo->SetZipBinary('zip');
$OOo->SetUnzipBinary('unzip');
$OOo->SetProcessDir('tmp/');
$OOo->SetDataCharset('ISO 8859-1');
// create a new openoffice document from the template with an unique id
$OOo->NewDocFromTpl('hello.sxw');
// merge data with OOo file content.xml
$OOo->LoadXmlFromDoc('content.xml');
$OOo->SaveXmlToDoc();
// display
header('Content-type: '.$OOo->GetMimetypeDoc());
header('Content-Length: '.filesize($OOo->GetPathnameDoc()));
$OOo->FlushDoc();
$OOo->RemoveDoc();
?>
Etape 3. Exécution du script pour obtenir un nouveau document avec les données fusionnées !.
Exemples
Avant tout, installez OpenOffice pour voir ces exemples.
Astuces
- TinyButStrong :
- Equivalence entre les principaux tags HTML et XML d'OpenOffice à utiliser dans les blocks :
| |
HTML tags |
OOo XML tags |
| table |
<table> |
<table:table> |
| row |
<tr> |
<table:table-row> |
| cell |
<td> |
<table:table-cell> |
- OpenOffice document format :
Comme le XML n'a pas de support pour les objets binaires comme les images, les objets OLE ou d'autres types de média, OpenOffice.org utilise une archive pour stocker les fichiers XML avec ses données binaires associées. Cette archive est au format standard Zip, pour plus de détail voir :
Les principaux fichiers XML d'OpenOffice à utiliser lors de la fusion :
- content.xml (le contenu principal du document)
- meta.xml (l'en-tête du document: nom, titre, auteur, ...)
- styles.xml (les feuilles de styles du document)
- Les spécifications d'OpenDocument : http://www.oasis-open.org/committees/office/faq.php
Définition de la classe
Constructeur
- Synopsis
$object = new clsTinyButStrongOOo()
- Description
Cette classe étend clsTinyButStrong
- Paramètre
aucun
- Valeur de retour
objet
- Exemple
$OOo = new clsTinyButStrongOOo();
Méthodes
| boolean SetZipBinary (string $path_binary[, $test=false]) |
Fixer le nom de l'exécutable 'zip' avec ou sans le chemin complet |
| boolean SetUnzipBinary (string $path_binary [, $test=false]) |
Fixer le nom de l'exécutable 'unzip' avec ou sans le chemin complet |
| boolean SetProcessDir (string $process_path) |
Fixer le nom du répertoire de travail pour la création des nouveaux documents OpenOffice |
| void SetDataCharset (string $charset) |
Fixer le format d'encodage des données à fusionner (ISO 8859-1 ou UTF8) |
| mixed NewDocFromTpl (string $ooo_template_filename) |
Créer un nouveau document OpenOffice dans le répertoire de travail à partir du gabarit OpenOffice avec un nom unique |
| boolean LoadXmlFromDoc (string $xml_file) |
Extraction du fichier XML du document OpenOffice et le charge comme modèle de TBS |
| boolean SaveXmlToDoc (void) |
Sauvegarder le résultat de la fusion effectué par TBS dans le fichier XML et le compresse dans le document OpenOffice |
| void AddFileToDoc (string $filename) |
Ajouter un fichier externe dans le document OpenOffice |
| string GetPathnameDoc (void) |
Obtenir le nom du nouveau document OpenOffice |
| string GetMimetypeDoc (void) |
Obtenir le 'mime type' du document |
| stream FlushDoc (void) |
Retourner le contenu binaire du document OpenOffice du répertoire de travail vers STDOUT |
| void RemoveDoc (void) |
Supprimer le nouveau document OpenOffice du répertoire de travail |
| void ClearProcessDir ([int $hour=2 [, int $minut=0]]) |
Nettoyer le répertoire de travail des vieux documents antérieurs à un nombre d'heures et de minutes |
Méthode: SetZipBinary
- Synopsis
boolean SetZipBinary (string $path_binary[, $test=false])
- Description
Fixer le nom de l'exécutable 'zip' avec ou sans le chemin complet.
Cette méthode est optionnelle.
La valeur par défaut est fixée dans la classe à 'zip'.
- Paramètre
string $path_binary : le nom de l'exécutable avec ou sans le chemin complet
boolean $test : si (true) effectuer un test d'exécution en lançant la commande 'zip -h', valeur par défaut : false
- Valeur de retour
boolean : TRUE si succès
- Note
Cette méthode ne peut pas être appelée statiquement.
- Exemple
$OOo->SetZipBinary('zip'); // pour fixer l'exécutable sans le chemin
or
$OOo->SetZipBinary('/usr/bin/zip'); // pour fixer l'exécutable avec le chemin complet
or
$OOo->SetZipBinary('/usr/bin/zip', true); // pour fixer l'exécutable avec le chemin complet et effectuer un test
Méthode: SetUnzipBinary
- Synopsis
boolean SetUnzipBinary (string $path_binary [, $test=false])
- Description
Fixer le nom de l'exécutable 'unzip' avec ou sans le chemin complet.
Cette méthode est optionnelle.
La valeur par défaut est fixée dans la classe à 'unzip'.
- Paramètre
string $path_binary : le nom de l'exécutable avec ou sans le chemin complet
boolean $test : si (true) effectuer un test d'exécution en lançant la commande 'unzip -h', valeur par défaut : false
- Valeur de retour
boolean : TRUE si succès
- Note
Cette méthode ne peut pas être appelée statiquement.
- Exemple
$OOo->SetUnzipBinary('unzip'); // pour fixer l'exécutable sans le chemin
or
$OOo->SetUnzipBinary('/usr/bin/unzip'); // pour fixer l'exécutable avec le chemin complet
or
$OOo->SetUnzipBinary('/usr/bin/unzip', true); // pour fixer l'exécutable avec le chemin complet et effectuer un test
Méthode: SetProcessDir
- Synopsis
boolean SetProcessDir (string $process_path)
- Description
Fixer le nom du répertoire de travail pour la création des nouveaux documents OpenOffice.
Ce répertoire doit être 'Read', 'Write' et 'eXecute' par le script PHP (Apache user).
La valeur par défaut dans la classe est fixée à : 'tmp/' (relative au script PHP).
- Paramètre
string $process_path : le nom du chemin du répertoire de travail (relatif ou absolu). Le caractère '/' est automatiquement ajouté à la fin du nom du chemin.
- Valeur de retour
boolean : TRUE si succès
- Note
Cette méthode ne peut pas être appelée statiquement.
- Exemple
$OOo->SetProcessDir('tmp/'); // valeur par défaut
or
$OOo->SetProcessDir('tmp'); // même chose que 'tmp/'
or
$OOo->SetProcessDir('./tmp'); // même chose que 'tmp/'
or
$OOo->SetProcessDir('/tmp'); // utiliser le répertoire temporaire de Linux
or
$OOo->SetProcessDir('c:/windows/temp'); // utiliser le répertoire temporaire de Windows
Méthode: SetDataCharset
- Synopsis
void SetDataCharset (string $charset)
- Description
Fixer le format d'encodage des données à fusionner (ISO 8859-1 ou UTF8).
Par défaut, c'est l'encodage ISO 8859-1.
Cette méthode est optionnelle.
- Paramètre
string $charset : 'ISO 8859-1' ou 'UTF8'.
- Valeur de retour
aucune
- Note
Cette méthode ne peut pas être appelée statiquement.
- Exemple
$OOo->SetDataCharset('ISO 8859-1'); // valeur par défaut
ou
$OOo->SetDataCharset('UTF8');
Méthode: NewDocFromTpl
- Synopsis
boolean NewDocFromTpl (string $ooo_template_filename)
- Description
Créer un nouveau document OpenOffice dans le répertoire de travail à partir du gabarit OpenOffice avec un nom unique.
- Paramètre
string $ooo_template_filename : le nom du chemin du gabarit OpenOffice
- Valeur de retour
string : le nom du chemin du nouveau document
- Note
Cette méthode ne peut pas être appelée statiquement.
- Exemple
$OOo->NewDocFromTpl('example_invoice.sxw');
Méthode: LoadXmlFromDoc
- Synopsis
boolean LoadXmlFromDoc (string $xml_file)
- Description
Extraction du fichier XML du document OpenOffice et le charge comme modèle de TBS.
- Paramètre
string $xml_file : le nom du fichier XML à traiter
- Valeur de retour
boolean : TRUE si succès
- Note
Cette méthode ne peut pas être appelée statiquement.
- Exemple
$OOo->LoadXmlFromDoc('content.xml');
or
$OOo->LoadXmlFromDoc('meta.xml');
or
$OOo->LoadXmlFromDoc('styles.xml');
Méthode: SaveXmlToDoc
- Synopsis
boolean SaveXmlToDoc (void)
- Description
Sauvegarder le résultat de la fusion effectué par TBS dans le fichier XML et le compresse dans le document OpenOffice.
- Paramètre
aucun
- Valeur de retour
boolean : TRUE si succès
- Note
Cette méthode ne peut pas être appelée statiquement.
- Exemple
$OOo->SaveXmlToDoc();
Method: AddFileToDoc
- Synopsis
void AddFileToDoc (string $filename)
- Description
Ajouter un fichier externe dans le document OpenOffice, comme une image par exemple.
Le chemin local doit être le même que le chemin de destination dans le document OpenOffice.
- Parameter
string $filename
- Return value
none
- Note
Cette méthode ne peut pas être appelée statiquement.
- Example
$OOo->AddFileToDoc('Pictures/new.jpg');
Méthode: GetPathnameDoc
- Synopsis
string GetPathnameDoc (void)
- Description
Obtenir le nom du nouveau document OpenOffice.
- Paramètre
aucun
- Valeur de retour
string : le nom du nouveau document OpenOffice dans le répertoire de travail.
- Note
Cette méthode ne peut pas être appelée statiquement.
- Exemple
$path = $OOo->GetPathnameDoc();
or
$realpath = realpath($OOo->GetPathnameDoc());
or
header('Location: '.$OOo->GetPathnameDoc()); // ne fonctionne pas avec IE et si le document est en dehors de l'arborescence du site Web
Méthode: GetMimetypeDoc
- Synopsis
string GetMimetypeDoc (void)
- Description
Obtenir le 'mime type' du document.
- Paramètre
aucun
- Valeur de retour
string : le 'mime type' du document.
- Note
Cette méthode ne peut pas être appelée statiquement.
- Exemple
$mimetype = $OOo->GetMimetypeDoc();
or
header('Content-type: '.$OOo->GetMimetypeDoc());
Méthode: FlushDoc
- Synopsis
stream FlushDoc (void)
- Description
Retourner le contenu binaire du document OpenOffice du répertoire de travail vers STDOUT
- Paramètre
aucun
- Valeur de retour
stream : le contenu binaire du document
- Note
Cette méthode ne peut pas être appelée statiquement.
- Exemple
header('Content-type: '.$OOo->GetMimetypeDoc());
header('Content-Length: '.filesize($OOo->GetPathnameDoc()));
$OOo->FlushDoc();
Méthode: RemoveDoc
- Synopsis
void RemoveDoc (void)
- Description
Supprimer le nouveau document OpenOffice du répertoire de travail
- Paramètre
aucun
- Valeur de retour
aucune
- Note
Cette méthode ne peut pas être appelée statiquement.
- Exemple
$OOo->RemoveDoc();
ou
header('Content-type: '.$OOo->GetMimetypeDoc());
header('Content-Length: '.filesize($OOo->GetPathnameDoc()));
$OOo->FlushDoc();
$OOo->RemoveDoc();
Méthode: ClearProcessDir
- Synopsis
void ClearProcessDir ([int $hour=2 [, int $minut=0]])
- Description
Nettoyer le répertoire de travail des vieux documents antérieurs à un nombre d'heures et de minutes.
DANGER : Ne pas utiliser cette méthode dans un répertoire système comme /tmp ou c:/windows/temp.
- Paramètre
int $hour : le nombre d'heures, par défaut 2
int $minut : le nombre de minutes, par défaut 0
- Valeur de retour
aucune
- Note
Cette méthode ne peut pas être appelée statiquement.
- Exemple
$OOo->ClearProcessDir(); // valeur par défaut, supprime les fichiers de plus de 2 heures d'ancienneté
or
$OOo->ClearProcessDir(2,0); // supprime les fichiers de plus de 2 heures d'ancienneté
or
$OOo->ClearProcessDir(0,30); // supprime les fichiers de plus de 30 minutes d'ancienneté