POI 替换docx中的文字和图片

参考文档:链接

1. 修改docx文件,给要替换的内容命名

替换为文字:{{name}}
替换为图片:{{@image}}

D:/ old.docx
在这里插入图片描述

2. 代码部分

步骤:

  1. 创建map集合将要替换的内容写入
  2. 处理图片
  3. 替换docx文件
  4. 写到硬盘中
public class ReplaceDocx {
    // 替换docx文件中的信息
    private File docxReplace(String wordPath)  {
        // 将要替换的文字、图片写入map集合中
        Map<String, Object> map = new HashMap<>();
        map.put("name", "张三");
        map.put("sex", "男");
        map.put("address", "北京市XX区XX路");
        try {
            // 图片的处理
            PictureRenderData pictureRenderData = Pictures.ofStream(new FileInputStream("d:\\zhangsan.jpg"), PictureType.PNG)
                    .size(102, 126).create();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        map.put("photo", pictureRenderData);

        // 生成的新文件保存路径
        File repotrFile = new File("D:\\new.docx");
        try {
        // 生成新的文件并写到硬盘
            XWPFTemplate.compile(wordPath).render(map, new FileOutputStream(repotrFile));
        } catch (IOException e) {
            e.printStackTrace();
        }
        // Todo
        // 可以对文件执行其他操作,例如:打印,在打印完毕后删除文件
		// repotrFile.delete(); 
		// 或者直接返回File
        return repotrFile;
    }

    public static void main(String[] args) {
        File file = new ReplaceDocx().docxReplace("D:\\old.docx");
    }
}

3. 重点

  1. map集合中定义的类型:Map<String, Object>如果有图片则需要将vlaue值定义为Object,如果替换的内容全部是字符,则只需要定义为Map<String, String>
    1.1 注意map集合key的值,只需要{{}}内的字符串即可,其他教程使用的方法,可能需要带符号。
  2. 图片的处理:Pictures.ofStream(new FileInputStream("d:\\zhangsan.jpg"), PictureType.PNG).size(102, 126).create()
    2.1 Pictures的构造方法有很多,此例是通过字符流构造,还可以通过BufferedImage、base64、byte[]等参数构造,详见源码。
    2.2 第二个参数是创建的图片格式
    2.3 size()方法,很显然是指定生成的图片大小
    2.4 最重要的一点:在docx模板文件中图片的名字前要加@
  3. 替换模板文件并写到硬盘: XWPFTemplate.compile(wordPath).render(map, new FileOutputStream(repotrFile));
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值