java word加粗_java word文档进行填充使用 ${xxx} 的形式

该博客介绍了利用Java的POI工具,通过模板生成Word文档的方法。定义了POIUtilsTemplate2Word方法,接收字段映射、模板输入流和输出流作为参数,处理文本和图片替换,最终将生成的文档写入输出流。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*** 利用模板生成word文档

*@paramfiledValueMap 对应的字段 key - value 形式, 如果value是 inputstream 我们认为是图片, 并且是png的, 否则都会转成string

*@paraminputStream 模板输入流

*@paramoutputStream 输出流

*@throwsIOException

*@throwsInvalidFormatException*/

public static void POIUtilsTemplate2Word(MapfiledValueMap, InputStream inputStream, OutputStream outputStream)throwsIOException, InvalidFormatException {final XWPFDocument document = newXWPFDocument(inputStream).getXWPFDocument();

List paragraphList =document.getParagraphs();

List filedList =Lists.newArrayList();

List valueList =Lists.newArrayList();

List filedInputStream =Lists.newArrayList();

List valueInputStream =Lists.newArrayList();

filedValueMap.forEach((filed, value)->{final String filedKey = String.format("${%s}", filed);if (value instanceofInputStream) {

filedInputStream.add(filedKey);

valueInputStream.add(value);

}else{

filedList.add(filedKey);

valueList.add(String.valueOf(value));

}

});final String[] filedArray = filedList.toArray(newString[filedList.size()]);final String[] valueArray = valueList.toArray(newString[valueList.size()]);for(XWPFParagraph paragraph : paragraphList) {final List runs =paragraph.getRuns();final String text =paragraph.getText();

String runText=StringUtils.replaceEach(text, filedArray, valueArray);if (CollectionUtils.size(runs) > 0) {//为了 解决 POI 中 runs 分段错误问题, 他大爷的

for (int i = 0; i < runs.size(); i ++) {//是否包含图片

final int index = StringUtils.indexOfAny(text, filedInputStream.toArray(newString[filedInputStream.size()]));if (index > -1 && i == 0) {final XWPFRun run =runs.get(i);/*** 修改sonar问题,这个for循环只循环一次,所以直接取第一个 2020/06/05*/run.addPicture((InputStream) valueInputStream.get(0), HSSFPicture.PICTURE_TYPE_PNG, "file",

Units.toEMU(100), Units.toEMU(50));//for (int filedIndex = 0; filedIndex < filedInputStream.size(); filedIndex++)//{//run.addPicture((InputStream) valueInputStream.get(filedIndex),//HSSFPicture.PICTURE_TYPE_PNG,//"file", Units.toEMU(100), Units.toEMU(50));//break;//}

} else{

runs.get(i).setText(i== 0 ? runText : "", 0);

}

}

}

}

document.write(outputStream);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值