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

北关网站制作央视新闻的新闻

北关网站制作,央视新闻的新闻,巨鹿网站建设公司,企业网站建设注意点一、场景 将数据导出word后且实现动态勾选复选框操作 eg: word模板 导出后效果&#xff08;根据数据动态勾选复选框&#xff09; 二、解决方案及涉及技术 ① 使用poi提供的库进行处理&#xff08;poi官方文档&#xff09; ② 涉及依赖 <!-- excel工具 --><depen…

一、场景

将数据导出word后且实现动态勾选复选框操作
eg: word模板
在这里插入图片描述
导出后效果(根据数据动态勾选复选框)
在这里插入图片描述

二、解决方案及涉及技术

① 使用poi提供的库进行处理(poi官方文档)
② 涉及依赖

 <!-- excel工具 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>${poi.version}</version></dependency>
  <!-- pio处理word文件操作复选框--><dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.9.1</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>ooxml-schemas</artifactId><version>1.4</version></dependency>

三、代码实现

word单个/批量下载工具类
在操作模板时,我们需先将写入word模板的数据构建为Map
① 数据封装处理(TrafficBlock 对象)

public Map buildTrafficDataForm(TrafficBlock trafficBlock){BlockDownLoadDataForm dataForm = new BlockDownLoadDataForm();BeanUtils.copyProperties(trafficBlock, dataForm);dataForm.setDirection(EventInfoDirection.getDirection(trafficBlock.getDirection()).getMessage());// 涉桥/涉隧dataForm.setInvolveNo(String.valueOf(trafficBlock.getInvolveNumber()));// 模板数据处理dataForm.setStartToEndPile("K"+trafficBlock.getStartKilometersPile()+"+"+trafficBlock.getStartHectometerPile()+"至"+trafficBlock.getEndKilometersPile()+"+"+trafficBlock.getEndHectometerPile());dataForm.setAffectedStartToEndPile("K"+trafficBlock.getAffectedStartKilometersPile()+"+"+trafficBlock.getAffectedStartHectometerPile()+"至"+trafficBlock.getAffectedEndKilometersPile()+"+"+trafficBlock.getAffectedEndHectometerPile());// 阻断类别(突发类才会有)String blockCategory = String.valueOf(trafficBlock.getBlockCategory());// checkBox处理if("1".equals(trafficBlock.getBlockNature())){// 计划类dataForm.setPlanCheckBox(String.valueOf(trafficBlock.getBlockType()));}else{ //突发类if("1".equals(blockCategory)){// 地质灾害dataForm.setGeologyCheckBox(String.valueOf(trafficBlock.getBlockType()));}else if("2".equals(blockCategory)){// 重大灾害dataForm.setGreatCheckBox(String.valueOf(trafficBlock.getBlockType()));}else if("3".equals(blockCategory)){// 气象灾害dataForm.setWeatherCheckBox(String.valueOf(trafficBlock.getBlockType()));}else if("4".equals(blockCategory)){// 事故灾害dataForm.setAccidentCheckBox(String.valueOf(trafficBlock.getBlockType()));}else if("5".equals(blockCategory)){// 其他dataForm.setOtherCheckBox(String.valueOf(trafficBlock.getBlockType()));}}return convertTrafficBlockToMap(dataForm);
}

② dataMap构建工具

public static Map<String, String> convertTrafficBlockToMap(BlockDownLoadDataForm downLoadDataForm) {Map<String, String> valueMap = new HashMap<>();Class<?> clazz = downLoadDataForm.getClass();for (Field field : clazz.getDeclaredFields()) {field.setAccessible(true);try {Object fieldValue = field.get(downLoadDataForm);if (fieldValue == null) {valueMap.put(field.getName(), "");} else {valueMap.put(field.getName(), String.valueOf(fieldValue));}} catch (IllegalAccessException e) {e.printStackTrace();}}return valueMap;}

此处需要注意在多个文件下载时,每次向ZipOutputStream 写入字节流时,需要为每个生成的 Word 文件提供一个唯一的名称(写入的文件名必须不一致)否则会导致每次写入的流覆盖之前的,导致浏览器不能正确解析,进而下载失败!!!

