Réalisé avec OpenOffice 1.1.3 Dernière Mise à Jour le : 11/03/05
Présentation des Editions PastelV3 avec
OpenOffice.org
Auteur: Xavier Poirier xpoirier@ch-bourg01.fr

Présentation des Editions PastelV3 avec OpenOffice
SOMMAIRE :
1- Introduction
2- Comment faire et avec quoi ?
3- Schéma
4- Explications de Fusion.exe
5- Explications de Fusion.java
6- Conclusion
2

Présentation des Editions PastelV3 avec OpenOffice
Introduction :
Le but de ce projet à été de montrer qu'il est possible de faire cohabiter les logiciel commerciaux propriétaires avec les
logiciels libres Opensources.
Le changement d' application de gestion administrative des Patients PASTELV2 (filière MIPIH) en PASTELV3
exigeait que nous installions le logiciel bureautique et applicatif WORD sur tous les postes d' accueils.
Les éditions d' états à champs variables se faisait jusque là par un programme situé sur un serveur et qui transmettait le
fichier d' impression à l' imprimante connue sur le serveur.
Dans la nouvelle version (Pastelv3) les éditions sont gérées comme éditions bureautique à l' aide de modèles WORD
avec des champs variables et un programme écrit spécifiquement qui s' interface avec WORD à l' aide de macros,etc...
L' idée m' est donc venue d' utiliser les API fournies du logiciel Ooo (l' abréviation Ooo sera utilisée tout au long de ce
document pour faire référence à la suite bureautique OpenOffice.org) pour interfacer les éditions bureautiques d' états
variables avec PASTELV3 (Planches d' étiquettes, Bulletins de situation,Fiche individuelle,Quittances,... - une
douzaine de modèles en tout environ).
Quel challenge !!
J' ai d' abord perdu du temps car je voulais faire le développement en langage C (ou C++) , je pensais alors que cela
serait plus rapide en terme de temps de réponse. Je me suis ensuite rendu compte que mon effort était vain, SUN
privilégiant le langage JAVA pour les développements autour de Ooo et les exemples fournis étaient la plupart en
JAVA.
J' avais déjà perdu plus de 1 semaine ! Il était temps de démarrer !
Voici donc ce dont j' allais avoir besoin :
3

Présentation des Editions PastelV3 avec OpenOffice
Comment Faire ?
1- Ecrire une DLL qui sera l' interface entre PASTELV3 et le Programme d' édition fusion.exe. Son seul but est
en fait de lancer le programme Fusion.exe en mode détaché, pour rendre la main à l' utilisateur et ne pas le
pénaliser.
2- Ecrire un programme en C,C++ (fusion.exe) qui sera lié au programme JAVA et plus précisément qui
contrôlera que l' édition à l' aide du programme JAVA n' est lancée qu' une seule fois en même temps (fichier
témoin) . Mais c' est lui aussi qui est chargé de faire la conversion du code barre IEP en code 128 à l' aide de la
DLL Hyperbar. A noter que un mini Parsing du fichier de fusion est effectué à ce moment là pour récupérer le
numéro IEP dans le fichier de fusion (020* ou 001*).Il lance le programme JAVA en mode Attente pour
récupérer les Handle d' erreurs et renvoyer un message à l' utilisateur si une erreur se produit.
3- Ecrire un programme JAVA qui sera l' interface avec Ooo pour traiter l' édition P.O.S.F.I (voir schéma pg 8)
4

Présentation des Editions PastelV3 avec OpenOffice
Avec quoi ?
Les outils utilisés sont les suivants :
DEV-CPP : outil de développement FANTASTIQUE ! en C ­ C++ dernière version (A utiliser sans modération !)
5

Présentation des Editions PastelV3 avec OpenOffice
Avec quoi ?
Environnement de développement JAVA avec si possible un éditeur JAVA comme FORTE
A noter ici que l' on peut utiliser les composants Netbeans disponibles pour Ooo.
JAVA NETBEANS
6

Présentation des Editions PastelV3 avec OpenOffice
Avec quoi ?
7
OpenOffice bien sûr !! www.openoffice.org
Versions 1.0.x en Français
ou versions 1.1.x en Français
A noter ici que cela fonctionne également dans le cas d'
une installation réseau de OpenOffice.org ­ ce qui est
notre cas

