1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > POI对Word docx文件进行替换数据后字体样式改变问题记录

POI对Word docx文件进行替换数据后字体样式改变问题记录

时间:2019-12-13 17:11:24

相关推荐

POI对Word docx文件进行替换数据后字体样式改变问题记录

最近新增一个需求,需要对word模板内容进行替换,一开始用的是word03版的doc,替换起来比较简单,主要是range对像替换非常方便,而且可以保留替换前的字体样式,但是word里包含了图片,需要同时保存一张png图片,对于jpg的图片是可以的,但是png的显示不出来,改为操作的文档,07版的没有了Range,使用XWPFParagraph和XWPFRun来操作。XWPFParagraph表示段落,有的word里有表格内容,需要使用XWPFTable来处理,与段落区分开来处理。

接下来就是创建了一个word模板,然后根据这个模板循环写入数据,这里就会涉及到占位符的替换操作,替换的基本思想就是:

1、调用XWPFParagraph.removeRun删除原有数据

2、使用XWPFParagraph.insertNewRun插入数据遇到的问题是替换后的文字并没有按照word模板中设计的文字样式来输出,导致产生这个问题的原因在于XWPFRun是有格式的,我们删除了XWPFRun,但是没有按照删除钱的XWPFRun的样式设置XWPFRun,这样就会导致输出到word中出现了样式问题,由于仅仅是文字替换,这里的样式就涉及到字体大小以及字体集,通过下面的代码就可以实现:

XWPFRun newRun = para.insertNewRun(i);newRun.setFontFamily(fontFamily); //删除的XWPFRun 对应的字体集,比如宋体、仿宋等newRun.setFontSize(fontSize); //删除的XWPFRun 对应的字体大小newRun.setText(runText);

上面是参考了一个博主的记录,但是实际没有替换成功。

最后解决办法:

//直接调用XWPFRun的setText()方法设置文本时,在底层会重新创建一个XWPFRun,把文本附加在当前文本后面,//所以我们不能直接设值,需要先删除当前run,然后再自己手动插入一个新的run。//para.insertNewRun(0).setText(runText);//新增的没有样式XWPFRun run = para.createRun();run.setText(runText,0);run.setFontSize(fontSize);run.setUnderline(underlinePatterns);run.setFontFamily("仿宋");//字体run.setFontSize(16);//字体大小

最后附上已经测试好的工具类,方便大家使用

JAVA使用POI对Word docx模板文件替换数据工具类_常雪恨的博客-CSDN博客

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。