Réponse acceptée !
J'ai trouvé la solution à mes problèmes.
Liens utiles : http://api.openoffice.org/docs/DevelopersGuide/OfficeBean/OfficeBean.xhtml http://www.developpez.net/forums/archive/index.php/t-66777.html
Voici un exemple de comment accéder aux champs utilisateur d'un document openOffice :
/** * Cette classe permet de charger un document et de récupérer les champs utilisateur. * Elle modifie le contenu du champ nommé "exemple" par le texte "champ modifié". */ public class Exemple { /** * @param args */ public static void main(String[] args) { // Chargement du document (en local : 127.0.0.1)
String[] argsn = new String[] { "uno:socket,host=127.0.0.1,port=8100;urp;StarOffice.ServiceManager", "file:///C:/exemple.ott" }; try { XComponentContext xcomponentcontext = com.sun.star.comp.helper.Bootstrap.createInitialComponentContext(null); // 1 XMultiComponentFactory xmulticomponentfactory = xcomponentcontext.getServiceManager(); // 2 Object objectUrlResolver = xmulticomponentfactory.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", xcomponentcontext); // 3 XUnoUrlResolver xurlresolver = (XUnoUrlResolver)UnoRuntime.queryInterface(XUnoUrlResolver.class, objectUrlResolver); // 4 Object objectInitial = xurlresolver.resolve(argsn[0]); // 5 xmulticomponentfactory = (XMultiComponentFactory) UnoRuntime.queryInterface( XMultiComponentFactory.class, objectInitial); // 6 XPropertySet xpropertysetMultiComponentFactory = (XPropertySet) UnoRuntime.queryInterface( XPropertySet.class, xmulticomponentfactory); // 7 Object objectDefaultContext = xpropertysetMultiComponentFactory.getPropertyValue("DefaultContext"); // 8 xcomponentcontext = (XComponentContext)UnoRuntime.queryInterface( XComponentContext.class, objectDefaultContext); // 9 Object xdesktop = xmulticomponentfactory.createInstanceWithContext("com.sun.star.frame.Desktop", xcomponentcontext); // 10 XComponentLoader xcomponentloader = (XComponentLoader) UnoRuntime.queryInterface( XComponentLoader.class, xdesktop); // 11 XComponent xcomp = xcomponentloader.loadComponentFromURL( argsn[1], "_blank", 0, new PropertyValue[0]); // 12 /* MAJ du champ nommé "exemple" */ setUserFieldExemple(xcomp); System.exit(0); } catch(Exception exception) { System.err.println(exception); } catch(java.lang.Exception e) { e.printStackTrace(); } }
// Exemple de méthode pour modifier un champ public static void setUserFieldExemple(XComponent xcomp) { // getting the text document object XTextDocument textDoc = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, xcomp);
XTextFieldsSupplier xTextFieldsSupplier = (XTextFieldsSupplier) UnoRuntime.queryInterface(XTextFieldsSupplier.class, textDoc); XEnumerationAccess xEnumeratedFields = xTextFieldsSupplier.getTextFields(); XNameAccess xNamedFieldMasters = xTextFieldsSupplier.getTextFieldMasters(); String sName = "com.sun.star.text.FieldMaster.User." + "exemple"; // Accès au field master try { Object fieldMaster = xNamedFieldMasters.getByName(sName); // On récupère l'interface XPropertySet pour modifier le contenu du champ XPropertySet xPropertySet = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, fieldMaster); // Modification du contenu xPropertySet.setPropertyValue("Content", "champ modifié"); } catch(NoSuchElementException ... // Il faut ensuite rafraichir la collection de champs texte XRefreshable xRefreshable = (XRefreshable) UnoRuntime.queryInterface(XRefreshable.class, xEnumeratedFields); xRefreshable.refresh(); } }
Cependant, il faut auparavant faire une mise a jour d'un fichier d'openOffice :
OpenOffice écoute sur le port 8100. * On spécifie cela dans le fichier OOoBasePath\share\registry\data\org\openoffice\Setup.xcu. * Il faut ajouter les lignes suivantes : * * <prop oor:name="ooSetupConnectionURL" oor:type="xs:string"> * <value>socket,host=localhost,port=8100;urp;StarOffice.ServiceManager</value> * </prop> * * Juste après cette ligne-ci : * * <node oor:name="Office">
|