// *****(Word单个/批量下载)public void generateTrafficWordForm(HttpServletResponse response, List<Long> ids) throws IOException {List<TrafficBlock> trafficBlocks = trafficBlockMapper.selectList(new LambdaQueryWrapper<TrafficBlock>().in(TrafficBlock::getId, ids));if (ids.size() == 1){// 单个下载Map dataMap = buildTrafficDataForm(trafficBlocks.get(0));response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=***记录表.docx");response.setContentType(String.valueOf(MediaType.APPLICATION_OCTET_STREAM));try (OutputStream out = response.getOutputStream()) {writeTrafficWordForm(dataMap, out);}}else if (ids.size()  > 1) {// 多个文件压缩下载response.setContentType("application/zip");response.setCharacterEncoding("UTF-8");response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode("交通阻断.zip", "UTF-8"));try (ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream())) {for (TrafficBlock trafficBlock : trafficBlocks) {Map dataMap = buildTrafficDataForm(trafficBlock);ByteArrayOutputStream wordStream = new ByteArrayOutputStream();writeTrafficWordForm(dataMap, wordStream);// 为每个文件生成唯一的名称String uniqueFileName = "*****_" + trafficBlock.getId() + ".docx";zipOut.putNextEntry(new ZipEntry(uniqueFileName));zipOut.write(wordStream.toByteArray());zipOut.closeEntry();}} catch (IOException e) {throw new RuntimeException(e);}}}

poi工具类读取模板处理数据工具:

public void writeTrafficWordForm(Map<String, String> dataMap,OutputStream outputStream) {/***  复选框* *///需要循环的表单数据dataMap.put("dataTable", String.valueOf(new ArrayList<>()));ConfigureBuilder configureBuilder = Configure.builder().useSpringEL().bind("dataTable", new HackLoopTableRenderPolicy());Configure config = configureBuilder.build();InputStream is = null;try {// 读取Word模板文件,获取输入流is = new ClassPathResource("template/profile/交通阻断记录表.docx").getInputStream();XWPFTemplate template = XWPFTemplate.compile(is, config).render(dataMap);template.write(outputStream);outputStream.flush();PoitlIOUtils.closeQuietlyMulti(template, outputStream);} catch (IOException e) {log.error("失败!!!!!!", e);} finally {if (null != is) {try {is.close();} catch (IOException e) {log.error("关闭流失败!", e);}}}}
http://www.hkea.cn/news/626838/

相关文章:

  • wordpress 怎么改中文网站推广优化价格
  • 南山做网站公司怎么选择企业seo优化服务
  • 什么 电子商务网站建设与管百度招商加盟
  • 南召微网站开发手机优化大师官方版
  • 营销型网站技术特点网站推广网
  • 龙游县住房和城乡建设局网站百度seo优化方法
  • 深圳方维网站建设设计个人网站
  • wordpress 流量站百度应用
  • ps素材网seo在线工具
  • 岳阳网站开发公司html网站模板免费
  • 怎样用模板做网站优化网站技术
  • 全国新型疫情最新情况长沙网站搭建优化
  • 郑州网站建设规划seo建站教程
  • 购物网站 购物车界面如何做百度搜索网
  • 推广网站的图片怎么做外贸平台
  • 新手如何给自己的网站做优化bt种子磁力搜索
  • 成都学校网站制作遵义网站seo
  • d?t网站模版宁波seo在线优化哪家好
  • c做的网站淄博做网站的公司
  • 网站开发制作公司郑州网站建设外包
  • 注册域名用个人还是公司好长沙seo优化排名
  • 电子商务网站建设与维护展望今日新闻联播
  • 网站建设主流技术站长之家ping检测
  • 温州建设集团有限公司网站首页百度手机版网页
  • 广西网络干部学院官网seo推广人员
  • 可以做红娘的相亲网站江北seo综合优化外包
  • 公司建设网站需要注意什么软文广告示范
  • 高端网站建设 引擎技企业网页
  • 模仿别人网站百度外链查询工具
  • 教程建设网站广告免费发布信息平台