根据word模板导出word、使用spring-thymeleaf模板生成html并通过docx4j把html转word,使用jxls根据excel模板导出excel
使用poi-tl 根据word模板生成word
官网
poi-tl(poi template language)是Word模板引擎,基于Word模板和数据生成新的文档。
在文档的任何地方做任何事情(Do Anything Anywhere)是poi-tl的星辰大海。
Apache POI不仅封装了易用的文档API(文本、图片、表格、页眉、页脚、图表等),也可以在底层直接操作文档XML结构,poi-tl正是一个基于Apache POI的Word模板引擎,并且拥有着让人喜悦的特性。
代码示例
XWPFTemplate template = XWPFTemplate.compile("template.docx").render(
new HashMap<String, Object>(){{
put("title", "Hi, poi-tl Word模板引擎");
}});
template.writeAndClose(new FileOutputStream("output.docx"));
compile 编译模板 |
|
render 渲染数据 |
|
write 输出到流 |
XWPFTemplate template = XWPFTemplate.compile("~/file.docx").render(datas);
所有的标签都是以 {{ 开始,以 }} 结束。
-
{{template}} 文本
-
{{@template}} 图片
-
{{#template}} 表格
-
{{*template}} 列表
-
{{+template}} Word文档合并
-
{{?list}}{{/list}} if和foreach功能
1.依赖
<!--poi tl start导出word-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.9.1</version>
</dependency>
<!--poi tl send 导出word-->
2.代码
package com.shan.mydemo.controller;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.data.*;
import com.shan.mydemo.domain.HttpServletResponseUtils;
import com.shan.mydemo.domain.RvDclrBasicInfoFO;
import com.shan.mydemo.domain.RvDclrInfoFO;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.compress.archivers.zip.Zip64Mode;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.ThreadLocalRandom;
import java.util.stream.IntStream;
/**
* @author sc
* @createTime 2020/1/14 17:51
* @description poi-tl
*/
@Api(description = "poi操作word")
@Slf4j
@Controller
@RequestMapping("/poi-tl")
public class PoiTlDemoController {
/**
* poi-tl导出word 以及压缩包
* @return
*/
@GetMapping("/testWord")
public void testWord(HttpServletResponse response) throws IOException {
byte[] base64 = Base64.decodeBase64("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iVjrvaF8s5/KlaXc0S8iXO8RrDe96U3pb/7mb0bTrt5oXt0pesQjHjH6hYzr/bSsaT8iub4LUp1n/JG1TnyzFsFBBAgQWG4BAbLc62N2BAi0LPCK/3l/esvd32/5rD863ct2npLe9KQf/cK7+m/e8pa3zPxTp6rX1m+crt4TMv7L9MZjo/oO/pe//OXRj9wdf89G9UV29d/Hf5t59b+95z3vGU3rb//2b7McZvopWN84kNK3P5R13kYHbX9WSg8/8XeNrBdPlXn1u1PGA6/636o/9e8BWS/+1rsDUr1uKXwboXkRAQIElktAgCzXepgNAQIBAlWEvPurD6Rvfn+1tdEedspKesEjT143PlobpJQTVRFy739P6cEWf+v8SWekdOa/XTc+SmExTwIECBD4oYAAsRMIECAwp8ADx1bTyVtW5jyLl08VWH0wpZWTABEgQIBATwQESE8W0mUQIECAAAECBAgQKEFAgJSwSuZIgAABAgQIECBAoCcCAqQnC+kyCBAgQIAAAQIECJQgIEBKWCVzJECAAAECBAgQINATAQHSk4V0GQQIECBAgAABAgRKEBAgJaySORIgQIAAAQIECBDoiYAA6clCugwCBAgQIECAAAECJQgIkBJWyRwJECBAgAABAgQI9ERAgPRkIV0GAQIECBAgQIAAgRIEBEgJq2SOBAgQIECAAAECBHoiIEB6spAugwABAgQIECBAgEAJAgKkhFUyRwIECBAgQIAAAQI9ERAgPVlIl0GAAAECBAgQIECgBAEBUsIqmSMBAgQIECBAgACBnggIkJ4spMsgQIAAAQIECBAgUIKAAClhlcyRAAECBAgQIECAQE8EBEhPFtJlECBAgAABAgQIEChBQICUsErmSIAAAQIECBAgQKAnAgKkJwvpMggQIECAAAECBAiUICBASlglcyRAgAABAgQIECDQEwEB0pOFdBkECBAgQIAAAQIEShAQICWskjkSIECAAAECBAgQ6ImAAOnJQroMAgQIECBAgAABAiUICJASVskcCRAgQIAAAQIECPREQID0ZCFdBgECBAgQIECAAIESBARICatkjgQIECBAgAABAgR6IiBAerKQLoMAAQIECBAgQIBACQICpIRVMkcCBAgQIECAAAECPREQID1ZSJdBgAABAgQIECBAoAQBAVLCKpkjAQIECBAgQIAAgZ4ICJCeLKTLIECAAAECBAgQIFCCgAApYZXMkQABAgQIECBAgEBPBARITxbSZRAgQIAAAQIECBAoQUCAlLBK5kiAAAECBAgQIECgJwICpCcL6TIIECBAgAABAgQIlCAgQEpYJXMkQIAAAQIECBAg0BOBhQfIwYMH04UXXngC10033ZT27NnTE0aXQYAAAQIECBAgQIBAjsDCA2RyEnfddVe66qqr0jXXXJN27NiRM0fHECBAgAABAgQIECDQE4HwANm3b18677zz0u7du3tC6DIIECBAgAABAgQIEMgVCA2Q6u7HDTfckK6++uq0devWDef41Kc+dfT3d9xxR+61OI4AAQIECBAgQIAAgSUXCA2Qje5+bNu2LR05cuQErsOHDy85oekRIECAAAECBAgQKEdg+/btnU42LEBmfe/HysrKCObYsWOdAhmcAAECBAgQIECAQJ8E6q+zu7qmsACp7n7s3Lkz+ydfCZCutoRxCRAgQIAAAQIE+iwwiACpHq167Wtfmy655JK0a9eurPUUIFlMDiJAgAABAgQIECAwk8AgAmTWx68qQQEy0z5yMAECBAgQIECAAIEsgUEESJbExEECpIma1xAgQIAAAQIECBDYWECATPERID50CBAgQIAAAQIECLQvIEAESPu7yhkJECBAgAABAgQIbPJ1dldAYT8Fa9YLdAdkVjHHEyBAgAABAgQIENhcwB0Qd0A23yWOIECAAAECBAgQINCSgAARIC1tJachQIAAAQIECBAgsLmAABEgm+8SRxAgQIAAAQIECBBoSUCACJCWtpLTECBAgAABAgQIENhcQIAIkM13iSMIECBAgAABAgQItCQgQARIS1vJaQgQIECAAAECBAhsLiBABMjmu8QRBAgQIECAAAECBFoSECACpKWt5DQECBAgQIAAAQIENhcQIAJk813iCAIECBAgQIAAAQItCQgQAdLSVnIaAgQIECBAgAABApsLCBABsvkucQQBAgQIECBAgACBlgQEiABpaSs5DQECBAgQIECAAIHNBQSIANl8lziCAAECBAgQIECAQEsCAkSAtLSVnIYAAQIECBAgQIDA5gICRIBsvkscQYAAAQIECBAgQKAlAQEiQFraSk5DgAABAgQIECBAYHMBASJANt8ljiBAgAABAgQIECDQkoAAESAtbSWnIUCAAAECBAgQILC5gAARIJvvEkcQIECAAAEC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33cs7fzw95b2ch69bUu6+9+ftrTzG8rE6ieNurre8ACpfiLWFVdcka666qq0a9euqdddwwiQrraGcQn8SECABO8GARICLkBCmNcGESAx3gIkxrn0UXofINXjVx/4wAfS3r17R2vlDkjpW9b8hyggQIJXXYCEgAuQEGYBEsucBEgweKHD9T5A6ui48MILR0s06+8BcQek0J1t2r0SECDByylAQsAFSAizAIllFiDB3qUON4gAabI4HsFqouY1BBYjIEAW4zr1rAIkBFyAhDALkFhmARLsXepwAmTKygmQUre0efdRQIAEr6oACQEXICHMAiSWWYAEe5c6nAARIKXuXfMekIAACV5sARICLkBCmAVILLMACfYudTgBIkBK3bvmPSABARK82AIkBFyAhDALkFhmARLsXepwAkSAlLp3zXtAAgIkeLEFSAi4AAlhFiCxzAIk2LvU4QSIACl175r3gAQESPBiC5AQcAESwixAYpkFSLB3qcMJEAFS6t417wEJCJDgxRYgIeACJIRZgMQyC5Bg71KHEyACpNS9a94DEhAgwYstQELABUgIswCJZRYgwd6lDidABEipe9e8ByQgQIIXW4CEgAuQEGYBEsssQIK9Sx1OgAiQUveueQ9IQIAEL7YACQEXICHMAiSWWYAEe5c6nAARIKXuXfMekIAACV5sARICLkBCmAVILLMACfYudTgBIkBK3bvmPSABARK82AIkBFyAhDALkFhmARLsXepwAkSAlLp3zXtAAgIkeLEFSAi4AAlhFiCxzAIk2LvU4QSIACl175r3gAQESPBiC5AQcAESwixAYpkFSLB3qcMJEAFS6t417wEJCJDgxRYgIeACJIRZgMQyC5Bg71KHEyACpNS9a94DEhAgwYstQELABUgIswCJZRYgwd6lDidABEipe9e8ByQgQIIXW4CEgAuQEGYBEsssQIK9Sx1OgAiQUveueQ9IQIAEL7YACQEXICHMAiSWWYAEe5c6nAARIKXuXfMekIAACV5sARICLkBCmAVILLMACfYudTgBIkBK3bvmPSABARK82AIkBFyAhDALkFhmARLsXepwAkSAlLp3zXtAAgIkeLEFSAi4AAlhFiCxzAIk2LvU4QSIACl175r3gAQESPBiC5AQcAESwixAYpkFSLB3qcMJEAFS6t417wEJCJDgxRYgIeACJIRZgMQyC5Bg71KHEyACpNS9a94DEhAgwYstQELABUgIswCJZRYgwd6lDidABEipe9e8ByQgQIIXW4CEgAuQEGYBEsssQIK9Sx1OgAiQUveueQ9IQIAEL7YACQEXICHMAiSWWYAEe5c6nAARIKXuXfMekIAACV5sARICLkBCmAVILLMACfYudTgBIkBK3bvmPSABARK82AIkBFyAhDALkFhmARLsXepwAkSAlLp3zXtAAgIkeLEFSAi4AAlhFiCxzAIk2LvU4QSIACl175r3gAQESPBiC5AQcAESwixAYpkFSLB3qcMJEAFS6t417wEJCJDgxRYgIeACJIRZgMQyC5Bg71KHEyACpNS9a94DEhAgwYstQELABUgIswCJZRYgwd6lDidABEipe9e8ByQgQIIXW4CEgAuQEGYBEsssQIK9Sx1OgAiQUveueQ9IQIAEL7YACQEXICHMAiSWWYAEe5c6nAARIKXuXfMekIAACV5sARICLkBCmAVILLMACfYudTgBIkBK3bvmPSABARK82AIkBFyAhDALkFhmARLsXepwAkSAlLp3zXtAAgIkeLEFSAi4AAlhFiCxzAIk2LvU4QSIACl175r3gAQESPBiC5AQcAESwixAYpkFSLB3qcMJEAFS6t417wEJCJDgxRYgIeACJIRZgMQyC5Bg71KHEyACpNS9a94DEhAgwYstQELABUgIswCJZRYgwd6lDidABEipe9e8ByQgQIIXW4CEgAuQEGYBEsssQIK9Sx1OgAiQUveueQ9IQIAEL7YACQEXICHMAiSWWYAEe5c6nAARIKXuXfMekIAACV5sARICLkBCmAVILLMACfYudTgBIkBK3bvmPSABARK82AIkBFyAhDALkFhmARLsXepwAkSAlLp3zXtAAgIkeLEFSAi4AAlhFiCxzAIk2LvU4QSIACl175r3gAQESPBiC5AQcAESwixAYpkFSLB3qcMJEAFS6t417wEJCJDgxRYgIeACJIRZgMQyC5Bg71KHEyACpNS9a94DEhAgwYstQELABUgIswCJZRYgwd6lDidABEipe9e8ByQgQIIXW4CEgAuQEGYBEsssQIK9Sx1uEAFy++23p3POOWe0RmeffXa6+eab065duzZcsxrm2LFjpa6teRPojYAACV5KARICLkBCmAVILLMACfYudbjeB8ihQ4fSddddl175ylemrVu3pipG9u3b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");
ByteArrayInputStream in = new ByteArrayInputStream(base64);
BufferedImage image = ImageIO.read(in);
Map<String, Object> datas = new HashMap<String, Object>() {
{
put("Name", new TextRenderData("33ff33", "Alex Bin"));
put("Age", "24");
put("title", "发发发");
put("date", new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
//超链接
//put("Sources", new HyperLinkTextRenderData("baidu", "http://www.baidu.com"));
// 本地图片 可以绝对路径但不推荐
put("Image", new PictureRenderData(120, 120, new ClassPathResource("static/1.png").getFile().getPath()));
//java图片/base64等格式图片
put("JavaImage", new PictureRenderData(600, 350, ".png", in));
}
};
ClassPathResource oldDoc = new ClassPathResource("templates/poiTl/TL.docx");
String filePath = oldDoc.getFile().getPath();
XWPFTemplate template = XWPFTemplate.compile(filePath)
.render(datas);
ByteArrayOutputStream out = new ByteArrayOutputStream();
template.write(out);
String zipFileName = "压缩包.zip";
response.setHeader("Content-Disposition","attachment; fileName=" + URLEncoder.encode(zipFileName, "UTF-8"));
ZipArchiveOutputStream zipOut = new ZipArchiveOutputStream(response.getOutputStream());
zipOut.setUseZip64(Zip64Mode.AsNeeded);
zipOut.setEncoding("UTF-8");
String fileName ="poi导出word测试.docx";
ZipArchiveEntry zipEntry = new ZipArchiveEntry(fileName);
zipEntry.setSize(out.size());
zipOut.putArchiveEntry(zipEntry);
zipOut.write(out.toByteArray());
zipOut.closeArchiveEntry();
zipOut.flush();
zipOut.finish();
}
/**
* 作者: shanc
* 时间: 2021/4/19 14:38
* 描述: 使用poi-tl 根据word模板导出word
*/
@GetMapping("/check-in-form-v2-export-demo")
public void checkInFormV2ExportDemo(HttpServletResponse response) throws IOException {
byte[] base64 = Base64.decodeBase64("iVBORw0KGgoAAAANSUhEUgAAAyAAAAH0CAYAAADFQEl4AAAgAElEQVR4Xu3dD4wlV33g+9Pj2HjGfzaj4U+cQIDJkiEB5BUiPJax2WBtMIkUwhIRsxrb7OIYW2AgE5EXlGCwGZKXPFAmgG0ZiFnweLI4JDwFJIIJcViwWZ4XIawFLYaNgfDHCjBDYsDjwXj6qS6vmjt3+nafW7fur+6p+owUEZi6dU59zume/nbV7V5ZXV1dTf4QIECAAAECBAgQIEAgQGBFgAQoG4IAAQIECBAgQIAAgZGAALERCBAgQIAAAQIECBAIExAgYdQGIkCAAAECBAgQIEBAgNgDBAgQmFPggWOr6eQtK3OexcunCqw+mNLKSYAIECBAoCcCAqQnC+kyCBDIF3jF/7w/vfurD6Rvfr+9n8HxsFNW0gseeXJ605NOzZ9IX4/8xoGU7v3vKT34nfau8KQzUjrz36b08IvaO6czESBAgEAnAgKkE3aDEiDQlUAVH2+5+/sLG/5lO08ZdoRU8fHtDy3MN21/lghZnK4zEyBAIERAgIQwG4QAgWUReMTffKfVOx+T11XdCfmnXz5j08u9//7705/+6Z+mCy64ID32sY9d9/jqmLe//e3poosuSj/+4z+e3ve+96XXve51a8e+8IUvTC972ctG//2LX/xi+od/+Id0zjnnrL3mox/9aHrkIx85+vvbb7997dj6BNX5X//616cPfvCD647/xCc+cTTHauzsP//7Je3e+ZgcuLoT8q+vmzqdT33qU+mrX/1qes5znjM6ZppzddyLX/zi0TGT1/mOd7wjPfOZzzxuXZbGN3shHEiAAIHlFRAgy7s2ZkaAQMsC1Xs1HvL+Fh8LmjK/o796RtZ7Qv75n/85vfGNb0yvfOUr1/0if70AqYLiyU9+8ig4/v7v/z696EUvWptFFSg7duxI1RfXp512WnroQx86+kK8+t/r141PefL8uX83dVmq92p8/j+1vGrrnO5n3zn1PSGTAVI53Xzzzem3fuu30qmn/ujxuPq4ZzzjGenAgQPpYQ972Ggt1vvzmte8Zs2xU9/FyxqBAAECIQICJITZIAQILIvAlr++d+FTOfZrZ54wRvWF8Mtf/vJ0zz33bDr+2972ttEdi3e9611rx1Z3Ox796EevhcRkgEzeHalf+Ed/9EfppptuSp/5zGfWzvXsZz87vfrVrx7999bvgNwV8B6NXQeOM5x2J6e6ztNPPz395V/+5XHHV5a7d+8e3Smpwqy+YzIeK9U5x+NwaXw33T0OIECAwPILCJDlXyMzJECgRYGuAmS9S5j8bv3kMdUXxNUjUFdfffXaI1gb3QGpXl99ofx3f/d36YwzzhhFxoc+9KF0xx13jP7/yS+qW78DUk2ggwAZdxs3raOv8pu8a1Qd9/nPfz5985vfTD/3cz+XXvWqV03dZeOPaHXu2+LHglMRIECgKwEB0pW8cQkQ6ESgpACpv+tefwFcv6djvUew6rsAv/zLvzx6BKv6ovpb3/pWuu+++9I3vvGNdPnll6dvf/vba48jVe8tGb/DstFi1HdMxh9hmnr8EgVI9V6Obdu2jf6vehRtPE6q///Tn/50uvvuu0ePwFX/Ofk+mfFAq669ulvUuW8nHzUGJUCAQLsCAqRdT2cjQGDJBUoJkOqL3z//8z8fxcOznvWs0RfL1Xs6pt0Bqd84fdZZZ43ehP785z8/feQjH0nPfe5z02233ZZ+5md+ZhQg42/Qrt6DUr3/4dJLLx29P2L8C/ScN8mvu9RLFCDV/MavsXKpHr2qAq6+1voRrOo/6zelj19XHX/vfe97R29M79x3yT++TI8AAQI5AgIkR8kxBAj0RqCrANnsJ07VwPXdhurRqfoNz/VPwRr/6UzrvQl9o5/4VH13v/pTfwFef3FevTl7/P0h4wtdfbH95je/eepP6VqmABn/qVb1vKr30vz8z//86DG2pzzlKen973//2uNsk29Cr6Ok/qli1TkmH1FbCt/efCS6EAIEhiwgQIa8+q6dwAAFugqQ9ag3eg/Ihz/84dEXzdUdiipAqjsU4z+Stw6Q5z3veaM3S1c/Kvfd7373ccNMvtm8+svqvSD1o1R9ugMyaTn+k7/qOKl/mlXlUB//pCc9afRY2rnnnpte8YpXnLBM9R2Qah0mH1nrxHeAH7MumQCB/gkIkP6tqSsiQGADgVICZPI78OPv36gCYjxAqi+Oq8e0rrvuutF3+Ov3K1RxUn1nvwqN6k5H9ZhRHSD1/zbt7kdNOPNdkI4ewdooQOr30kwGSP3I1fj/Xl33ej+2ePwHAnTq66ObAAECPRAQID1YRJdAgEC+wLL8IsLx78LXvzRv8irGHwGqImP88ak6QKr3JdS/D2QyKuofN1t9oV09jlS9/6P+iVjrvaF8s5/KlaXc0S8iXO8RrDe96U3pb/7mb0bTrt5oXt0pesQjHjH6hYzr/bSsaT8iub4LUp1n/JG1TnyzFsFBBAgQWG4BAbLc62N2BAi0LPCK/3l/esvd32/5rD863ct2npLe9KQf/cK7+m/e8pa3zPxTp6rX1m+crt4TMv7L9MZjo/oO/pe//OXRj9wdf89G9UV29d/Hf5t59b+95z3vGU3rb//2b7McZvopWN84kNK3P5R13kYHbX9WSg8/8XeNrBdPlXn1u1PGA6/636o/9e8BWS/+1rsDUr1uKXwboXkRAQIElktAgCzXepgNAQIBAlWEvPurD6Rvfn+1tdEedspKesEjT143PlobpJQTVRFy739P6cEWf+v8SWekdOa/XTc+SmExTwIECBD4oYAAsRMIECAwp8ADx1bTyVtW5jyLl08VWH0wpZWTABEgQIBATwQESE8W0mUQIECAAAECBAgQKEFAgJSwSuZIgAABAgQIECBAoCcCAqQnC+kyCBAgQIAAAQIECJQgIEBKWCVzJECAAAECBAgQINATAQHSk4V0GQQIECBAgAABAgRKEBAgJaySORIgQIAAAQIECBDoiYAA6clCugwCBAgQIECAAAECJQgIkBJWyRwJECBAgAABAgQI9ERAgPRkIV0GAQIECBAgQIAAgRIEBEgJq2SOBAgQIECAAAECBHoiIEB6spAugwABAgQIECBAgEAJAgKkhFUyRwIECBAgQIAAAQI9ERAgPVlIl0GAAAECBAgQIECgBAEBUsIqmSMBAgQIECBAgACBnggIkJ4spMsgQIAAAQIECBAgUIKAAClhlcyRAAECBAgQIECAQE8EBEhPFtJlECBAgAABAgQIEChBQICUsErmSIAAAQIECBAgQKAnAgKkJwvpMggQIECAAAECBAiUICBASlglcyRAgAABAgQIECDQEwEB0pOFdBkECBAgQIAAAQIEShAQICWskjkSIECAAAECBAgQ6ImAAOnJQroMAgQIECBAgAABAiUICJASVskcCRAgQIAAAQIECPREQID0ZCFdBgECBAgQIECAAIESBARICatkjgQIECBAgAABAgR6IiBAerKQLoMAAQIECBAgQIBACQICpIRVMkcCBAgQIECAAAECPREQID1ZSJdBgAABAgQIECBAoAQBAVLCKpkjAQIECBAgQIAAgZ4ICJCeLKTLIECAAAECBAgQIFCCgAApYZXMkQABAgQIECBAgEBPBARITxbSZRAgQIAAAQIECBAoQUCAlLBK5kiAAAECBAgQIECgJwICpCcL6TIIECBAgAABAgQIlCAgQEpYJXMkQIAAAQIECBAg0BOBhQfIwYMH04UXXngC10033ZT27NnTE0aXQYAAAQIECBAgQIBAjsDCA2RyEnfddVe66qqr0jXXXJN27NiRM0fHECBAgAABAgQIECDQE4HwANm3b18677zz0u7du3tC6DIIECBAgAABAgQIEMgVCA2Q6u7HDTfckK6++uq0devWDef41Kc+dfT3d9xxR+61OI4AAQIECBAgQIAAgSUXCA2Qje5+bNu2LR05cuQErsOHDy85oekRIECAAAECBAgQKEdg+/btnU42LEBmfe/HysrKCObYsWOdAhmcAAECBAgQIECAQJ8E6q+zu7qmsACp7n7s3Lkz+ydfCZCutoRxCRAgQIAAAQIE+iwwiACpHq167Wtfmy655JK0a9eurPUUIFlMDiJAgAABAgQIECAwk8AgAmTWx68qQQEy0z5yMAECBAgQIECAAIEsgUEESJbExEECpIma1xAgQIAAAQIECBDYWECATPERID50CBAgQIAAAQIECLQvIEAESPu7yhkJECBAgAABAgQIbPJ1dldAYT8Fa9YLdAdkVjHHEyBAgAABAgQIENhcwB0Qd0A23yWOIECAAAECBAgQINCSgAARIC1tJachQIAAAQIECBAgsLmAABEgm+8SRxAgQIAAAQIECBBoSUCACJCWtpLTECBAgAABAgQIENhcQIAIkM13iSMIECBAgAABAgQItCQgQARIS1vJaQgQIECAAAECBAhsLiBABMjmu8QRBAgQIECAAAECBFoSECACpKWt5DQECBAgQIAAAQIENhcQIAJk813iCAIECBAgQIAAAQItCQgQAdLSVnIaAgQIECBAgAABApsLCBABsvkucQQBAgQIECBAgACBlgQEiABpaSs5DQECBAgQIECAAIHNBQSIANl8lziCAAECBAgQIECAQEsCAkSAtLSVnIYAAQIECBAgQIDA5gICRIBsvkscQYAAAQIECBAgQKAlAQEiQFraSk5DgAABAgQIECBAYHMBASJANt8ljiBAgAABAgQIECDQkoAAESAtbSWnIUCAAAECBAgQILC5gAARIJvvEkcQIECAAAEC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33cs7fzw95b2ch69bUu6+9+ftrTzG8rE6ieNurre8ACpfiLWFVdcka666qq0a9euqdddwwiQrraGcQn8SECABO8GARICLkBCmNcGESAx3gIkxrn0UXofINXjVx/4wAfS3r17R2vlDkjpW9b8hyggQIJXXYCEgAuQEGYBEsucBEgweKHD9T5A6ui48MILR0s06+8BcQek0J1t2r0SECDByylAQsAFSAizAIllFiDB3qUON4gAabI4HsFqouY1BBYjIEAW4zr1rAIkBFyAhDALkFhmARLsXepwAmTKygmQUre0efdRQIAEr6oACQEXICHMAiSWWYAEe5c6nAARIKXuXfMekIAACV5sARICLkBCmAVILLMACfYudTgBIkBK3bvmPSABARK82AIkBFyAhDALkFhmARLsXepwAkSAlLp3zXtAAgIkeLEFSAi4AAlhFiCxzAIk2LvU4QSIACl175r3gAQESPBiC5AQcAESwixAYpkFSLB3qcMJEAFS6t417wEJCJDgxRYgIeACJIRZgMQyC5Bg71KHEyACpNS9a94DEhAgwYstQELABUgIswCJZRYgwd6lDidABEipe9e8ByQgQIIXW4CEgAuQEGYBEsssQIK9Sx1OgAiQUveueQ9IQIAEL7YACQEXICHMAiSWWYAEe5c6nAARIKXuXfMekIAACV5sARICLkBCmAVILLMACfYudTgBIkBK3bvmPSABARK82AIkBFyAhDALkFhmARLsXepwAkSAlLp3zXtAAgIkeLEFSAi4AAlhFiCxzAIk2LvU4QSIACl175r3gAQESPBiC5AQcAESwixAYpkFSLB3qcMJEAFS6t417wEJCJDgxRYgIeACJIRZgMQyC5Bg71KHEyACpNS9a94DEhAgwYstQELABUgIswCJZRYgwd6lDidABEipe9e8ByQgQIIXW4CEgAuQEGYBEsssQIK9Sx1OgAiQUveueQ9IQIAEL7YACQEXICHMAiSWWYAEe5c6nAARIKXuXfMekIAACV5sARICLkBCmAVILLMACfYudTgBIkBK3bvmPSABARK82AIkBFyAhDALkFhmARLsXepwAkSAlLp3zXtAAgIkeLEFSAi4AAlhFiCxzAIk2LvU4QSIACl175r3gAQESPBiC5AQcAESwixAYpkFSLB3qcMJEAFS6t417wEJCJDgxRYgIeACJIRZgMQyC5Bg71KHEyACpNS9a94DEhAgwYstQELABUgIswCJZRYgwd6lDidABEipe9e8ByQgQIIXW4CEgAuQEGYBEsssQIK9Sx1OgAiQUveueQ9IQIAEL7YACQEXICHMAiSWWYAEe5c6nAARIKXuXfMekIAACV5sARICLkBCmAVILLMACfYudTgBIkBK3bvmPSABARK82AIkBFyAhDALkFhmARLsXepwAkSAlLp3zXtAAgIkeLEFSAi4AAlhFiCxzAIk2LvU4QSIACl175r3gAQESPBiC5AQcAESwixAYpkFSLB3qcMJEAFS6t417wEJCJDgxRYgIeACJIRZgMQyC5Bg71KHEyACpNS9a94DEhAgwYstQELABUgIswCJZRYgwd6lDidABEipe9e8ByQgQIIXW4CEgAuQEGYBEsssQIK9Sx1OgAiQUveueQ9IQIAEL7YACQEXICHMAiSWWYAEe5c6nAARIKXuXfMekIAACV5sARICLkBCmAVILLMACfYudTgBIkBK3bvmPSABARK82AIkBFyAhDALkFhmARLsXepwAkSAlLp3zXtAAgIkeLEFSAi4AAlhFiCxzAIk2LvU4QSIACl175r3gAQESPBiC5AQcAESwixAYpkFSLB3qcMJEAFS6t417wEJCJDgxRYgIeACJIRZgMQyC5Bg71KHEyACpNS9a94DEhAgwYstQELABUgIswCJZRYgwd6lDidABEipe9e8ByQgQIIXW4CEgAuQEGYBEsssQIK9Sx1OgAiQUveueQ9IQIAEL7YACQEXICHMAiSWWYAEe5c6nAARIKXuXfMekIAACV5sARICLkBCmAVILLMACfYudTgBIkBK3bvmPSABARK82AIkBFyAhDALkFhmARLsXepwAkSAlLp3zXtAAgIkeLEFSAi4AAlhFiCxzAIk2LvU4QSIACl175r3gAQESPBiC5AQcAESwixAYpkFSLB3qcMJEAFS6t417wEJCJDgxRYgIeACJIRZgMQyC5Bg71KHEyACpNS9a94DEhAgwYstQELABUgIswCJZRYgwd6lDidABEipe9e8ByQgQIIXW4CEgAuQEGYBEsssQIK9Sx1uEAFy++23p3POOWe0RmeffXa6+eab065duzZcsxrm2LFjpa6teRPojYAACV5KARICLkBCmAVILLMACfYudbjeB8ihQ4fSddddl175ylemrVu3pipG9u3b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");
ByteArrayInputStream inImag = new ByteArrayInputStream(base64);
BufferedImage image = ImageIO.read(inImag);
Map<String,Object> ctx=new LinkedHashMap<>();
//文本
ctx.put("areaName","区域");
ctx.put("qualificationName2","技能鉴定");
//超链接
//ctx.put("baidu", Texts.of("website").link("http://deepoove.com").create());
int avatarImageWidth=134;
int avatarImageHeight=160;
List<Map<String, Object>> dclrUserListOrigin = new LinkedList<>();
ThreadLocalRandom random=ThreadLocalRandom.current();
int i1 = random.nextInt(10, 40);
System.out.println(i1);
IntStream.range(10,i1).mapToObj(i -> {
Map<String,Object> map=new HashMap<>();
map.put("name","姓名_"+i);
map.put("idCard","00000000000000"+random.nextInt(1000,9999));
return map;
}).forEach(dclrUserListOrigin::add);
System.out.println(dclrUserListOrigin);
List<Map<String, RenderData>> dclrUserList = new LinkedList<>();
int size = dclrUserListOrigin.size();
for(int i=0;i<size;i+=4){
Map<String, RenderData> rowMap=new LinkedHashMap<>();
//cell 1
Map<String, Object> originUser = dclrUserListOrigin.get(i);
String fullName1 = Optional.ofNullable(originUser.get("name")).map(String.class::cast).orElse("");
rowMap.put("fullName1",new TextRenderData(fullName1));
String idCardNo1 = Optional.ofNullable(originUser.get("idCard")).map(String.class::cast).orElse("");
rowMap.put("idCardNo1",new TextRenderData(idCardNo1));
// avatar image 1
rowMap.put("avatarImage1",
Pictures.ofBufferedImage(image ,PictureType.PNG)
.size(avatarImageWidth, avatarImageHeight).create());
//cell 2
if(i+1<size){
Map<String, Object> originUser2 = dclrUserListOrigin.get(i+1);
String fullName2 = Optional.ofNullable(originUser2.get("name")).map(String.class::cast).orElse("");
rowMap.put("fullName2",new TextRenderData(fullName2));
String idCardNo2 = Optional.ofNullable(originUser2.get("idCard")).map(String.class::cast).orElse("");
rowMap.put("idCardNo2",new TextRenderData(idCardNo2));
rowMap.put("avatarImage2",
Pictures.ofBufferedImage(image,PictureType.PNG)
.size(avatarImageWidth, avatarImageHeight).create());
}
//cell 3
if(i+2<size){
Map<String, Object> originUser3 = dclrUserListOrigin.get(i+2);
String fullName3 = Optional.ofNullable(originUser3.get("name")).map(String.class::cast).orElse("");
rowMap.put("fullName3",new TextRenderData(fullName3));
String idCardNo3 = Optional.ofNullable(originUser3.get("idCard")).map(String.class::cast).orElse("");
rowMap.put("idCardNo3",new TextRenderData(idCardNo3));
rowMap.put("avatarImage3",
Pictures.ofBufferedImage(image,PictureType.PNG)
.size(avatarImageWidth, avatarImageHeight).create());
}
//cell 3
if(i+3<size){
Map<String, Object> originUser4 = dclrUserListOrigin.get(i+3);
String fullName4 = Optional.ofNullable(originUser4.get("name")).map(String.class::cast).orElse("");
rowMap.put("fullName4",new TextRenderData(fullName4));
String idCardNo4 = Optional.ofNullable(originUser4.get("idCard")).map(String.class::cast).orElse("");
rowMap.put("idCardNo4",new TextRenderData(idCardNo4));
rowMap.put("avatarImage4",
Pictures.ofBufferedImage(image,PictureType.PNG)
.size(avatarImageWidth, avatarImageHeight).create());
}
// row end
dclrUserList.add(rowMap);
}
System.out.println(dclrUserList);
ctx.put("list",dclrUserList);
String fileName="demo-"+System.currentTimeMillis()+".docx";
System.out.println(fileName);
// HttpServletResponseUtils.setDownloadHeader(fileName,response);
response.setContentType("application/octet-stream");
response.setHeader("Content-disposition","attachment;filename="+ URLEncoder.encode(fileName, "UTF-8"));
InputStream in = this.getClass().getClassLoader().getResourceAsStream("templates/poiTl/demo.docx");
XWPFTemplate template = XWPFTemplate
.compile(in)
.render(ctx);
template.writeAndClose(response.getOutputStream());
}
/**
* 作者: shanc
* 时间: 2021/4/19 14:38
* 描述: 使用poi-tl 根据word模板导出word 数据列表
*/
@GetMapping("/poiTL-demo")
public void poiTlDemo(HttpServletResponse response) throws IOException {
//模拟图片
int avatarImageWidth=134;
int avatarImageHeight=160;
byte[] base64 = Base64.decodeBase64("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iVjrvaF8s5/KlaXc0S8iXO8RrDe96U3pb/7mb0bTrt5oXt0pesQjHjH6hYzr/bSsaT8iub4LUp1n/JG1TnyzFsFBBAgQWG4BAbLc62N2BAi0LPCK/3l/esvd32/5rD863ct2npLe9KQf/cK7+m/e8pa3zPxTp6rX1m+crt4TMv7L9MZjo/oO/pe//OXRj9wdf89G9UV29d/Hf5t59b+95z3vGU3rb//2b7McZvopWN84kNK3P5R13kYHbX9WSg8/8XeNrBdPlXn1u1PGA6/636o/9e8BWS/+1rsDUr1uKXwboXkRAQIElktAgCzXepgNAQIBAlWEvPurD6Rvfn+1tdEedspKesEjT143PlobpJQTVRFy739P6cEWf+v8SWekdOa/XTc+SmExTwIECBD4oYAAsRMIECAwp8ADx1bTyVtW5jyLl08VWH0wpZWTABEgQIBATwQESE8W0mUQIECAAAECBAgQKEFAgJSwSuZIgAABAgQIECBAoCcCAqQnC+kyCBAgQIAAAQIECJQgIEBKWCVzJECAAAECBAgQINATAQHSk4V0GQQIECBAgAABAgRKEBAgJaySORIgQIAAAQIECBDoiYAA6clCugwCBAgQIECAAAECJQgIkBJWyRwJECBAgAABAgQI9ERAgPRkIV0GAQIECBAgQIAAgRIEBEgJq2SOBAgQIECAAAECBHoiIEB6spAugwABAgQIECBAgEAJAgKkhFUyRwIECBAgQIAAAQI9ERAgPVlIl0GAAAECBAgQIECgBAEBUsIqmSMBAgQIECBAgACBnggIkJ4spMsgQIAAAQIECBAgUIKAAClhlcyRAAECBAgQIECAQE8EBEhPFtJlECBAgAABAgQIEChBQICUsErmSIAAAQIECBAgQKAnAgKkJwvpMggQIECAAAECBAiUICBASlglcyRAgAABAgQIECDQEwEB0pOFdBkECBAgQIAAAQIEShAQICWskjkSIECAAAECBAgQ6ImAAOnJQroMAgQIECBAgAABAiUICJASVskcCRAgQIAAAQIECPREQID0ZCFdBgECBAgQIECAAIESBARICatkjgQIECBAgAABAgR6IiBAerKQLoMAAQIECBAgQIBACQICpIRVMkcCBAgQIECAAAECPREQID1ZSJdBgAABAgQIECBAoAQBAVLCKpkjAQIECBAgQIAAgZ4ICJCeLKTLIECAAAECBAgQIFCCgAApYZXMkQABAgQIECBAgEBPBARITxbSZRAgQIAAAQIECBAoQUCAlLBK5kiAAAECBAgQIECgJwICpCcL6TIIECBAgAABAgQIlCAgQEpYJXMkQIAAAQIECBAg0BOBhQfIwYMH04UXXngC10033ZT27NnTE0aXQYAAAQIECBAgQIBAjsDCA2RyEnfddVe66qqr0jXXXJN27NiRM0fHECBAgAABAgQIECDQE4HwANm3b18677zz0u7du3tC6DIIECBAgAABAgQIEMgVCA2Q6u7HDTfckK6++uq0devWDef41Kc+dfT3d9xxR+61OI4AAQIECBAgQIAAgSUXCA2Qje5+bNu2LR05cuQErsOHDy85oekRIECAAAECBAgQKEdg+/btnU42LEBmfe/HysrKCObYsWOdAhmcAAECBAgQIECAQJ8E6q+zu7qmsACp7n7s3Lkz+ydfCZCutoRxCRAgQIAAAQIE+iwwiACpHq167Wtfmy655JK0a9eurPUUIFlMDiJAgAABAgQIECAwk8AgAmTWx68qQQEy0z5yMAECBAgQIECAAIEsgUEESJbExEECpIma1xAgQIAAAQIECBDYWECATPERID50CBAgQIAAAQIECLQvIEAESPu7yhkJECBAgAABAgQIbPJ1dldAYT8Fa9YLdAdkVjHHEyBAgAABAgQIENhcwB0Qd0A23yWOIECAAAECBAgQINCSgAARIC1tJachQIAAAQIECBAgsLmAABEgm+8SRxAgQIAAAQIECBBoSUCACJCWtpLTECBAgAABAgQIENhcQIAIkM13iSMIECBAgAABAgQItCQgQARIS1vJaQgQIECAAAECBAhsLiBABMjmu8QRBAgQIECAAAECBFoSECACpKWt5DQECBAgQIAAAQIENhcQIAJk813iCAIECBAgQIAAAQItCQgQAdLSVnIaAgQIECBAgAABApsLCBABsvkucQQBAgQIECBAgACBlgQEiABpaSs5DQECBAgQIECAAIHNBQSIANl8lziCAAECBAgQIECAQEsCAkSAtLSVnIYAAQIECBAgQIDA5gICRIBsvkscQYAAAQIECBAgQKAlAQEiQFraSk5DgAABAgQIECBAYHMBASJANt8ljiBAgAABAgQIECDQkoAAESAtbSWnIUCAAAECBAgQILC5gAARIJvvEkcQIECAAAEC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33cs7fzw95b2ch69bUu6+9+ftrTzG8rE6ieNurre8ACpfiLWFVdcka666qq0a9euqdddwwiQrraGcQn8SECABO8GARICLkBCmNcGESAx3gIkxrn0UXofINXjVx/4wAfS3r17R2vlDkjpW9b8hyggQIJXXYCEgAuQEGYBEsucBEgweKHD9T5A6ui48MILR0s06+8BcQek0J1t2r0SECDByylAQsAFSAizAIllFiDB3qUON4gAabI4HsFqouY1BBYjIEAW4zr1rAIkBFyAhDALkFhmARLsXepwAmTKygmQUre0efdRQIAEr6oACQEXICHMAiSWWYAEe5c6nAARIKXuXfMekIAACV5sARICLkBCmAVILLMACfYudTgBIkBK3bvmPSABARK82AIkBFyAhDALkFhmARLsXepwAkSAlLp3zXtAAgIkeLEFSAi4AAlhFiCxzAIk2LvU4QSIACl175r3gAQESPBiC5AQcAESwixAYpkFSLB3qcMJEAFS6t417wEJCJDgxRYgIeACJIRZgMQyC5Bg71KHEyACpNS9a94DEhAgwYstQELABUgIswCJZRYgwd6lDidABEipe9e8ByQgQIIXW4CEgAuQEGYBEsssQIK9Sx1OgAiQUveueQ9IQIAEL7YACQEXICHMAiSWWYAEe5c6nAARIKXuXfMekIAACV5sARICLkBCmAVILLMACfYudTgBIkBK3bvmPSABARK82AIkBFyAhDALkFhmARLsXepwAkSAlLp3zXtAAgIkeLEFSAi4AAlhFiCxzAIk2LvU4QSIACl175r3gAQESPBiC5AQcAESwixAYpkFSLB3qcMJEAFS6t417wEJCJDgxRYgIeACJIRZgMQyC5Bg71KHEyACpNS9a94DEhAgwYstQELABUgIswCJZRYgwd6lDidABEipe9e8ByQgQIIXW4CEgAuQEGYBEsssQIK9Sx1OgAiQUveueQ9IQIAEL7YACQEXICHMAiSWWYAEe5c6nAARIKXuXfMekIAACV5sARICLkBCmAVILLMACfYudTgBIkBK3bvmPSABARK82AIkBFyAhDALkFhmARLsXepwAkSAlLp3zXtAAgIkeLEFSAi4AAlhFiCxzAIk2LvU4QSIACl175r3gAQESPBiC5AQcAESwixAYpkFSLB3qcMJEAFS6t417wEJCJDgxRYgIeACJIRZgMQyC5Bg71KHEyACpNS9a94DEhAgwYstQELABUgIswCJZRYgwd6lDidABEipe9e8ByQgQIIXW4CEgAuQEGYBEsssQIK9Sx1OgAiQUveueQ9IQIAEL7YACQEXICHMAiSWWYAEe5c6nAARIKXuXfMekIAACV5sARICLkBCmAVILLMACfYudTgBIkBK3bvmPSABARK82AIkBFyAhDALkFhmARLsXepwAkSAlLp3zXtAAgIkeLEFSAi4AAlhFiCxzAIk2LvU4QSIACl175r3gAQESPBiC5AQcAESwixAYpkFSLB3qcMJEAFS6t417wEJCJDgxRYgIeACJIRZgMQyC5Bg71KHEyACpNS9a94DEhAgwYstQELABUgIswCJZRYgwd6lDidABEipe9e8ByQgQIIXW4CEgAuQEGYBEsssQIK9Sx1OgAiQUveueQ9IQIAEL7YACQEXICHMAiSWWYAEe5c6nAARIKXuXfMekIAACV5sARICLkBCmAVILLMACfYudTgBIkBK3bvmPSABARK82AIkBFyAhDALkFhmARLsXepwAkSAlLp3zXtAAgIkeLEFSAi4AAlhFiCxzAIk2LvU4QSIACl175r3gAQESPBiC5AQcAESwixAYpkFSLB3qcMJEAFS6t417wEJCJDgxRYgIeACJIRZgMQyC5Bg71KHEyACpNS9a94DEhAgwYstQELABUgIswCJZRYgwd6lDidABEipe9e8ByQgQIIXW4CEgAuQEGYBEsssQIK9Sx1OgAiQUveueQ9IQIAEL7YACQEXICHMAiSWWYAEe5c6nAARIKXuXfMekIAACV5sARICLkBCmAVILLMACfYudTgBIkBK3bvmPSABARK82AIkBFyAhDALkFhmARLsXepwAkSAlLp3zXtAAgIkeLEFSAi4AAlhFiCxzAIk2LvU4QSIACl175r3gAQESPBiC5AQcAESwixAYpkFSLB3qcMJEAFS6t417wEJCJDgxRYgIeACJIRZgMQyC5Bg71KHEyACpNS9a94DEhAgwYstQELABUgIswCJZRYgwd6lDidABEipe9e8ByQgQIIXW4CEgAuQEGYBEsssQIK9Sx1uEAFy++23p3POOWe0RmeffXa6+eab065duzZcsxrm2LFjpa6teRPojYAACV5KARICLkBCmAVILLMACfYudbjeB8ihQ4fSddddl175ylemrVu3pipG9u3b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");
ByteArrayInputStream inImag = new ByteArrayInputStream(base64);
BufferedImage image = ImageIO.read(inImag);
Map<String ,Object> ctx=new HashMap<>();
ctx.put("title","poi-tl测试");
ctx.put("date",new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
List<Map<String,RenderData>>list=new ArrayList<>();
ThreadLocalRandom random=ThreadLocalRandom.current();
IntStream.range(10,random.nextInt(10,40)).mapToObj(i ->
{
Map<String, RenderData> rowMap=new LinkedHashMap<>();
rowMap.put("name", new TextRenderData("name_"+i));
rowMap.put("age", new TextRenderData(String.valueOf(i)));
rowMap.put("bufferImg", Pictures.ofBufferedImage(image,PictureType.PNG)
.size(avatarImageWidth, avatarImageHeight).create() );
return rowMap;
}
).forEach(list::add);
ctx.put("list",list);
String fileName="listDemo-"+System.currentTimeMillis()+".docx";
System.out.println(fileName);
// HttpServletResponseUtils.setDownloadHeader(fileName,response);
response.setContentType("application/octet-stream");
response.setHeader("Content-disposition","attachment;filename="+ URLEncoder.encode(fileName, "UTF-8"));
InputStream in = this.getClass().getClassLoader().getResourceAsStream("templates/poiTl/listDemo.docx");
XWPFTemplate template = XWPFTemplate
.compile(in)
.render(ctx);
template.writeAndClose(response.getOutputStream());
}
@GetMapping("/poiTL-demo2")
public void poiTLDemo2(HttpServletResponse response) throws IOException {
String fileName="poiTL-demo2-"+System.currentTimeMillis()+".docx";
System.out.println(fileName);
HttpServletResponseUtils.setDownloadHeader(fileName,response);
// 查询数据
RvDclrInfoFO rvDclrInfoFO =new RvDclrInfoFO();
rvDclrInfoFO.setYear(2021);
rvDclrInfoFO.setSeries("AA");
rvDclrInfoFO.setProjLevel("AA");
rvDclrInfoFO.setUserName("张三");
rvDclrInfoFO.setSex("男");
rvDclrInfoFO.setWorkExperience("111111111111111111111");
rvDclrInfoFO.setMainWorkResult("1111111111111111");
RvDclrBasicInfoFO base=new RvDclrBasicInfoFO();
base.setWe("工作成绩-EXCELLENT、GOOD、PASS");
base.setBe("业务能力-EXCELLENT、GOOD、PASS");
base.setPe("工作态度-EXCELLENT、GOOD、PASS");
base.setWte("职业道德-EXCELLENT、GOOD、PASS");
rvDclrInfoFO.setBasic(base);
InputStream in = this.getClass().getClassLoader().getResourceAsStream("templates/poiTl/table-look-up.docx");
XWPFTemplate template = XWPFTemplate
.compile(in)
.render(rvDclrInfoFO);
template.writeAndClose(response.getOutputStream());
}
}
3.模板位置
4.模板内容
TL.docx模板
测试
http://localhost:9001/poi-tl/testWord
demo.doc 模板
测试
localhost:9001/poi-tl/check-in-form-v2-export-demo
打开下载文件
listDemo.docx 模板
测试
localhost:9001/poi-tl/poiTL-demo
打开下载文件
table-look-up.docx 模板
测试
localhost:9001/poi-tl/poiTL-demo2
打开下载文件