Sommaire d'un gros document généré automatiquement

Bonjour,

J'ai besoin de générer automatiquement un document de 140 pages à partir d'articles écrits en htlml.
Le document est produit directement dans le format ODF avec la bibliothèque ODFtoolkit, en java.
Il contient une table des matières qu'il faut rafraichir. Pour ce faire, en fin de traitement, je l'ouvre dans une instance OpenOffice.org (ou LibreOffice) en mode serveur, et je demande un reformatage et un rafraichissement des index. Il faut ensuite le sauvegarder en PDF.

Le problème, c'est que lorsqu'on appelle la méthode myDoc.reformat() (de l'interface XTextDocument) c'est un thread qui est lancé en parallèle, ce qui fait que le rafraichissement se fait trop tôt et la table des matières ainsi que la pagination sont fausses dans le PDF. Le reformatage demande au minimum 20 secondes.

Quelqu'un a-t-il déjà rencontré ce problème? Y a-t-il des solutions plus intelligente que de faire un sleep() de 30s, après avoir demandé le reformatage?

Merci d'avance pour vos suggestions,

Bien cordialement,

Ph.

Bonjour

pallart wrote

Le problème, c'est que lorsqu'on appelle la méthode myDoc.reformat()
(de l'interface XTextDocument) c'est un thread qui est lancé en
parallèle, ce qui fait que le rafraichissement se fait trop tôt et la
table des matières ainsi que la pagination sont fausses dans le PDF. Le
reformatage demande au minimum 20 secondes.

As-tu essayer de ne rafraîchir que l'index ? Du style:
thiscomponent.DocumentIndexes.getByIndex(0).update

Cordialement
Pierre-Yves

Bonjour,

Désolé pour cette réponse tardive, mais j'étais passé à un autre
problème plus lié à Java.

Oui, c'est comme ça que je déclenche l'actualisation de la table des
matières. Le problème, c'est que la mise à jour s'exécute bien avant que
le reformatage soit terminé.

Il faudrait que je puisse faire un "wait" du thread qui se charge du
formatage, mais je n'ai trouvé aucun moyen de capturer ce thread.

Pour le moment je fais une pause de 30s, parce qu'il s'agit d'un
document de 140 pages, mais je ne pourrai pas généraliser cette solution
parce que 99% des documents font moins de 10 pages, et les utilisateurs
vont râler.

L'idéal, ce serait que la méthode reformat() retourne le thread.
Actuellement elle ne retourne rien.

Merci pour ta réponse,

Ph.

Bonjour

pallart wrote

Le problème, c'est que la mise à jour s'exécute bien avant que
le reformatage soit terminé.

Oui j'avais compris... ce que je me demandais c'est si le reformatage
était nécessaire, si la mise à jour de l'index ne suffisait pas.

Autre piste : maj de l'index, enregistrer une copie du document et faire
l'export pdf de cette copie.

Cordialement
Pierre-Yves