在poi操作word模板进行数据替换时,会存在替换的段落需要换行的情况,由于传入的都是字符串,之前在网上搜索过一些处理方法都没有效果,如给字符串添加:“\r”,“\r\n”,"\n","char(11)。"然后只有考虑从代码层次解决这个问题了,实现的代码如下
在传入的字符串以“\r\n”为分段标志
Map<String, String> testMap = new HashMap<String, String>();
String requireStr = "测试需求是主要是整理测试焦点(包括一些界面、输入域、业务流程)";
requireStr+="\r\n可以说,测试需求是告诉你要测什么,而测试用例是告诉你怎么测。";
requireStr+="可以说,测试需求是告诉你要测什么,而测试用例是告诉你怎么测。";
requireStr+="可以说,测试需求是告诉你要测什么,而测试用例是告诉你怎么测。";
requireStr+="可以说,测试需求是告诉你要测什么,而测试用例是告诉你怎么测。";
requireStr+="\r\n可以说,测试需求是告诉你要测什么,而测试用例是告诉你怎么测。";
requireStr+="可以说,测试需求是告诉你要测什么,而测试用例是告诉你怎么测。";
requireStr+="可以说,测试需求是告诉你要测什么,而测试用例是告诉你怎么测。";
requireStr+="可以说,测试需求是告诉你要测什么,而测试用例是告诉你怎么测。";
requireStr+="可以说,测试需求是告诉你要测什么,而测试用例是告诉你怎么测。";
testMap.put("require", requireStr);
在代码中进行分解判断
//获取段落集合
List<XWPFParagraph> paragraphs = document.getParagraphs();
for (XWPFParagraph paragraph : paragraphs) {
//判断此段落时候需要进行替换
String text = paragraph.getText();
if(checkText(text)){
List<XWPFRun> runs = paragraph.getRuns();
for (XWPFRun run : runs) {
//替换模板原来位置
String value = changeValue(run.toString(), textMap);
//分段显示的情况
String[] values = value.split("\r\n");
if(values.length > 1) {
run.setText(values[0],0);
for (int i = 1; i < values.length; i++) {
//存在分段则新建一个run
XWPFRun newrun = paragraph.insertNewRun(i);
//copy样式
newrun.getCTR().setRPr(run.getCTR().getRPr());
//换行
newrun.addBreak();
//缩进
newrun.addTab();
newrun.setText(values[i]);
}
break;
}else {
run.setText(value,0);
}
}
}
}
效果如下: