1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > EasyPoi模板导出word(简单文本 内嵌表格 循环图片)

EasyPoi模板导出word(简单文本 内嵌表格 循环图片)

时间:2023-02-13 17:10:32

相关推荐

EasyPoi模板导出word(简单文本 内嵌表格 循环图片)

EasyPoi模板导出word(简单文本、内嵌表格、循环图片)

先上效果图

模板在此

依赖导入

*坑:注意依赖版本 4.3.0+才支持多图片循环导出

<!-- word导出 方式:easypoi--><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.3.0</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-web</artifactId><version>4.3.0</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-annotation</artifactId><version>4.3.0</version></dependency><!--注意:word中要使用循环等标签必须单独导入以下依赖--><dependency><groupId>org.apache.poi</groupId><artifactId>ooxml-schemas</artifactId><version>1.4</version></dependency>

工具类(网上复制的)

import java.io.File;import java.io.FileOutputStream;import java.io.OutputStream;import .URLEncoder;import java.util.Map;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.poi.xwpf.usermodel.XWPFDocument;import org.springframework.util.Assert;import cn.afterturn.easypoi.word.WordExportUtil;/*** @ClassName WordUtil2* @Description 描述:easypoi导出工具类* @Author LIJI* @Date /6/29 15:27* @Version 1.0**/public class WordUtil2 {/*** 导出word* <p>第一步生成替换后的word文件,只支持docx</p>* <p>第二步下载生成的文件</p>* <p>第三步删除生成的临时文件</p>* 模版变量中变量格式:{{foo}}* @param templatePath word模板地址* @param temDir 生成临时文件存放地址* @param fileName 文件名* @param params 替换的参数* @param request HttpServletRequest* @param response HttpServletResponse*/public static void exportWord(String templatePath, String temDir, String fileName, Map<String, Object> params, HttpServletRequest request, HttpServletResponse response) {Assert.notNull(templatePath,"模板路径不能为空");Assert.notNull(temDir,"临时文件路径不能为空");Assert.notNull(fileName,"导出文件名不能为空");Assert.isTrue(fileName.endsWith(".docx"),"word导出请使用docx格式");if (!temDir.endsWith("/")){temDir = temDir + File.separator;}File dir = new File(temDir);if (!dir.exists()) {dir.mkdirs();}try {String userAgent = request.getHeader("user-agent").toLowerCase();if (userAgent.contains("msie") || userAgent.contains("like gecko")) {fileName = URLEncoder.encode(fileName, "UTF-8");} else {fileName = new String(fileName.getBytes("utf-8"), "ISO-8859-1");}XWPFDocument doc = WordExportUtil.exportWord07(templatePath, params);String tmpPath = temDir + fileName;FileOutputStream fos = new FileOutputStream(tmpPath);doc.write(fos);// 设置强制下载不打开response.setContentType("application/force-download");// 设置文件名response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);OutputStream out = response.getOutputStream();doc.write(out);out.close();} catch (Exception e) {e.printStackTrace();} finally {delFileWord(temDir,fileName);//这一步看具体需求,要不要删}}/*** 删除零时生成的文件*/public static void delFileWord(String filePath, String fileName) {File file = new File(filePath + fileName);File file1 = new File(filePath);file.delete();file1.delete();}}

逻辑代码

import cn.afterturn.easypoi.entity.ImageEntity;import cn.afterturn.easypoi.excel.export.base.ExportCommonService;import cn.afterturn.easypoi.word.parse.excel.ExcelEntityParse;import cn.gzzy.util.WordUtil2;import org.springframework.core.io.ClassPathResource;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import javax.imageio.ImageIO;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.awt.image.BufferedImage;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.InputStream;import java.util.*;/***@ClassNameExportWordController*@Description描述:**@Date/6/29 15:29*@Version1.0**/@RestController@RequestMapping("/export/")public class ExportWordController extends ExportCommonService {/*** easypoi导出word*/@GetMapping("word/demo1")public void easyExportWord1(HttpServletRequest request, HttpServletResponse response) throws Exception {Map<String, Object> params = new HashMap<>();String templatePath = "template/demo1.docx"; //模板路径//简单渲染文本params.put("title1","暑期放假通知");params.put("body","经市教委研究决定,暑期假日,于7月12日开始至9月10日结束。祝大家,节日快乐!");params.put("date","-06-29");params.put("card","市教育局");params.put("title2","暑期值班人员表");//图片 读取方式: 1、字节流 2、路径/*ByteArrayOutputStream out = new ByteArrayOutputStream();ClassPathResource resource = new ClassPathResource("static/log.jpg");InputStream inputStream = resource.getInputStream();BufferedImage read = ImageIO.read(inputStream);ImageIO.write(read,"jpg",out);*/ImageEntity image = new ImageEntity();image.setHeight(30);image.setWidth(30);image.setUrl("static/log.jpg"); //url路径//image.setData(out.toByteArray()); //字节流读取//设置读取图片方式(必须)image.setType(ImageEntity.URL);//表格外添加简单图片params.put("img", image);//渲染表格List<Map<String, Object>> jobs = new ArrayList<>();Map<String, Object> job;for (int i = 0; i < 5; i++) {job = new HashMap<>();job.put("name", "洪不亮-" + i);job.put("sex", "男:" + i);job.put("dept", "开发部:" + i);//表格内循环添加图片(easypoi 4.3以后才支持,不然只能打印出ImageEntity的内存地址)job.put("img", image);jobs.add(job);}//添加params.put("jobs",jobs);String temDir="D:/mimi/"+ File.separator+"file/word/"; ;//生成临时文件存放地址//生成文件名Long time = new Date().getTime();// 生成的word格式String formatSuffix = ".docx";// 拼接后的文件名String fileName = time + formatSuffix;//文件名 带后缀//导出wordWordUtil2.exportWord(templatePath, temDir, fileName, params, request, response);}}

<<<超链接>>>鸣谢!果然只有大佬的博客,开篇才会点出重点!!!<<<超链接>>>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。