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

在XWPFDocument中的段落内插入换行符

岳凯康
2023-03-14

我正在使用apache poi 3.8将值写入word模板。我将word文件中的特定字符串(键)替换为所需的值,例如,word文档中有一个包含键%entry1%的段落,我想将其替换为“entry text line1\n new line”。在我的实现中,所有被替换的键和值都存储在一个地图中。

Map<String, String> replacedElementsMap;

HWPFDocument的代码为:

Range range = document.getRange();
for(Map.Entry<String, String> entry : replacedElementsMap.entrySet()) {
            range.replaceText(entry.getKey(), entry.getValue());
}

这段代码工作得很好,我只需要在输入字符串中添加\n作为换行符。但是,我找不到类似的XWPFDocument方法。XWPFDocument的当前代码是:

List<XWPFParagraph> xwpfParagraphs = document.getParagraphs();
for(XWPFParagraph xwpfParagraph : xwpfParagraphs) {
            List<XWPFRun> xwpfRuns = xwpfParagraph.getRuns();
            for(XWPFRun xwpfRun : xwpfRuns) {
                String xwpfRunText = xwpfRun.getText(xwpfRun.getTextPosition());
                for(Map.Entry<String, String> entry : replacedElementsMap.entrySet()) {
                    if (xwpfRunText != null && xwpfRunText.contains(entry.getKey())) {
                        xwpfRunText = xwpfRunText.replaceAll(entry.getKey(), entry.getValue());
                    }
                }
                xwpfRun.setText(xwpfRunText, 0);
            }
        }

现在“\n”-字符串不会导致回车,如果我使用xwpfrun.addCarriageReturn();,我只会在段落后面得到一个换行符。我应该如何正确地在xwpf中创建新行?

共有1个答案

龙智
2023-03-14

我有另一个解决方案,而且更容易:

            if (data.contains("\n")) {
                String[] lines = data.split("\n");
                run.setText(lines[0], 0); // set first line into XWPFRun
                for(int i=1;i<lines.length;i++){
                    // add break and insert new text
                    run.addBreak();
                    run.setText(lines[i]);
                }
            } else {
                run.setText(data, 0);
            }
 类似资料:
  • 我正在对一个。docx文件进行搜索和替换,在某些情况下,替换文本包含换行符。我已经尝试了几种技巧。第一种方法是将替换文本分成几行,并执行以下操作: 结果全部运行在单行上。 在光标位置添加一个新段落。光标必须位于文档主体子元素的XMLCursor.TokentYPE.Start标记上。完成此方法后,作为参数传递的游标将指向新插入段落的XMLCursor.TokentYPE.End。 我已经仔细检查了

  • 1. 段落的前后必须是空行: 空行指的是行内什么都没有,或者只有空白符(空格或制表符) 相邻两行文本,如果中间没有空行 会显示在一行中(换行符被转换为空格) 2. 如果需要在段落内加入换行(<br>): 可以在前一行的末尾加入至少两个空格 然后换行写其它的文字 3. Markdown 中的多数区块都需要在两个空行之间。

  • 一个 Markdown 段落是由一个或多个连续的文本行组成,它的前后要有一个以上的空行(空行的定义是显示上看起来像是空的,便会被视为空行。比方说,若某一行只包含空格和制表符,则该行也会被视为空行)。普通段落不该用空格或制表符来缩进。 「由一个或多个连续的文本行组成」这句话其实暗示了 Markdown 允许段落内的强迫换行(插入换行符),这个特性和其他大部分的 text-to-HTML 格式不一样(

  • 在Angular中,我需要从包含换行符的文本块中生成一系列段落元素? 我可以想出几种方法来做到这一点。然而,我想知道是否有一种“官方”的角度方法,或者在AngularJS的背景下,最优雅的方法是什么。 发件人: Lorem ipsum dolor sit amet,concetetuer adipiscing elit。\我的名字叫尤伊斯莫德·丁奇登,名字叫拉奥里特·多洛尔。\n 大aliquam

  • 问题内容: 在Angular中,我需要从包含换行符的文本块中生成一系列段落元素吗? 我可以想到几种方法来做到这一点。但是我想知道是否有一种“官方的” Angular方法,或者在AngularJS上下文中最优雅的方法是什么? 一个例子 从: Lorem ipsum dolor坐下来,管教着迷。\ n Sed diam nonummy nibh euismod tincidunt ut laoreet

  • 我一直试图填充一个word模板(.docx)文件,其中有需要替换的占位符。 我能够重写模板,但是文本没有换行符,我知道回车或新行(\r\n)在.docx文件中不起作用。我使用VariableReplace方法进行转换,但是在使用变量replace时无法放置br或factory.createbr()。 任何建议都会很有帮助。下面是我尝试的一段代码