当前位置: 首页 > news >正文

网站开发试题济南疫情最新情况

网站开发试题,济南疫情最新情况,广东省白云区,犍为移动网站建设目录 需求一、准备模板文件二、引入Poi-tl、Apache POI依赖三、创建实体类(用于保存向Word中写入的数据)四、实现Service接口五、Controller层实现 需求 在服务端提前准备好Word模板文件,并在用户请求接口时服务端动态获取图片。数据等信息插…

目录

    • 需求
    • 一、准备模板文件
    • 二、引入Poi-tl、Apache POI依赖
    • 三、创建实体类(用于保存向Word中写入的数据)
    • 四、实现Service接口
    • 五、Controller层实现

需求

在服务端提前准备好Word模板文件,并在用户请求接口时服务端动态获取图片。数据等信息插入到模板当中,然后返回包含数据信息的Word文件流。

一、准备模板文件

在需要插入图片的地方使用:{{@参数名}},文本信息使用:{{参数名}},进行占位,占位格式将会被保留,经过处理后格式不变

在这里插入图片描述

将准备好的模板文件放在resources目录下

blog.csdnimg.cn/direct/6d1474091083427483e11ea71e25ef51.png)

二、引入Poi-tl、Apache POI依赖

poi-tl(poi template language)是Word模板引擎,基于Apache POI,提供更友好的API,使用起来更加简单
版本对应关系参考Poi-tl官网

<!--    替换自己使用的版本    -->
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.*</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.*</version>
</dependency>
<!--    Word模板引擎    -->
<dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.7.*</version>
</dependency>

三、创建实体类(用于保存向Word中写入的数据)

参数名必须同Word模板中的参数名称保持一致

import com.deepoove.poi.data.PictureRenderData;@Data
public class DownloadDate {//图片使用PictureRenderData类型private PictureRenderData image;private String name;private String a;private String b;private String c;private String d;private String e;private String f;private String g;private String h;private String i;
}

四、实现Service接口

public interface DownloadService {void download(HttpServletResponse response, DownloadDTO downloadDTO) throws IOException;
}

