当前位置: 首页 > 知识库问答 >
问题:

在docx4j的VariableReplace中插入换行符

束高雅
2023-03-14

我一直试图填充一个word模板(.docx)文件,其中有需要替换的占位符。

我能够重写模板,但是文本没有换行符,我知道回车或新行(\r\n)在.docx文件中不起作用。我使用VariableReplace方法进行转换,但是在使用变量replace时无法放置br或factory.createbr()。

任何建议都会很有帮助。下面是我尝试的一段代码

    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;

共有1个答案

李凯定
2023-03-14

杰森的链接死了。以下是当前链接:https://github.com/plutext/docx4j/blob/master/docx4j-samples-docx4j/src/main/java/org/docx4j/sample/variableReplace.java

如果将来发生更改,只需使用以下函数并将其应用于包含换行符的字符串:

/**
 * Hack to convert a new line character into w:br.
 * If you need this sort of thing, consider using 
 * OpenDoPE content control data binding instead.
 *  
 * @param r
 * @return
 */
private static String newlineToBreakHack(String r) {

    StringTokenizer st = new StringTokenizer(r, "\n\r\f"); // tokenize on the newline character, the carriage-return character, and the form-feed character
    StringBuilder sb = new StringBuilder();
    
    boolean firsttoken = true;
    while (st.hasMoreTokens()) {                        
        String line = (String) st.nextToken();
        if (firsttoken) {
            firsttoken = false;
        } else {
            sb.append("</w:t><w:br/><w:t>");
        }
        sb.append(line);
    }
    return sb.toString();   
}
 类似资料:
  • 在新的DOCX中,我的XML如下所示: 所以我不知道如何将第二行设置到第一行的相同位置?

  • 这就是我现在的代码,我试着放入“\n”、“ ”和“ ”,但都不起作用,现在我放入“\n”只是为了明确我想在哪里换行: 我的返回值放在mappingDocsVariable中,然后用以下代码生成docx文件:

  • 我正在使用apache poi 3.8将值写入word模板。我将word文件中的特定字符串(键)替换为所需的值,例如,word文档中有一个包含键%entry1%的段落,我想将其替换为“entry text line1\n new line”。在我的实现中,所有被替换的键和值都存储在一个地图中。 HWPFDocument的代码为: 这段代码工作得很好,我只需要在输入字符串中添加\n作为换行符。但是,

  • 如何在React Native中的文本组件中插入换行符? 我在这里检查了我的问题。 但我的情况有点不同。 所以它不能以这种方式工作。 这是我的容器代码,它为ContactInfo提供了道具。 这是子组件。它接收道具作为接触 finllay,它给出了结果“名称”。 我希望 但它给了大卫·约翰·韦德。 我无法将和'放入子组件中,因为那只有一行。 我如何解决这个问题?

  • Word显示图像有问题。我真的不知道问题出在哪里