关于POIword换行问题,网上好多都是C+V的用起来各种报错,,其实很简单 只要使用addCarriageReturn()硬回车 addBreak()软回车即可
this.para.insertNewRun(i).setText("换行换行"); this.para.insertNewRun(i).addCarriageReturn();//硬回车
this.para.insertNewRun(i).addBreak();//软回车
this.para.insertNewRun(i).setText(runText);
只不过这里这个换行感觉是相反的,,出来的结果是(
runText
<换行符>
换行换行
/**
* 替换变量
* @param para 要替换的段落
* @param params 参数
*/
private void replaceInPara(XWPFParagraph para, Map<String, Object> params) {
List<XWPFRun> runs;
Matcher matcher;
if (matcher(para.getParagraphText()).find()) {
runs = para.getRuns();
for (int i=0; i<runs.size(); i++) {
XWPFRun run = runs.get(i);
String runText = run.toString();
matcher = matcher(runText);
if (matcher.find()) {
while ((matcher = this.matcher(runText)).find()) {
runText = matcher.replaceFirst(String.valueOf(params.get(matcher.group(1))));
}
//直接调用XWPFRun的setText()方法设置文本时,在底层会重新创建一个XWPFRun,把文本附加在当前文本后面,
//所以我们不能直接设值,需要先删除当前run,然后再自己手动插入一个新的run。
System.out.println(runText);
if(runText.indexOf("\n")>-1) {
String[] text = runText.split("\n");
this.para.removeRun(i);
for(int f=text.length-1;f>=0;f--) {
System.out.println(f);
this.para.insertNewRun(i).setText(text[f]);
if(f!=0) {
this.para.insertNewRun(i).addCarriageReturn();//硬回车
}
}
}else {
this.para.removeRun(i);
this.para.insertNewRun(i).setText(runText);
}
}
}
}
}
一如既往地写代码留备用