java poi word模板替换段落的换行显示

在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);
                	}
                }
            }
        }

效果如下:
在这里插入图片描述

评论 44
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值