没错,你们最爱的小工具又要出现了。博客好久没有更新了。主要吧,最近好像也没有学习什么东西。之前导出word使用的是freemaker,将编写好的word模板保存为xml格式在改成ftl。然后导出

抽取出一个工具类

import freemarker.template.Configuration;
import freemarker.template.Template;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.Map;/*** Word工具类 <br>** @author gzm*/
public class WordUtils {/*** 下载动态生成的Word文件。只支持ftl文件模板。* @param response response* @param map 值* @param templatePath 模板路径,即模板放在哪个位置* @param templateName 模板名称。* @param downloadName 导出文件名。* @throws IOException IO异常*/public static void downloadWordByTemplate(HttpServletResponse response,Map map, String templatePath, String templateName, String downloadName) throws IOException {MapNullToSpace(map);Configuration configuration = new Configuration();configuration.setDefaultEncoding("utf-8");configuration.setDirectoryForTemplateLoading(new File(templatePath));Template freemarkerTemplate = configuration.getTemplate(templateName);File file = null;InputStream fin = null;ServletOutputStream out = null;try {// 调用工具类的createDoc方法生成Word文档file = createDoc(map,freemarkerTemplate);fin = new FileInputStream(file);response.setCharacterEncoding("utf-8");response.setContentType("application/msword");// 设置浏览器以下载的方式处理该文件名response.setHeader("Content-Disposition", "attachment;filename=".concat(String.valueOf(URLEncoder.encode(downloadName, "UTF-8"))));out = response.getOutputStream();byte[] buffer = new byte[512];  // 缓冲区int bytesToRead = -1;// 通过循环将读入的Word文件的内容输出到浏览器中while((bytesToRead = fin.read(buffer)) != -1) {out.write(buffer, 0, bytesToRead);}} finally {if(fin != null) {fin.close();}if(out != null) {out.close();}if(file != null) {file.delete(); // 删除临时文件}}}private static File createDoc(Map<?, ?> dataMap, Template template) {String name =  "test.doc";File f = new File(name);Template t = template;try {// 这个地方不能使用FileWriter因为需要指定编码类型否则生成的Word文档会因为有无法识别的编码而无法打开Writer w = new OutputStreamWriter(new FileOutputStream(f), "utf-8");t.process(dataMap, w);w.close();} catch (Exception ex) {ex.printStackTrace();throw new RuntimeException(ex);}return f;}/*** Map中null值改为空字符串* @param map Map*/private static void MapNullToSpace(Map<String, Object> map) {for (String key : map.keySet()) {if (null == map.get(key)) {map.put(key, "");}}}}

导出是没有问题了,但是在使用模板的时候却发生了问题

我的word中使用这样的变量,转成ftl时候值却被分割开了

之前我的做法是找到这些值手动去调。眼睛都要瞅瞎了效率还低。所以抽时间写了段脚本,变量中的标签情况掉

