Search code examples
docx4j

Insert line breaks in VariableReplace in docx4j


I have been trying to fill up a word template(.docx) file which has placeholders which needs to be replaced.

I was able to rewrite the template but the text does not come with line breaks I understand that carriage return or new line (\r\n) does not work in .docx files. I used the VariableReplace method to convert but I was unable to place br or factory.createBr() while using the variable replace.

Any suggestions would be really helpful. Below is the piece of code what i tried

    Map<String,String> variableReplaceMap = new HashMap<>();
    Map<String, String> textContent = readTextContentAfterDBExtractionToFillUpTemplate();
    ObjectFactory factory = Context.getWmlObjectFactory();
    P para = factory.createP();
    R rspc = factory.createR();

    String power= textContent.get("Power & Energy");
    String[] powerWithNewLine = skills.split("\\\\n");
    for (String eachLineOfPower : powerWithNewLine) {

        Text eachLineOfPowerTxt = factory.createText();
        eachLineOfPowerTxt .setValue( eachLineOfPower );
        rspc.getContent().add( eachLineOfPowerTxt );
        Br br = factory.createBr(); 
        rspc.getContent().add(br);
        para.getParagraphContent().add(rspc);
        documentPart.addObject(para);
    }
    String str = "";
    for (Object eachLineOfPgrph : para.getParagraphContent()) {
        str = str + eachLineOfPgrph;
    }
    variableReplaceMap.put("POWER", str);
    return variableReplaceMap;

Solution

  • See newlineToBreakHack method at https://github.com/plutext/docx4j/blob/VERSION_11_5_0/docx4j-samples-docx4j/src/main/java/org/docx4j/samples/VariableReplace.java#L122