J'utilise Apache POI pour générer des fichiers docx à partir d'un modèle. Il ne semble pas y avoir un moyen évident de remplacer tout le texte dans un paragraphe et la documentation est assez rare. En ce moment, je suis capable de lire un document en faisant défiler ses paragraphes, puis en parcourant les passages de chaque paragraphe, puis en faisant défiler le texte de chaque passage ... Cela fonctionne plutôt bien et je peux remplacer le contenu d'un texte, mais mon Les espaces réservés pour les gabarits (exemple: <>) peuvent être divisés en plusieurs passages, ce qui le rend vraiment compliqué à trouver et à remplacer. Est-il possible de définir le contenu d'un XWPFParagraph? Ou au moins un moyen de zapper toutes les courses dans un paragraphe et créer mes propres courses?POI Apache: Remplacer le texte de paragraphe
Voici ce que j'ai jusqu'à présent:
public static void main(String[] args) {
InputStream fs = null;
try {
fs = new FileInputStream("C:\\sample1.docx");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
XWPFDocument doc = null;
try {
doc = new XWPFDocument(fs);
} catch (IOException e) {
e.printStackTrace();
}
for (int i = 0; i < doc.getParagraphs().length; i++) {
XWPFParagraph paragraph = doc.getParagraphs()[i];
paragraph.getCTP().getRArray().
// This will output the paragraph's contents.
System.out.println(paragraph.getParagraphText());
for (int j = 0; j < paragraph.getCTP().getRArray().length; j++) {
CTR run = paragraph.getCTP().getRArray()[j];
for (int k = 0; k < run.getTArray().length; k++) {
CTText text = run.getTArray()[k];
// This will output the text contents
System.out.println(text.getStringValue());
// And this will set its contents
text.setStringValue("Success!");
}
}
}
try {
doc.write(new FileOutputStream("C:\\output.docx"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}