poi|对于word的导入导出处理,使用插件poi-tl

对于word模板替换,我们不仅要考虑复杂的模板格式,还要考虑字体,颜色,处理页眉页脚,使用稍显复杂的poi的API等,现实项目中又有许多需求需要后台动态生成数据然后替换word模板,供前台下载或者打印,为了避免:

  • java操作word使用apache poi的复杂性
  • 使用freemarker,转化为xml操作word的难度
  • 依赖服务器上安装软件openoffice来调用转化
  • 依赖windows的word lib库,不具有跨平台性
【poi|对于word的导入导出处理,使用插件poi-tl】因此基于poi开发了一套拥有简洁API的跨平台的模板引擎:poi-tl。核心API只需要一行代码:
XWPFTemplate template = XWPFTemplate.compile("~/file.docx").render(datas);

依赖
com.deepoove poi-tl 1.2.0

语法 所有的语法结构都是以 {{ 开始,以 }} 结束。
  • {{template}}
普通文本,渲染数据为:String或者TextRenderData
  • {{@template}}
图片,渲染数据为:PictureRenderData
  • {{#template}}
表格,渲染数据为:TableRenderData
文章:poi-tl处理Word表格(Table)的最佳实践
  • {{*template}}
列表,渲染数据为:NumbericRenderData
Usage
Map datas = new HashMap(){{put("author", new TextRenderData("000000", "Sayi")); //文本模板 put("date", "2015-04-01"); //表格模板 put("changeLog", new TableRenderData(new ArrayList(){{ add(new TextRenderData("d0d0d0", "")); add(new TextRenderData("d0d0d0", "introduce")); }},new ArrayList(){{ add("1; add new # gramer"); add("2; support insert table"); add("3; support more style"); }}, "no datas", 10600)); //列表 1. 2. 3. put("number123", new NumbericRenderData(FMT_DECIMAL, new ArrayList() {{ add(new TextRenderData("df2d4f", "Deeply in love with the things you love, just deepoove.")); add(new TextRenderData("Deeply in love with the things you love, just deepoove.")); add(new TextRenderData("5285c5", "Deeply in love with the things you love, just deepoove.")); }})); //图片模板 put("logo",new PictureRenderData(100, 100, "/Users/Sayi/image.png")); }}; //render XWPFTemplate template = XWPFTemplate.compile("src/test/resources/PB.docx").render(datas); //out document FileOutputStream out = new FileOutputStream("out.docx"); template.write(out); template.close(); out.close();

    推荐阅读