POI读取word内容的疑问
两片内容相同的word,poi分割成XWPFRun集合的时候,发现相同的段落内容有空行。
word1打印的段落内容
word2打印的段落内容
代码如下
/**
替换段落中的内容
@param paragraphList 段落集合
@param param 要替换的内容map集合
@param doc CustomXWPFDocument对象
*/
public static void processParagraphs(List<XWPFParagraph> paragraphList,Map<String, Object> param,CustomXWPFDocument doc){
if(paragraphList != null && paragraphList.size() > 0){
for(XWPFParagraph paragraph:paragraphList){
List<XWPFRun> runs = paragraph.getRuns(); //段落集合
for (XWPFRun run : runs) {
String text = run.getText(0); //段落内容
System.out.println("text---->"+text);
if(text != null){
boolean isSetText = false;
for (Entry<String, Object> entry : param.entrySet()) {
String key = entry.getKey();
if(text.indexOf(key) != -1){
isSetText = true;
Object value = entry.getValue();
if (value instanceof String) {//文本替换
text = text.replace(key, value.toString());
break;
}
}
}
if(isSetText){
run.setText(text,0);
}
}
}
}
}
}
造成两次段落内容分割不同的情况我大致知道,word2每一行纯手打,word1复制过来的。但是有时候纯手打也会出现一个替换字符分行,或者多个替换字符在一行的情况。例如${AAA}${BBB} 被解析成了一个段落。
求大神,这个问题困惑了很久。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这个问题我也有遇到过,后来放弃使用XWPFRun了,换用别的方法
其实可以用另一种思路来做,就是先把para的text取出来,遍历map,把text里该替换的全部替换好,然后把runs里前面所有的text都换成空,把最后一个run的text换成替换后的para的text 就ok了
docx存储就是这样的,中间还可能有别的元素,模板替换可以试试XDOC,http://www.xdocin.com/office....