Bonjour,
Je suis actuellement stagiaire en développement informatique. Mon projet de stage consiste en la création d’une application générant des documents MS Office Word 2007 (Office Open XML) en langage Groovy ou JAVA. Je réussi à remplacer les images correspondant au graphique, mais je ne parviens pas à substituer une clé du type $$$texteAsubstituer par une chaine de caractères. Ce que je parviens à faire de mieux est une concaténation à la suite de la clé.
Je parviens effectivement sans problème à parcourir chaque Paragraph du Document (xwpfDoc.getParagraphs(i)), par contre à l'étape suivante je ne parviens pas à parcourir les Run (je ne trouve pas de méthode du genre paragraph.getRuns()) . Ceci pose un problème pour substituer le mot clé par le texte de remplacement au bon endroit, car je ne parviens pas à utiliser le Run spécifique contenant le mot clé. Actuellement pour ajouter du texte au Paragraph, je fais :
...
HWPFRun unRun = paragraph.createRun();
unRun.setText(texteDeRemplacement);
...
Ceci ajoute le texte de remplacement dans un nouveau Run, à la suite des Run existant, dans le paragraphe contenant le mot clé. Pour que le mot clé n'apparaisse pas sur le document final, je l'ai placé en fin de Paragraph en police 1 et en couleur invisible. Cette méthode est très loin d'être élégante et pose des problèmes lors de la modification du document type par les utilisateurs finaux. Je ne trouve pas non plus de méthode de substitution de texte pour effectuer l'étape suivante.
Je ne trouve pas de méthode dans les API Apache POI (XWPF) permettant d'explorer les Run individuellement, par contre je trouve cette méthode dans les API Apache POI (HWPF) :
...
int numCharRuns = paragraph.numCharacterRuns();
for (int j = 0; j < numCharRuns; j++) {
CharacterRun charRun = paragraph.getCharacterRun(j);
text = charRun.text();
if (text.contains(key)) {
int start = text.indexOf(key);
charRun.replaceText(key, value, start);
}
}
...
Comment puis-je explorer et agir individuellement sur chaque Run d'un fichier docx, à l'aide des API Apache POI ou d'une autre librairie?
Je vous serrai très reconnaissant si vous pouviez me donner une piste ou un exemple me permettant d'atteindre mon but...
Par avance merci pour toute aide ou proposition.
---------------
When everything goes wrong, there's always chocolate!