2019独角兽企业重金招聘Python工程师标准>>>

/***
     * word 下载生成
     * @param positionvo
     * @return
     */
    @RequestMapping(value = "/downword")
    public void findPositionByIdWordOperation(RecommendReportOwnVo rrpownvo,HttpServletResponse response,HttpServletRequest request){
        try {
            RecommendReportOwnVo rrpownvo2 = new RecommendReportOwnVo();
            rrpownvo2.setUserid(5674686478L);
            rrpownvo2.setPositionid(748382742927900672L);
            logger.info("word下载:{}",JSON.toJSONString(rrpownvo2));
            Json<RecommendReportOwnVo> rrjson =  recommendReportServiceI.selectByInfo(rrpownvo2);
            logger.info("word下载查询到的推荐报告数据::{}",JSON.toJSONString(rrjson));
             Map<Object, Object> o=new HashMap<Object, Object>();
            if(rrjson.isSuccess()){
                RecommendReportOwnVo rvo = rrjson.getObj();
                //待定
                o.put("reportCompany", rvo.getCompanyname());
                o.put("reportPositionName", rvo.getPosition());
                o.put("reportDate", rvo.getRecommendtime());
                o.put("reportReason", rvo.getRecommendreson().replaceAll("\r\n", "<w:p></w:p>"));//换行处理
                String result = "";
                if(rvo.getExpectcity()!=null){
                    for (String str : rvo.getExpectcity().split(",")) {
                        result +=RenRuiStatics.cityMap.get(str);
                    }
                }
                o.put("expectCity", result==null?"":result);
                o.put("positionStateCode", rvo.getCurrentstatecodetype());
                
                //
                o.put("birthday", rvo.getBirthday());
                o.put("userName", rvo.getName());
                o.put("sex", rvo.getSexcodetype());
                o.put("workTime", rvo.getExpyears());
                o.put("marriageCode", rvo.getMarriagecodetype());
                o.put("currentCity", rvo.getCurrentcitytype());
                o.put("currentSalary", rvo.getCurrentsalary());
                o.put("expectSalary", rvo.getExpectsalary());
                //职业履历
                for (CareerRecoredReportOwnVo cro :  rvo.getCareerrecoredreportvolist()) {
                    if(!StringUtils.isBlank(cro.getPositiondesc())){
                        cro.setPositiondesc(StringEscapeUtils.escapeHtml4(cro.getPositiondesc()).replaceAll("\r\n", "<w:p></w:p>"));
                    }
                }
                o.put("careerRecoredList", rvo.getCareerrecoredreportvolist());
                //项目经验
                for (ProjectExpReportOwnVo peo : rvo.getProjectexpreportvolist()) {
                    if(!StringUtils.isBlank(peo.getProjectdesc())){
                        peo.setProjectdesc(StringEscapeUtils.escapeHtml4(peo.getProjectdesc()).replaceAll("\r\n", "<w:p></w:p>"));
                    }
                }
                o.put("projectExpList", rvo.getProjectexpreportvolist());
                //教育背景
                o.put("educationExpList", rvo.getEducationexpreportvolist());
            }
            
            String outfile =ConfigUtil.get("wordtarget")+ System.currentTimeMillis() + ".doc";
            // 要填入模本的数据文件
            Map<String, Object> dataMap = new HashMap<String, Object>();
           // getData2(dataMap);
            // 设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库装载,
            // 这里我们的模板是放在com.havenliu.document.template包下面
            configuration.setClassForTemplateLoading(this.getClass(),
                "/com/renrui/controller/front/pdf");
            Template t = configuration.getTemplate("freemarker.xml");
            Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outfile),"utf-8"));
            t.process(o, out);
            if(out!=null){
                out.close();
            }
            //
            File  file = new File(outfile);
            String mimeType= URLConnection.guessContentTypeFromName(file.getName());
            logger.info("mimetype : "+mimeType);
            response.setContentType(mimeType);
            response.setHeader("Content-Disposition", String.format("attachment; filename=\"" + file.getName() +"\""));
            response.setContentLength((int)file.length());
            InputStream inputStream = new BufferedInputStream(new FileInputStream(outfile));
            FileCopyUtils.copy(inputStream, response.getOutputStream());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

freemarker 可以支持不同类型的模板文件  ftl  xml ,so  规范好的word文档另存为word xml格式  然后使用freemarker 标签去替换你想要的内容。  哈哈  就是这么简单

备注:window 下面  StringEscapeUtils.escapeHtml4(peo.getProjectdesc()).replaceAll("\r\n", "<w:p></w:p>")  is  ok

linux  下面 需要这样写:

StringEscapeUtils.escapeHtml4(peo.getProjectdesc()).replaceAll("\n", "<w:p></w:p>");

