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

原创 2018年04月17日 16:02:00

对于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.deepoove</groupId>
    <artifactId>poi-tl</artifactId>
    <version>1.2.0</version>
</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();

在jsp中发送email

一、我们可以通过任何支持sun规范中的sun.net.smtp包的JSP引擎(如JSWDK)发送mail。 (警告:使用内置的internal Sun规范包,这将影响到你的jsp程序的可移植性。) 以...
  • weqa
  • weqa
  • 2000-09-02 22:42:00
  • 584

java通过poi-tl使用word模版生成word文件

问题描述:使用work模板文件来生成word文件。 问题解决:1、使用apache poi 来生成word文件  2、使用Poi-tl生成  本章主要讲如何使用poi-tl通过模版文件生成word文件...
  • liushimiao0104
  • liushimiao0104
  • 2017-11-13 14:36:10
  • 873

[转载] Java word 模板操作poi-tl中文文档wiki

poi-tlJava word模板引擎。Feature: 支持文本、本地图片、网络图片、表格Table、有序列表、无序列表、页眉、页脚等模板 语法插件化,通过插件自定义新语法,新模板 支持自定义文本颜...
  • adalf90
  • adalf90
  • 2017-12-15 15:30:13
  • 496

poi-tl 自定义图片处理类,解决生成多个文件时图片重复出现在word文档中问题

poi-tl 生成图片后,清除图片
  • liushimiao0104
  • liushimiao0104
  • 2017-11-30 09:52:32
  • 389

POI对Word的操作

(1)POI操作Word简介POI读写Excel功能强大、操作简单。但是POI操作时,一般只用它读取word文档,POI只能能够创建简单的word文档,相对而言POI操作时的功能太少。(2)POI创建...
  • fzqzxx
  • fzqzxx
  • 2018-03-14 18:08:00
  • 42

poi导出word例子(图片)

  • 2015年11月23日 17:23
  • 8.14MB
  • 下载

poi-tl解析Word文档

  • 2016年12月21日 16:08
  • 8KB
  • 下载

java 导入导出Word、excel的Jar包+例子

  • 2009年09月15日 10:14
  • 14.69MB
  • 下载

POI对docx模板进行文字、图片替换

实验环境:POI3.7+Word2007Word模板: 替换后效果: 代码:1、入口文件 public class Test { public static void ma...
  • Liuqz2009
  • Liuqz2009
  • 2017-08-07 11:20:51
  • 358

poi操作word文档,以07版本为参考,将word文档中图片替换为文本(替换文本也一样),读图片可选文字内容

1、先简单介绍下word07版本以后的存储格式,word 07版本以后主要是以xml格式存储。如果想查看详情可将后缀名改为zip,再查看压缩文件可查看到各种文件,其中document.xml就是wor...
  • yy455363056
  • yy455363056
  • 2015-10-28 18:53:26
  • 920
收藏助手
不良信息举报
您举报文章:对于word的导入导出处理,使用插件poi-tl
举报原因:
原因补充:

(最多只允许输入30个字)