Bonjour à tous, je débute en mailing list, j'espére bien m'y prendre, n'hésitez pas à me dire si je fais des erreurs. ^^
Je suis actuellement en train de découvrir la programmation en java couplée à OpenOffice. Je crée des fonctions pour manipuler des fichiers, je suis en train de travailler sur une fonction qui permet de fusionner des fichiers à partir d'un tableau d'url. J'ai trouvé pour ce faire la fonction insertDocumentFromURL mais j'ai un problème de mise en forme. Je commence par créer un fichier vide puis j'y insert mes fichiers un par un en ajoutant un saut de page entre chaque insersion. Mon problème est le suivant : je perd mes marges et mon pied de page. J'ai remarqué qu'en partant d'un document existant à la place d'un document vide pour faire mes insertions, je conserve les marges et les pieds de page du document de base mais j'ai alors un soucis dans le cas de concaténation de fichiers qui ne sont pas basés sur la même mise en page. Pour éclairer un peu mon texte voici mon code : // Création des propriétés du document de travail temporaire PropertyValue[] propDepart = new PropertyValue[1]; propDepart[0] = new PropertyValue(); propDepart[0].Name = "Hidden"; propDepart[0].Value = Boolean.TRUE; //Création du fichier temporaire sur lequel on fera les insertions XComponent xComp = xComponentLoader.loadComponentFromURL( "private:factory/swriter","_blank",0,propDepart); //On charge le fichier temporaire XTextDocument xTextDoc = (XTextDocument)UnoRuntime.queryInterface(XTextDocument.class, xComp); XText xText=null; XTextCursor xTextCursor=null; XTextRange xTextRange=null; XPropertySet xPropertySet=null; //On crée un curseur permettant le parcourt de ce document xText = xTextDoc.getText(); xTextCursor = xText.createTextCursor(); //On insert le fichier courant de la liste des fichiers dans le fichier de travail temporaire (en fin de fichier) XDocumentInsertable xDocInsert = (XDocumentInsertable) UnoRuntime.queryInterface(XDocumentInsertable.class, xTextCursor); try { //On parcourt la liste des fichiers à fusionner for(int i=0;i<listeFichiers.length;i++){ //On place le curseur à la fin du document xTextCursor.gotoEnd(false); // On insert le séparateur des deux documents xTextCursor.getText().insertControlCharacter(xTextCursor,com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, false); //On place le curseur à la fin du document xTextCursor.gotoEnd(false); if(i!=0){ //On crée la propriété permettant le saut de page xPropertySet = (com.sun.star.beans.XPropertySet) UnoRuntime.queryInterface(com.sun.star.beans.XPropertySet.class ,xTextCursor); //On fait le saut de page xPropertySet.setPropertyValue("BreakType" ,com.sun.star.style.BreakType.PAGE_AFTER); //On place le curseur à la fin du document xTextCursor.gotoEnd(false); //On insert un séparateur xTextCursor.getText().insertControlCharacter(xTextCursor,com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, false); } //On place le curseur à la fin du document xTextCursor.gotoEnd(false); //On insert le document xDocInsert.insertDocumentFromURL("file:///" +listeFichiers[i], new PropertyValue[0]); //On place le curseur à la fin du document xTextCursor.gotoEnd(false); } } Je pense que la fin de paragraphe et le saut de page ne suffisent pas à séparer deux documents pour séparer deux mises en page différentes. En manipulant OpenOffice j'ai vu qu'il y avait moyen de créer des sections avec chacune sa propre mise en page, je suppose qu'il est donc possible de créer des sections avant de faire l'insertion de chaque document. Mais je n'ai pas trouvé comment faire et surtout comment récupérer la mise en page d'un document pour la réinsérer. Quelqu'un aurait-il une solution pour conserver les marges et pieds de pages de mes documents ? en utilisant les sections ou même en faisant la fusion d'une autre façon.