    public static void main(String[] args) {FileReader fileReader = new FileReader("E:\\个人基本信息表.ftl");List<String> strings = fileReader.readLines();FileAppender appender = new FileAppender(FileUtil.newFile("D:\\reslut3.ftl"), 16, true);for (String string : strings) {if (!string.contains("$")) {appender.append(string);continue;}string = string.replaceAll("\\$", "#\\$");String[] ss = string.split("#");// 同一行的内容写到同一行,文件追加自动换行了StringBuilder sb = new StringBuilder();for (int i = 0; i < ss.length; i++) {String s1 = ss[i];if (!s1.startsWith("$")) {sb.append(s1);continue;}int i1 = s1.lastIndexOf("}");String substr = s1.substring(0, i1 + 1);sb.append(substr.replaceAll("<[^>]+>", ""));sb.append(s1.substring(i1 + 1));}appender.append(sb.toString());}appender.flush();appender.toString();}

脚本中的文件操作使用的是hutool,这个工具包还是非常强大值得使用,如果没有添加hutool依赖的话,可以自己修改一下文件操作的部分

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.3.10</version>
</dependency>

好了,这样导出的工作就变得简单了很多。

freemaker导出word时出现值被分割的问题处理相关推荐

  1. Springboot 使用freemaker导出word文档

    利用freemarker导出word文档,主要分为一下几部分,但是循环写入图片是其中最难的一点,尤其是从未使用freemaker导出word模板的新手.话不多说,开搞. 1  找到需要导出的word模 ...

  2. 今天做了freemaker 导出word文档 的bug修复,解决 \n换行 问题

    结合Freemaker导出文件 public void exportSimpleWord() throws Exception{// 要填充的数据, 注意map的key要和word中${xxx}的xx ...

  3. wordExport导出word时关于echarts图表生成图片的解决方案

    一.基本介绍 wordExport是一款基于前端处理生成word的处理方式 在对应页面引入FileSaver.js和jquery.wordexport.js 使用:需生成word的部分.wordExp ...

  4. poi导出word时替换的段落内容会多出一个}和逗号_办公族必备11个Word文字处理技巧,太实用了!...

    Hello,各位叨友们好呀!我是叨叨君~ 在使用Word的过程中,大家经常会被一些小问题折磨到不行,这里叨叨君为大家整理了11个常见问题,专治Word疑难杂症! 01 打字时后面的字消失了 先来个简单 ...

  5. java web 导出word_JavaWeb Project使用FreeMaker导出Word文件

    基本思路 1. 导入freemaker2.3.jar 2. 需要导出的Word模板 3. 在Word内填入值的标签 4. Word另存为xml(2003版本) 5. Coding 6. 导出Word文 ...

  6. Freemaker导出word文档并实现预览

    文章目录 使用freemaker进行生成word文档并实现预览 一.导入依赖 二.导出word文件步骤 1.将word文档转成ftl文件 2.文件数据绑定 三.导出html文件步骤 四.解析文件并生成 ...

  7. poi导出word时内嵌表格场景,即开即用

    poi导出word内嵌表格 设计分析部分 后端代码部分 xml文件配置 实体类 controller层 使用到的工具类 service层 前端代码部分 测试页面 设计分析部分 首先要对导出word的需 ...

  8. java easypoi导出word时添加空白页导出多组相同类型的数据

    1.需求 导出用户信息,模板如下: 要求:导出多个用户信息时,另起一页,根据模板生成下一条用户信息. 2.模板变化 easypoi不能直接创建空白页(下一页),但可以使用apache的poi中的doc ...

  9. 通过freemaker导出word文档SpringBoot+idea,做成浏览器下载

    为什么用freemaker呢,因为用freemarker的模板来搞比较方便,比较快捷也让人更好的可以接受 主要还是因为简单,具体的步骤如下 1.首先你要添加freemaker的相关依赖,还需要在配置类 ...

最新文章

  1. hdl四位二进制计数器_四位二进制计数器这样接成十进制计数器
  2. 《大规模web服务开发技术》阅读笔记
  3. css transition兼容性,CSS3 Transition详解和使用
  4. 用仿ActionScript的语法来编写html5——终篇,LegendForHtml5Programming1.0开源库件
  5. 工业级光纤收发器一般适合哪些应用环境?
  6. linux 内核开发_25年Linux内核开发中的9课
  7. 离婚算法:说不清的感情对错,但算得清的财产分割
  8. 评分卡模型开发(三)--数据集准备
  9. Docker-registry + GlusterFS
  10. [转] 驱动模拟键盘鼠标
  11. 圣思园Spring精髓-Spring的底层设计思想
  12. 人一生要读的60本书(经典读书计划)
  13. 销售书籍推荐,这本书做销售的必看!
  14. 复杂性研究简介——从西蒙到霍兰
  15. ~ 运算符和 ~~ 运算符(JS)
  16. erp接口,打单软件,订单管理软件,旗帜接口,备注接口,旗帜接口,打单接口,发货接口
  17. BJSubwayPen -- 北京地铁路线图绘制工具 开源啦~~
  18. 手电筒安卓_iPhone手电筒只能照明?这两个隐藏技巧一定要会,事半功倍!
  19. 甲骨文:“狂妄”的秘诀
  20. MATLAB consolas字体中文显示乱码问题

热门文章

  1. SAP销售单发货详情查询
  2. Dapper 批量添加、修改
  3. Kepserver Modbus 高低字节问题
  4. 快递物流驿站签收的单号查询筛选的方法
  5. 高德地图目前是哪个集团下的公司?
  6. 关于电量虚报,高电量关机的解决方法
  7. 一个婚外情男人的私密日记
  8. 天龙八步-》打造debian-desktop-》配置桌面[三](转)
  9. neo4j-python案例王者人物关系
  10. 限制 上传文件大小 和 尺寸