Présentation des Editions PastelV3 avec OpenOffice
PastelV3
Fusappel.dll
Fusion.exe
Fusion.java ­ Ooo
Appel de l' édition à partir des menus PastelV3
Un fichier texte à plat est généré dans c:\noyau\travail :
020* pour les étiquettes
001* pour étiquettes dégradées
DLL principale appelée par le programme PASTEL avec le paramètre
suivant : nom du fichier de fusion dans c:\noyau\travail
Appel du programme Fusion.exe en Mode NOWAIT (en mode détaché)
On traite le cas des étiquettes (si 020* ou 001*) pour transformer les numéro IEP en code barre
128 par la DLL Hyperbar (hb_dll32.dll)
Ceci pour ensuite appeler le programme Fusion.java avec le paramètre de code barre comme il
faut.
Ce programme positionne un fichier Temoin dans c:\noyau\travail pour spécifier qu' un
programme Fusion.exe est en cours et on ne lance qu' une seule édition à la fois.
Il lance ensuite le programme « Fusion.java » en mode WAIT (attente du retour du prog. JAVA
pour tester les erreus) avec 2 paramètres :
1- Fichier de fusion
2- Code 128 IEP
P.O.S.F.I Pour :
P : Parsing du fichier de fusion qui est à un format d' éditions pour WORD. Ce format est complètement
absurde et très complexe à lire car il ne s' agit pas d' un format d' échange standard normalisé avec les
colonnes identifiées. Ce travail a représenté 70% du temps passé sur ce projet ! Ce qui est incroyable car il n'
aurait fallu que très peu de temps pour analyser un fichier d' échange standard.
O : Ouverture du fichier Ooo modèle
S : Sous-états, traitement des sous-états du modèle, ceux-ci sont en fait gérés comme des tableaux de valeurs
F : Fusion , Insertion des valeurs dans les champs du modèle
I : Impression , impression de l' état fusionné
8

Présentation des Editions PastelV3 avec OpenOffice
Programme Fusion.exe :
inclus :
strsep.h
hb_dll.h
fusion.cpp
Fonctions de Chaînes de caractères
Utilisée pour récupérer une chaîne de caractères
entre deux délimiteurs
Déclarations Externes de la
DLL hb_dll32.dll HYPERBAR
Programme Principal
9

Présentation des Editions PastelV3 avec OpenOffice
10
Le programme Fusion.java est le programme principal des éditions avec Ooo.Je ne reproduirais pas ici le
code complet du programme car il est trop long et, est suffisamment commenté.
Pour fonctionner , il faut positionner la variable d' environnement suivante :
CLASSPATH =
c:\noyau\ijinconv\fusion;c:\ooo\program\classes\unoil.jar;c:\ooo\program\classes\java_uno.jar;c:\ooo\program\classes\ridl.jar;c:\ooo\progra
m\classes\jurt.jar;c:\ooo\program\classes\juh.jar;c:\ooo\program\classes\jut.jar;c:\ooo\program\classes\sandbox.jar;c:\ooo\program\classes\
classes.jar
Il est constitué de différents Blocs de tâches que j' ai nommé P.O.S.F.I pour :
P : Parsing du fichier de fusion qui est à un format d' éditions pour WORD. Ce format est complètement absurde et très
complexe à lire car il ne s' agit pas d' un format d' échange standard normalisé avec les colonnes identifiées. Ce travail a
représenté 70% du temps passé sur ce projet ! Ce qui est incroyable car il n' aurait fallu que très peu de temps pour analyser un
fichier d' échange standard.
O : Ouverture du fichier Ooo modèle
S : Sous-états, traitement des sous-états du modèle, ceux-ci sont en fait gérés comme des tableaux de valeurs
F : Fusion , Insertion des valeurs dans les champs du modèle
I : Impression , impression de l' état fusionné
Le programme est lancé par défaut à la mode JAVA Windows, çad par le programme javaw.exe , et non pas par le programme
java.exe . Ceci pour cacher à l' utilisateur les fenêtres java.
Par contre , on peut très bien le lancer manuellement par la commande suivante :
java Fusion « paramètre1 » « paramètre2 »
On verra alors les différentes étapes se dérouler à l' écran : P.O.S.F.I , pour le mode debug.

Présentation des Editions PastelV3 avec OpenOffice
11
A noter ici que le programme peut être activé en mode TRACE.
Un fichier est alors généré sous c:\ nommé : Fusion.sxw
Tout ce qui se passe dans le programme est alors inscrit dans le fichier, pour faciliter le debogage en cas de problème.

Présentation des Editions PastelV3 avec OpenOffice
12
P.O.S.F.I P ­ Parsing
Le parcours du fichier de fusion envoyé par PASTELV3 n' a pas été une tâche facile ! (c' est le moins que
je puisse dire)
Il a occupé environ 70% de mon temps sur ce projet (étant donné certains changements de dernière
minute par le MIPIH dans les fichiers de Fusions)
Pourquoi parcourir le fichier d' échange ?
1- Pour récupérer le nom du modèle WORD :
Par ex. c:\noyau\pastel\editions\modèles\word\dabulsit.doc
devient :
c:\noyau\pastel\editions\modèles\ooo\dabulsit.sxw (format Ooo)
Attention !
Par contre : il a fallu auparavant réenregistrer les modèles Word au format Ooo. Bien sûr à ce moment là
on perd la notion de champs utilisateurs. Donc, je les ai ajoutés en tant que champ variable utilisateur :
Voir diapo suivante , copie écran

