1. 普通的段落文字换行
这种方式是网上拥有方案最多的一种情况,大多就是利用run.addBreak()方式来做中断 以下是代码示例
/**
* 段落/n替换成换行符
*
* @param value
* @param paragraph
* @param run
*/
public static void setWrap(Object value, XWPFParagraph paragraph, XWPFRun run) {
if (((String) value).indexOf("\n") > 0) {
//设置换行
String[] text = value.toString().split("\n");
paragraph.removeRun(0);
run = paragraph.insertNewRun(0);
for (int f = 0; f < text.length; f++) {
if (f == 0) {
//此处不缩进因为word模板已经缩进了。
run.setText(text[f].trim());
run.setFontSize(12);
} else {
run.addCarriageReturn();//硬回车
//注意:wps换行首行缩进是三个空格符,office要的话可以用 run.addTab();缩进或者四个空格符
run.setText(text[f].trim());
run.setFontSize(12);
}
}
} else {
run.setText((String) value);
}
}
但以上代码对于以下第二种情况会不起作用
2.word 中 的 table 表格的cell 文字换行
这种情况网上也有解决方案,但自己试过各种方案不生效
先说下不生效的地方
XWPFTableCell.setText("1.aaaaaaaa\n 2.bbbbbbbbb");
设置完这个值之后发现 XWPFTableCell.getText() 怎么也没取出这个值
无奈之下,读源码吧,看看源码的做法。
流程大概:创建段落对象,创建run设置值 按着样来看,没啥问题啊,怪就怪在这个方法得到的runs ,iruns 的size 都是0 ,所以也不纠结了,直接模拟他的程序流程做就好了 代码如下:
public static void addBreakInCell(XWPFTableCell cell, String value) { if (!StringUtils.isEmpty(value) && value.contains("\n")) { String[] valueSplit = value.split("\n"); for (int i = 0; i < valueSplit.length; i++) { //创建表格段落 cell.getXWPFDocument().createParagraph(); XWPFParagraph paragraph = cell.getParagraphs().get(0); XWPFRun run = paragraph.createRun(); run.setText(valueSplit[i]); if (i < valueSplit.length - 1) { run.addBreak();//中断 } paragraph.addRun(run); } } }
这样测试完之后就解决了此类问题!