@Service
@Slf4j
public class DownloadServiceImpl implements DownloadService {@Resource//远程调用服务private FeignService feignService;@Overridepublic void download(HttpServletResponse response, DownloadDTO downloadDTO) throws IOException {BufferedImage、字节数组),Base64可以转字节数组后使用//通过调用其它接口获取待写入的数据信息WordData wordData = feignService.getData(downloadDTO);/** * 图片可以是多种格式------------------------* 图片路径:PictureRenderData(int width, int height, String path)* File:PictureRenderData(int width, int height, File picture)* InputStream:PictureRenderData(int width, int height, String format, InputStream input)* BufferedImage:PictureRenderData(int width, int height, String format, BufferedImage image)* 字节数组:PictureRenderData(int width, int height, String format, byte[] data)* Base64可以转字节数组后使用*///以Base64为例,先获取图片的Base64编码(wordData.getImg是原始图片Base64数据)String base64ImageData = wordData.getImg.substring(data.indexOf(",") + 1);//获取图片类型String format = getBase64Type(base64ImageData);// 将base64数据转为字节数组byte[] imageBytes = Base64.getDecoder().decode(base64ImageData);// 将字节数组包装成PictureRenderDataPictureRenderData pictureRenderData = new PictureRenderData(690,530,format,imageBytes);//待写入Word的数据DownloadDate downloadDate = new DownloadDate();//图片信息downloadDate.setImage(pictureRenderData);//其它信息downloadDate.setName(wordData.getName());//...XWPFTemplate template = null;BufferedOutputStream bufferedOutputStream = null;ServletOutputStream outputStream = null;try {/** * 该方法会导致在部分环境中资源找不到的情况,不推荐使用*///获得resource路径+模板路径//String path = Objects.requireNonNull(Thread.currentThread().getContextClassLoader().getResource("")).getPath() + "word/template.docx";// 读取Word模板//FileInputStream templateInputStream = new FileInputStream(path);// 模板绑定数据//template = XWPFTemplate.compile(templateInputStream).render(imageDownloadDate);// 从资源中加载Word模板try (InputStream templateInputStream = getClass().getClassLoader().getResourceAsStream("word/template.docx")) {if (templateInputStream != null) {// 模板绑定数据template = XWPFTemplate.compile(templateInputStream).render(imageDownloadDate);} else {// 处理模板资源未找到的情况log.error("Word模板资源未找到");response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);return;}}//文件名String encodedFileName = URLEncoder.encode(System.currentTimeMillis()+"", "utf-8");//设置响应信息response.setHeader("Content-Disposition", "attachment;filename=" + encodedFileName + ".docx");response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");response.setCharacterEncoding("utf-8");outputStream = response.getOutputStream();bufferedOutputStream = new BufferedOutputStream(outputStream);template.write(bufferedOutputStream);//清空流bufferedOutputStream.flush();outputStream.flush();} catch (Exception e) {log.info(e.getMessage());response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);} finally {//关闭资源PoitlIOUtils.closeQuietlyMulti(template, bufferedOutputStream, outputStream);}}//根据base64编码获取图片格式信息private String getBase64Type(String base64) {byte[] b = Base64.getDecoder().decode(base64);String type = ".png";if (0x424D == ((b[0] & 0xff) << 8 | (b[1] & 0xff))) {type = ".bmp";} else if (0x8950 == ((b[0] & 0xff) << 8 | (b[1] & 0xff))) {type = ".png";} else if (0xFFD8 == ((b[0] & 0xff) << 8 | (b[1] & 0xff))) {type = ".jpg";} else if (0x49492A00 == ((b[0] & 0xff) << 24 | (b[1] & 0xff) << 16 | (b[2] & 0xff) << 8 | (b[3] & 0xff))) {type = ".tif";}return type;}}

五、Controller层实现

@RestController
@RequestMapping("/test")
@Api(tags = "获取商品图片")
public class GetImageController {@ResourceDownloadService downloadService;@PostMapping("/download")@ApiOperation(value = "下载Word")void download(HttpServletResponse response,@RequestBody DownloadDTO downloadDTO) throws IOException {//鉴权或其它处理//....downloadService.download(response,downloadDTO);}}
http://www.khdw.cn/news/32319.html

相关文章:

  • 凡科用模板做网站企业seo推广
  • 网站的优缺点什么是网站推广优化
  • 做美缝在哪个网站接单南京百度seo公司
  • 网络科技有限公司职位东莞seo软件
  • 做纺织生意用什么网站好冯耀宗seo课程
  • 网站备案系统源码站长工具在线
  • 网站更换空间教程软件开发公司网站
  • 可拖拽编程网站开发花西子网络营销策划方案
  • 鄂州新闻网seo快速排名软件网址
  • 做新房用哪个网站好免费制作个人网站
  • 深圳网站设计 商城网上营销
  • 网站建设岗位职责seo网站排名后退
  • 中国建设教育协会的网站查询今日头条荆州新闻
  • 中山精品网站建设策划个人网站搭建
  • 仓储网站开发软文案例200字
  • 查询邮箱注册网站天津网站制作系统
  • 浙江做电缆桥架的公司网站友情链接分析
  • 莆田网站建设怎么推广软件
  • vps怎么上传网站程序百度网盘官网网页版
  • 在线精品课程网站开发企业关键词排名优化哪家好
  • 设计方案介绍百度seo优化系统
  • 长春网站建设q479185700惠科学新概念外链平台
  • 平顶山公司做网站东莞网络营销网络推广系统
  • 温州网站建设最新报价各大免费推广网站
  • wordpress 3.8页面伪静态化 htmlseo学校
  • 论文个人网站建设搜索引擎优化课程
  • 投资网站建设方案网站推广的技术有哪些
  • 做网站咨询seo专业推广
  • 大学帮学校做网站百度推广客户端手机版
  • 设计素材网站模板重庆seo网络推广优化