13

Présentation des Editions PastelV3 avec OpenOffice
14
P.O.S.F.I P ­ Parsing
Pourquoi parcourir le fichier d' échange (suite) ?
Pour récupérer le nombre de copies à éditer !
Pour récupérer le nom de l' imprimante!
Pour récupérer les noms de Champs et les valeurs de ces champs.
Pour récupérer les noms des Champs des sous-états et les valeurs de ces champs.

Présentation des Editions PastelV3 avec OpenOffice
15
P.O.S.F.I O ­ Ouverture
L' ouverture du modèle Ooo se présente de la manière suivante :
Ooo doit être démarré en mode Quickstart, çad que l' icône à coté de l' heure dans la barre des tâches doit être présent.
ATTENTION : A noter ici que OpenOffice est installé impérativement sous c:\ooo (quelle que soit la version de Ooo) ,
pour des raisons encore de normalité, de simplification de la variable d' environnement CLASSPATH .
Pourquoi ?
Ooo écoute sur un port particulier pour répondre aux requêtes qui lui sont formulées.Par défaut le 8100.
Pour mettre cette fonctionnalité en route il faut modifier le fichier qui se trouve sous :
c:/ooo/share/config/registry/instance/org/openoffice/Setup.xml
Remplacer : <ooSetupConnectionURL cfg:type="string"/>
Avec :
<ooSetupConnectionURLcfg:type="string">socket,host=localhost,port=8100;urp;StarOffice.NamingService</ooSetupConnectionURL
>
Pour vérifier , lancer la commande suivante en mode Prompt :
netstat -a
résultat :
TCP pc-inf-xp:8100 pc-inf-xp:0 LISTENING
L' ouverture du document se fait en mode 'silencieuse', tout se fait sans rien voir à l' écran.Cette option est désactivable
pour le mode debug.

Présentation des Editions PastelV3 avec OpenOffice
16
P.O.S.F.I S ­ Sous-Etats ou Tableaux de valeurs
On parcours le fichier de fusion pour retrouver le nom des sous-états et récupérer les champs et les
valeurs de ces sous états.
On considère qu' il peut y avoir deux sous-états au maximum par modèle.Donc deux tableaux.
Les valeurs sont insérées dans le premier , puis le deuxième tableau.
Ceci permet une gestion assez souple des modèles.
Il n' y a que le modèle « DABULSIT.sxw » qui est particulier à cause des débiteurs, ceux-ci sont affichés
non pas comme une liste de valeurs (comme les quittances) mais comme du texte formaté d' une certaine
manière : On inclus donc 3 sous-modèles au modèle principal, çad qu' ils sont liés au Modèle.

Présentation des Editions PastelV3 avec OpenOffice
17
P.O.S.F.I F ­ Fusion
Insertion des valeurs des champs dans le modèle Ooo, ainsi que des valeurs des champs des tableaux de valeurs. Dans l'
ordre , on fusionne d' abord les champs utilisateurs puis les champs utilisateurs des tableaux.
Le programme parle de lui même !

Présentation des Editions PastelV3 avec OpenOffice
18
P.O.S.F.I I ­ Impression
Impression du document avec la prise en compte des copies multiples,
du nom de l' imprimante , et sortie du modèle sans enregistrement.

Présentation des Editions PastelV3 avec OpenOffice
19
P.O.S.F.I Exemple de sortie en mode Commande :
Debut du programme JAVA a :Wed Mar 26 09:15:59 CET 2003
Traitement Edition en cours ... Veuillez Patienter SVP
Debut Parsing a :Wed Mar 26 09:16:00 CET 2003
P
FIN = 52
FIN = 48
O
Debut Ouverture Modele a :Wed Mar 26 09:16:00 CET 2003
Debut Sous Etats - Tableaux a :Wed Mar 26 09:16:05 CET 2003
SE1 CHAMP_DEB
Pas de sous-etat No2
F
Debut Fusion a :Wed Mar 26 09:16:08 CET 2003
I
Debut Impression a :Wed Mar 26 09:16:10 CET 2003
FIN Programme JAVA a :Wed Mar 26 09:16:11 CET 2003

Présentation des Editions PastelV3 avec OpenOffice
20
CONCLUSION
Une efficacité, une
qualité, des
performances, qui sont
sans appel.

Présentation des Editions PastelV3 avec OpenOffice
21
CONCLUSION
Environ 4 secondes
pour une édition
comprenant plus de 150
champs, sur un PC
équipé de Win2000 pro
avec 256 Mo cadencé à
1,8Ghz, et ce sans
perturber l' utilisateur !!

Réalisé avec OpenOffice 1.1.3 Dernière Mise à Jour le : 11/03/05
Fin
de la
Présentation des Editions PastelV3
avec OpenOffice
Auteur: Xavier Poirier xpoirier@ch-bourg01.fr