docx4j rechercher et remplacer

J'ai docx document avec quelques espaces réservés. Maintenant, je dois les remplacer par d'autres et d'enregistrer de nouveaux documents docx. J'ai commencé avec docx4j et trouvé cette méthode:

public static List<Object> getAllElementFromObject(Object obj, Class<?> toSearch) {
    List<Object> result = new ArrayList<Object>();
    if (obj instanceof JAXBElement) obj = ((JAXBElement<?>) obj).getValue();

    if (obj.getClass().equals(toSearch))
        result.add(obj);
    else if (obj instanceof ContentAccessor) {
        List<?> children = ((ContentAccessor) obj).getContent();
        for (Object child : children) {
            result.addAll(getAllElementFromObject(child, toSearch));
        }
    }
    return result;
}

public static void findAndReplace(WordprocessingMLPackage doc, String toFind, String replacer){
    List<Object> paragraphs = getAllElementFromObject(doc.getMainDocumentPart(), P.class);
    for(Object par : paragraphs){
        P p = (P) par;
        List<Object> texts = getAllElementFromObject(p, Text.class);
        for(Object text : texts){
            Text t = (Text)text;
            if(t.getValue().contains(toFind)){
                t.setValue(t.getValue().replace(toFind, replacer));
            }
        }
    }
}

Mais qui ne fonctionnent que rarement parce que généralement les espaces réservés divise sur plusieurs textes s'exécute.

J'ai essayé UnmarshallFromTemplate mais ça marche rarement.

Comment ce problème pourrait être résolu?

OriginalL'auteur luckyi | 2013-10-30