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

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

  • java操作word使用apache poi的复杂性
  • 使用freemarker,转化为xml操作word的难度
  • 依赖服务器上安装软件openoffice来调用转化
  • 依赖windows的word lib库,不具有跨平台性

因此基于poi开发了一套拥有简洁API的跨平台的模板引擎:poi-tl。核心API只需要一行代码:

XWPFTemplate template = XWPFTemplate.compile("~/file.docx").render(datas);

依赖

<dependency>
    <groupId>com.deepoovegroupId>
    <artifactId>poi-tlartifactId>
    <version>1.2.0version>
dependency>

语法

所有的语法结构都是以 {{ 开始,以 }} 结束。

  • {{template}}

普通文本,渲染数据为:String或者TextRenderData

  • {{@template}}

图片,渲染数据为:PictureRenderData

  • {{#template}}

表格,渲染数据为:TableRenderData

文章:poi-tl处理Word表格(Table)的最佳实践

  • {{*template}}

列表,渲染数据为:NumbericRenderData

Usage

Map<String, Object> datas = new HashMap<String, Object>(){{

       put("author", new TextRenderData("000000", "Sayi"));
       //文本模板
       put("date", "2015-04-01");

       //表格模板
       put("changeLog", new TableRenderData(new ArrayList<RenderData>(){{
           add(new TextRenderData("d0d0d0", ""));
           add(new TextRenderData("d0d0d0", "introduce"));
       }},new ArrayList<Object>(){{
           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<TextRenderData>() {{
           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();

你可能感兴趣的:(poi,poi)