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

--
Pascal Robert
Spécialiste en informatique/IT Specialist
OS communications informatiques inc.
+1 450 676-1238 x28
http://www.os.ca
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Répondre à