//word模板路径
String inFile = rootPath+"报告.docx";
//word输出路径
String outFile = rootPath + "输出报告.docx";
XWPFDocument doc;
//params 参数
Map<String, String> params = new HashMap<String, String>();
params.put("titleOne","1、重新组织全科护理人员学习口服药的执行流程并作考核。\r2、加强病人安全管理相关制度的学习、提高安全生产意识。\r3、组长、护长加强制度落实的监管,持续跟进一周责任护士发放口服药的流程执行情况,并不定期进行随检。");
try {
InputStream is = new FileInputStream(inFile);
doc = new XWPFDocument(OPCPackage.open(is));
Set<Entry<String, String>> set = params.entrySet();
List<XWPFParagraph> list = doc.getParagraphs();
//para 要替换的段落
for(XWPFParagraph para:list){
List<XWPFRun> runs = para.getRuns();
for (int i=0; i<runs.size(); i++) {
XWPFRun run = runs.get(i);
if("".equals(replaceText(run.text(), set))){
run.setText(replaceText(run.text(), set),0);
}else{
String runText = replaceText(run.text(), set);
if(runText.indexOf("\r")>0) {
String[] text = runText.split("\r");
//直接调用XWPFRun的setText()方法设置文本时,在底层会重新创建一个XWPFRun,把文本附加在当前文本后面,
//所以我们不能直接设值,需要先删除当前run,然后再自己手动插入一个新的run。
para.removeRun(i);
run = para.insertNewRun(i);
for(int f=0;f<text.length;f++) {
if(f==0){
//此处不缩进因为word模板已经缩进了。
run.setText(text[f].trim());
}else{
run.addCarriageReturn();//硬回车
//注意:wps换行首行缩进是三个空格符,office要的话可以用 run.addTab();缩进或者四个空格符
run.setText(" "+text[f].trim());
}
}
//设置字体
run.setFontFamily("宋体");
//字体大小
run.setFontSize(12);
//行间距
run.setTextPosition(22);
}else {
run.setText(replaceText(run.text(), set),0);
run.setTextPosition(22);
}
}
}
}
OutputStream os = new FileOutputStream(outFile);
doc.write(os);
close(os);
close(is);
} catch (Exception e) {
throw e;
}
此文给java用poi操作word模板是出现不能换行的朋友一个建议,仅供参考。如有问题请留言。
POI根据word模板替换导出setText内容不能换行问题。
最新推荐文章于 2024-08-31 17:27:34 发布