针对WordUtils不能替换同行多占位符的情况

更换表格内容采取以下方法

WordUtils更换表格中同行多占位符,目前本人没有时间优化这部分内容,所以直接采取了替换方法的行为,请各位见谅


private static void parseTable(XWPFTable table, Map<String, Object> dataMap) {
        Map<String, String> source = (Map<String, String>) dataMap.get("source");
        log.info(source.keySet().toString()); //可能为null 所以转字符串
        Map<String, Object> imageMap = (Map<String, Object>) dataMap.get("${image}"); // 这块儿内容我采取过image,但效果不太好,直接使用了${image}
        log.info(imageMap.keySet().toString());
        int count = 0;
        log.info("所有key : " + dataMap.keySet().toString());
        for (XWPFTableRow row : table.getRows()) { // 行
            for (XWPFTableCell cell : row.getTableCells()) { // 单元格
                for (XWPFParagraph p : cell.getParagraphs()) {  // 段落
                    for (XWPFRun run : p.getRuns()) {
                        String text = run.getText(0);
                        log.info("等待替换文字: " + text);
                        for (String s : dataMap.keySet()) {
                            log.info("当前key:" + s);
                            if (s.equals("source") && !source.isEmpty()) { //替换文本内容
                                String value = "";
                                for (String key : source.keySet()) {
                                    if (text != null && text.contains(key)) {
                                        value = text.replace(key, source.get(key));
                                        log.info("替换后文字:" + text);
                                        run.setText(value, 0);
                                    }
                                }
                            }
                            if (text != null && text.contains("${image}") && !imageMap.isEmpty()) { //替换图片
                                if (count == 1) {
                                    break; // 因为会循环访问key,而我所需操作当中只需要一张图片,所以计数为1不进入替换
                                }
                                run.setText("", 0); //清空段落文字内容,方便填充图片
                                // 获取元素
                                int width = (int) imageMap.get("width");
                                int height = (int) imageMap.get("height");
                                int picType = getPictureType((String) imageMap.get("type"));
                                byte[] bs = (byte[]) imageMap.get("con");
                                String fileName = (String) imageMap.get("fileName");
                                try {
                                    // 写入图片
                                    run.addPicture(new ByteArrayInputStream(bs), picType, fileName, width, height);
                                    log.info("写入完成");
                                    count++;
                                } catch (Exception e) {
                                    e.printStackTrace();
                                    log.info("图片写入失败");
                                }
                            }
                        }
                    }
                }
            }
        }
    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值