处理换行 特殊字符 的正确操作  上面的某些场合会出现错误

str.replaceAll("↵", "\n").replaceAll("↵", "\n").replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll("\n", "<w:br/>");

转载于:https://my.oschina.net/u/1992570/blog/737659

Freemarker 生成word 模板文件相关推荐

  1. freemarker生成word模板

    freemarker生成word模板 一.引入依赖 <dependency><groupId>org.freemarker</groupId><artifac ...

  2. Java实现freemarker生成word模板

    博主在做的是将word源文件中的内容读取出来,然后按照固定的格式输出,当然,源文件有大量,所以编写了程序来批量自动生成目标文件. 本文要介绍的就是如何生成模板,并将从源文件截取的内容填充到模板文件(即 ...

  3. 用freemarker生成word模板

    需求: 给文书统一生成一个搞头文件,文件内容基本是一样的. 用freemarker生成docx文档 一.生成一个docx结尾的word模板,然后把文档的后缀docx改成zip,zip里会有生成很多文件 ...

  4. 使用freemarker生成xml模板

    今天在java交流群里有个人问我如何用freemarker生成xml模板文件,可以手动配置参数,于是我到网上百度了一下.发现有一位同行的博文写的很nice,于是我就照着他的代码敲了一遍,最后实现了,本 ...

  5. Aspose-words结合Freemarker实现word邮件合并功能,批量处理word模板文件

    最近的工作中有一个需求,需要处理word文档,有一些内容需要根据不同用户进行替换修改,使用的是word文档,替换后的内容还需要转换为pdf进行签章确认,并进行防篡改处理. 所以记录一下处理步骤,首先可 ...

  6. Freemarker生成word文件,打开后页眉和页脚图片不显示

    Freemarker生成word文件,打开后页眉和页脚图片不显示 在我们开发过程中通常会把模板文件Ctrl+Alt+L格式化,方便处理.这样就造成word的标签格式产生多余的换行或者空白,但是word ...

  7. Java使用freemarker生成word文件

    首先声明我的项目是一个web项目,生成的word文件直接通过response响应发送给前端.如果不是web项目的话可以像网上的其他教程一样将生成的word保存在本地. 要利用freemarker生成w ...

  8. 在Springboot环境下,使用Docx4J + Freemarker 完成word docx文件生成与Pdf文件转换(附带兼容linux字体问题处理办法)

    在Springboot环境下,使用Docx4J + Freemarker 完成word docx文件生成与Pdf文件转换(附带兼容linux字体问题处理办法) 前言 效果展示 正文 docx文件模板创 ...

  9. 若依 springboot 使用freemarker生成word文件,并导出下载

    目录 freemarker生成word文件并导出 一.环境准备 二.编写代码 1.实体类 2.mapper.xml文件 3.mapper.java文件 4.Service.java 5.Service ...

最新文章

  1. linux的根文件系统中的proc文件夹详解
  2. 关于STM32的IAP与APP互相跳转
  3. 跑三小时的monkey测试该怎么算_百亿次的锤炼 - 带逛Dragonboat的各类测试
  4. Linux之VI命令详解
  5. kubernetes集群使用GPU及安装kubeflow1.0.RC操作步骤
  6. [强]VC 6.0 可以这样创建对话框
  7. 120 -算法 - 枚举 数学类 4138:质数的和与积
  8. 如何在 Exchange Server 2010 SP1 下将用户邮箱导出到PST中
  9. Hegic Q1报告:TVL接近6000万美元,日交易量达2200万美元创新高
  10. ubuntu 更改语言桌面_让 Ubuntu 滚动更新
  11. 微信公众号服务器配置
  12. 阿里云MQTT使用教程
  13. java汉字笔画排序
  14. (二) icarus主题配置
  15. Jenkins 与 Gitlab 之间非交互拉取代码并进行代码部署
  16. 抱抱脸(hugging face)教程-中文翻译-任务总结
  17. 计算机网络练习3|河工|周老师
  18. 如果显示直播连接不成功问题
  19. 腾讯地图android,手机腾讯地图
  20. 英语学习——梨花带雨

热门文章

  1. DISK:Learning local features with policy gradient
  2. jQuery - 元素选择器 和 #id 选择器 以及 .class 选择器三者的区别
  3. win10更改系统颜色
  4. 【计算机基础】半角符号与全角符号
  5. node.js毕业设计基于微信小程序的网上购物系统(源码+程序+LW+部署)
  6. 分组加密模式 ECB CBC OFB CFB ,分组加密填充
  7. lwip集成w5500驱动,开发调试总结
  8. 阿里总监:测试稳定性三板斧,你了解多少?
  9. mysql pid文件作用_pid文件的作用
  10. PDMan未检测到jdk,jvm所需内存不足