【无标题】

本文介绍了一个使用Java库XWPFDocument进行文档段落替换的方法,同时提供了在遇到解析异常时的处理策略,包括文本和图片替换,以及异常捕获和图片插入。
摘要由CSDN通过智能技术生成

JAVA使用XWPFDocument进行段落替换,分段异常解决方案

public static void changeParagraph(XWPFDocument document, Map<String, Object> textMap) {
        //获取段落集合
        List<XWPFParagraph> paragraphs = document.getParagraphs();

        for (XWPFParagraph paragraph : paragraphs) {
        //debug时候出现解析异常,将需要替换的文本先复制到记事本,然后整块复制到word里面
            List<XWPFRun> runs = paragraph.getRuns();
            for (XWPFRun run : runs) {
                String text = run.getText(0);
                //判断文本是否需要进行替换
                if (checkText(text)) {
                    for (Map.Entry<String, Object> entry : textMap.entrySet()) {
                        //匹配模板与替换值 格式${key}
                        String key = "${" + entry.getKey() + "}";
                        Object value = entry.getValue();

                        if (text.contains(key)) {
                            if (value instanceof String) { //文字替换
                                text = text.replace(key, (String) value);
                            } else if (value instanceof Map) { //图片替换
                                text = text.replace(key, "");
                                Map picMap = (Map) value;
                                int width = Integer.parseInt(picMap.get("width").toString());
                                int height = Integer.parseInt(picMap.get("height").toString());
                                int picType = getPictureType(picMap.get("type").toString());
                                byte[] byteArray = (byte[]) picMap.get("content");
                                ByteArrayInputStream byteInputStream = new ByteArrayInputStream(byteArray);
                                try {
                                    String blipId = document.addPictureData(byteInputStream, picType);
                                    int id = document.getNextPicNameNumber(picType);
                                    XWPFUtils.createPicture(id, blipId, width, height, run);
                                } catch (Exception e) {
                                    e.printStackTrace();
                                }
                            }
                        }
                    }
                    //替换模板原来位置
                    run.setText(text, 0);
                }
            }
        }
    }

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值