3 messages in org.openoffice.fr.progRe: [prog] Fermeture de document
FromSent OnAttachments
Pascal RobertJul 13, 2006 7:14 am 
Pascal RobertJul 13, 2006 8:49 am 
Bernard MarcellyJul 17, 2006 4:48 am 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:Re: [prog] Fermeture de documentActions...
From:Pascal Robert (prob@os.ca)
Date:Jul 13, 2006 8:49:32 am
List:org.openoffice.fr.prog

Il semble que mon problème soit relié à l'impression, si je commentes le bout de code qui utilise XPrintable, les documents se ferment correctement.

J'ai quelques difficultés à fermer le résultat d'une fusion, lors de l'appel à XCloseable.close(), on me répond « Controller disagree » :-/ Et si je vais sur le serveur OOo, le document n'a pas été sauvegardé (malgré un appel à .store()) et il est encore ouvert dans Writer. Voici le code :

// Ouverture des documents fusionnés pour les imprimer, nous supprimeons les fichiers à mesure qu'ils sont imprimés. try { fichiers = repertoireDocumentsFusion.listFiles(); for (int iterateur = 0; iterateur < fichiers.length; iterateur++) { File fichier = fichiers[iterateur]; if (fichier.getName().endsWith(_ExtensionDocument)) { PropertyValue[] loadProps = new PropertyValue[0]; XComponent xComponent = mxComponentLoader.loadComponentFromURL(_url(fichier), "_blank", 0, loadProps); XTextDocument xDoc = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, xComponent);

XPrintable xPrintable = (XPrintable)UnoRuntime.queryInterface(XPrintable.class, xDoc); PropertyValue[] printerDesc = new PropertyValue[1]; printerDesc[0] = new PropertyValue(); printerDesc[0].Name = "Name"; printerDesc[0].Value = nomImprimante; xPrintable.setPrinter(printerDesc); PropertyValue[] printOpts = new PropertyValue[0]; PropertyValue[] props = xPrintable.getPrinter(); xPrintable.print(printOpts);

XStorable templateStore = (XStorable) UnoRuntime.queryInterface(XStorable.class, xDoc); templateStore.store();

com.sun.star.util.XCloseable fermDocFusion = (com.sun.star.util.XCloseable) UnoRuntime.queryInterface(com.sun.star.util.XCloseable.class, xDoc); if (xComponent != null) { if (fermDocFusion != null) { try { fermDocFusion.close(false); } catch(com.sun.star.util.CloseVetoException exCloseVeto) { /* C'est ici que j'ai une erreur disant que le controlleur n'est pas d'accord*/ System.out.println(exCloseVeto.getMessage()); } } } else { XComponent xDisposeable = (XComponent)UnoRuntime.queryInterface(XComponent.class,xDoc); xDisposeable.dispose(); } } } } catch(java.lang.Exception exception) { throw new ServeurOpenOffice.Exception("Erreur lors de l'impression du document fusionné sur la queue « " + nomImprimante + " ».", exception); } // catch

L'impression se fait correctement, et si je fermes le document manuellement dans Writer, celui-ci me dit que le document a été modifié, donc il n'a pas été enregistré par le .store() :-/ Pourtant, dans mon code ailleurs, j'ouvre un gabarit pour le modifier et le stocker avec storeAsURL et ça fonctionne. Est-ce que c'est un bogue dans la fonction store() ??

OOo 2.03 sur Mac OS X