三行代码导出任意样式word(2020-11) (极简的word导出,避免freemarker、Poi等复杂导出)

解决哪些问题

  • 开发中偶尔会有固定模板导出word的需求,常见的导出通常通过直接修改xml或者通过工具库代码调整样式输出,这些方式开发困难并且不利于后期维护。
  • 一些有规则的文档需要人工填写,费时费力,此时配置数据库做模板渲染导出,如数据库设计文档等

简单介绍

officeexport-java基于Apache FreeMarker,遵从模板 + 数据模型 = 输出的理念,
通过极简API实现javaBean即数据源,模板即样式的Word导出,提供以下功能:

  • 基本文本的输出,文本占位符样式即输出文本样式。
  • 文本行、表格行单行或多行的遍历输出,并能够进行循环嵌套。
  • 提供数据处理的插件,通过添加处理器可定制任意输出值,例如:特定项的日期、数字等文本格式转换
  • 图片保留样式的输出。

现有实现方案的对比

方案 跨平台 易用性
Freemarker 跨平台 需要掌握freemarker的语法,配置xml结构,复杂模型导出非常繁琐
Apache POI Java组件,跨平台 需要掌握POIApi,对于复杂样式配置起来很复杂
officeexport Java组件,跨平台 拥有极简API,极简的模板语法,模板样式即输出样式(模板样式直接通过word调整)

快速开始

代码示例

1、调整word模板,添加占位符,并转换到word 2003 xml文档(.xml)。

2、Maven引入jar包,通过api导出

  
   
       com.github.kmood
       officeexport-java
       1.0.1.6-RELEASE
   

  HashMap data = new HashMap<>();
  ...准备数据
  data.put("zxsm",zxsmList);
  data.put("sbsm","kmood-导出-商标说明");
  
  DocumentProducer dp = new DocumentProducer(ActualModelPath);
  dp.Complie(xmlPath, "filename.xml",true);
  dp.produce(map, ExportFilePath);

示例1-文本输出

代码实例

                   HashMap map = new HashMap<>();
                   map.put("text", "kmood-文本占位输出");
                   map.put("text1", "kmood-文本占位输出2");
                   DocumentProducer dp = new DocumentProducer(ActualModelPath);
                   String complie = dp.Complie(xmlPath, "text.xml", true);
                   dp.produce(map, ExportFilePath);

实现效果

text.png

示例2-文本循环输出

代码实例

        //准备数据
        HashMap map = new HashMap<>();
        ArrayList tables = new ArrayList<>();
        HashMap map1 = new HashMap<>();
        map1.put("text", "kmood-文本占位输出-循环1");
        map1.put("text1", "kmood-文本占位输出2-循环1");
        tables.add(map1);
        HashMap map2 = new HashMap<>();
        map2.put("text", "kmood-文本占位输出-循环2");
        map2.put("text1", "kmood-文本占位输出2-循环2");
        tables.add(map2);
        map.put("tables",map);
        //编译输出
        DocumentProducer dp = new DocumentProducer(ActualModelPath);
        String complie = dp.Complie(xmlPath, "textf.xml", true);
        dp.produce(map, ExportFilePath);

实现效果

textf.png

示例3-文本、表格循环输出

代码实例

        //准备数据
       HashMap map = new HashMap<>();
       ArrayList tables = new ArrayList<>();
       HashMap map1 = new HashMap<>();
       map1.put("text", "kmood-文本占位输出-循环1");
       map1.put("text1", "kmood-文本占位输出2-循环1");
       //表格数据
       ArrayList columns1= new ArrayList<>();
       HashMap row = new HashMap<>();
       row.put("column1", "kmood-table1-column1-row1");
       row.put("column2", "kmood-table1-column2-row1");
       columns1.add(row);
       HashMap row2 = new HashMap<>();
       row2.put("column1", "kmood-table1-column1-row2");
       row2.put("column2", "kmood-table1-column2-row2");
       columns1.add(row2);
       map1.put("columns", columns1);
       tables.add(map1);

       HashMap map2 = new HashMap<>();
       map2.put("text", "kmood-文本占位输出-循环2");
       map2.put("text1", "kmood-文本占位输出2-循环2");
       //表格数据
       ArrayList columns2= new ArrayList<>();
       HashMap row3 = new HashMap<>();
       row3.put("column1", "kmood-table2-column1-row1");
       row3.put("column2", "kmood-table2-column2-row1");
       columns2.add(row3);
       HashMap row4 = new HashMap<>();
       row4.put("column1", "kmood-table2-column1-row2");
       row4.put("column2", "kmood-table2-column2-row2");
       columns2.add(row4);
       map2.put("columns", columns2);

       tables.add(map2);
       map.put("tables",tables);
       //编译输出
       DocumentProducer dp = new DocumentProducer(ActualModelPath);
       String complie = dp.Complie(xmlPath, "table.xml", true);
       dp.produce(map, ExportFilePath);

实现效果

textf-table.png

中文文档:https://github.com/kmood/officeexport-java/wiki

github:**https://github.com/kmood/officeexport-java

你可能感兴趣的:(三行代码导出任意样式word(2020-11) (极简的word导出,避免freemarker、Poi等复杂导出))