Previous Pause Suivant

Editique : Manipuler les ODT et les exporter en PDF

I/ Problématique

Nombre d'entre nous est tombé sur les problématiques suivantes :

- Comment modifier simplement un document ODT
- Comment transformer un document ODT ou DOC en PDF

II/ Actuellement

Jusqu'ici chez Neuros, on utilisait une méthode dévelopée en interne nommé NPublisher.

Celui-ci a plus que montré ses limites... En effet, son installation est compliquée, non stable et ressemble plus à du bidouillage qu'autre chose (Execution de script python depuis PHP, de commande shell de décompression, ...)

De plus, son utilisation nécessitait que le service OpenOffice soit sur le même serveur que le serveur web.

III/ Solution

La solution consiste à combiner plusieurs produits qui vont avoir pour effet de séparer les différents éléments et de simplifier le code PHP.

A) Avantages

- Séparation de l'éditique de l'application : Un serveur physique d'éditique va pouvoir être mis en place pour plusieurs projets.
- Le serveur d'éditique n'utilise pas le disque pour transformer les documents
- Un simple webservice va servir à effectuer la conversion

B) Différents éléments

- OpenOffice : On ne peut pas s'en passer. Il est nécessaire de lancer un OpenOffice en mode "Headless" pour la conversion
- JodConverter-Tomcat : Cet outil tout packagé et très simple d'utilisation s'occupera de mettre à disposition un web service permettant d'effectuer la conversion
- OdtPhp : Une petite librairie à ajouter à votre application PHP va vous permettre de manipuler les odt et d'effectuer de la fusion

C) Mise en place

1 - OpenOffice

Installer OpenOffice et lancer le en mode "Headless" :

soffice -nofirststartwizard -headless "-accept=socket,host=localhost,port=8100;urp;"

2 - JodConverter

Récupérer l'archive en version bundle Tomcat sur le site du développeur et décompressez la.

Il ne vous reste plus qu'a lancer le serveur :

bin/startup.sh

A partir de là, votre webservice est déjà accessible et va vous permettre de faire des conversions

D) Utilisation

1 - Conversion

* Prérequis

Zend Framework

ou

Les librairies PEAR suivantes :

- HTTP_Request
- Net_Socket
- Net_URL

* Code

Une simple requete HTTP depuis votre application va vous permettre de faire des conversions.
Avec Zend Framework :

$client = new Zend_Http_Client('http://soffice.lan:8080/converter/service');

$client->setHeaders(
        array('Content-Type: application/msword',
            'Accept:application/pdf')
        );
$client->setRawData($inputString);
$outputString = $client->request(Zend_Http_Client::POST));

ou avec les librairies PEAR :

$request = new HTTP_Request('http://soffice.lan:8080/converter/service');
$request->setMethod("POST");
$request->addHeader("Content-Type", 'application/msword');
$request->addHeader("Accept", 'application/pdf' );
$request->setBody($inputString);
$request->sendRequest();

$outputString = $request->getResponseBody();



2 - Fusion

* Prérequis

- Librairie odtPhp

* Code

$odf = new odf("/tmp/test.odt", array('ZIP_PROXY' => 'PhpZipProxy'));
$odf->setVars('champ1', 'Hello world !');
$odf->exportAsAttachedFile()


IV/ Liens
 

- http://www.artofsolving.com/opensource/jodconverter
- http://www.odtphp.com

 

Catégorie: 
PHP

Ajouter un commentaire