【SpringBoot】【autopoi】java生成word,基于模版生成(文本、图片、表格)

AutoPoi的主要特点

参考文献
https://help.jeecg.com/autopoi/autopoi/prequel/test.html

1.设计精巧,使用简单
2.接口丰富,扩展简单
3.默认值多,write less do more
4.spring mvc支持,web导出可以简单明了

1、引入maven

<dependency>
   <groupId>org.jeecgframework</groupId>
   <artifactId>autopoi-web</artifactId>
   <version>1.4.8</version>
</dependency>

2、word模版编写

目前仅支持表格循环、变量替换

{{department}}
{{person}}
{{image}}
{{time}}
序列号xx名称小学生
{{$fe:testList}}{{.id.}}{{zijin}}{{quancheng}}{{bianma}}

图片以供模版参考
在这里插入图片描述

3、java代码


import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.jeecg.common.util.DateUtils;
import org.jeecgframework.poi.word.WordExportUtil;
import org.jeecgframework.poi.word.entity.WordImageEntity;

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class WordExportUtils {


    public static void main(String[] args) {

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("department", "Easypoi");
        map.put("person", "JueYue");
        map.put("time", DateUtils.formatDate(new Date()));

        String templateFileUrl = "C:\\Users\\123\\Desktop\\1\\667\\1111.docx";

        List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
        for (int i = 0; i < 4; i++) {
            Map<String, Object> lm = new HashMap<String, Object>();
            lm.put("id", i + 1 + "");
            lm.put("zijin", i * 10000 + "");
            lm.put("bianma", "A001");
            lm.put("mingcheng", "设计");
            lm.put("xiangmumingcheng", "EasyPoi " + i + "期");
            lm.put("quancheng", "开源项目");
            lm.put("sqje", i * 10000 + "");
            lm.put("hdje", i * 10000 + "");
            lm.put("$fe:testList", lm);
            listMap.add(lm);
        }
        map.put("testList", listMap);


        WordImageEntity image = new WordImageEntity();
        image.setHeight(200);
        image.setWidth(500);
        image.setUrl("/static/337.png");
        image.setType(WordImageEntity.URL);
        map.put("image", image);


        XWPFDocument doc = imageWordExport(map, templateFileUrl);

        try {
            FileOutputStream fos = new FileOutputStream("C:\\Users\\123\\Desktop\\1\\667\\1111After.docx");
            doc.write(fos);
            fos.close();
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            doc.write(byteArrayOutputStream);
            System.out.println("总字节大小:" + byteArrayOutputStream.toByteArray().length);

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public static XWPFDocument imageWordExport(Map<String, Object> map, String templateFileUrl) {
        try {
            return WordExportUtil.exportWord07(templateFileUrl, map);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

}

4、效果

在这里插入图片描述

5、word转pdf

请参考文章

https://blog.csdn.net/Tm598035415/article/details/140663654?utm_source%20=%20uc_fansmsg

SpringBoot_Freemarker生成Word_多个表格+两层嵌套循环; 步骤说明: 1.用Microsoft Office Word打开word原件;将文档中需要动态生成的内容,替换为属性名 ${name} 2.另存为,选择保存类型Word 2003 XML 文档(*.xml) 3.用Firstobject free XML editor打开文件,选择Tools下的Indent【或者按快捷键F8】格式化文件内容。左边是文档结构,右边是文档内容; 4. 文档生成后有时需要手动修改,查找第一步中设置的属性名,可能会产生类似${n.....ame}类似的样子,我们将将名字中间的标签删掉,恢复为${name} 5. word模板中有表格,需要循环的位置, 用 标签将第二对 标签(即除表头的w:tr标签后的一对)包围起来 同时表格内的属性例如${name},在这里需要修改为${user.name} (userList是集合在dataMap中的key, user是集合中的每个元素, 类似), 如图: PLUS:若表格之外还有嵌套的循环,也需要用,注意这里的标签不要和某对其他标签交叉,不可以出现这种 6. 标识替换完之后,另存为.ftl后缀文件即可。 代码里是相对有一丢丢复杂的,两层嵌套循环; 总(dataMap) deptName 部门名 list(Table)表的集合 table1(map) table-名字 ${map.table} tableName-中文名 ${map.tableName} columnCount-字段数 ${map.columnCount} recordCount-记录数 ${map.recordCount} listA-List--表格1 map.listA column Model属性——字段名 ${model.column} columnName Model属性——字段中文名 ${model.column} rate Model属性——字段占比 ${model.rate} nullValueCount Model属性——字段空值数 ${model.nullValueCount} listB-List--表格2 map.listB …… listC-List--表格3 map.listC …… table2 table-名字 ${map.table} tableName-中文名 ${map.tableName} columnCount-字段数 ${map.columnCount} recordCount-记录数 ${map.recordCount} listA-List--表格1 map.listA column Model属性——字段名 ${model.column} columnName Model属性——字段中文名 ${model.column} rate Model属性——字段占比 ${model.rate} nullValueCount Model属性——字段空值数 ${model.nullValueCount} listB-List--表格2 map.listB …… listC-List--表格3 map.listC …… table3 ……
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值