zoukankan      html  css  js  c++  java
  • 利用POI 技术动态替换word模板内容

    项目中需要实现一个功能,动态替换给定模板里面的内容,生成word文档提供下载功能。

    中间解决了问题有:

    1.页眉的文档logo图片解决,刚开始的时候,HWPFDocument 对象无法读取图片对象(已测试)

    2.文档的水印也无法读取

    3.下载的乱码问题(火狐浏览器)

    4.将文档中的阿拉伯数字的金额改为中文繁体显示

    具体代码如下:

    /**
    * 拍卖结算之后,进行成交确认书的下载操作方法
    *
    * @param id
    * @param response
    */
    @RequestMapping(value="/aucLotDownLoad",method = RequestMethod.GET)
    @ResponseBody
    public void aucLotDownLoad(String id,HttpServletResponse response) {
    if (logger.isDebugEnabled()) {
    logger.debug("aucLotQuery, aucLotId ", id);
    }
    SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    AucLot aucLot = aucLotRepository.findOne(id);
    AucBrand aucBrand = aucBrandRepository.findOneByAucLotAndIsBailPayedAndIsDealAndIsSettled(aucLot,AucBrand.AUCBRAND_ISBAILPAYED_YES,AucBrand.AUCBRAND_ISDEAL_SUCCESS,AucBrand.AUCBRAND_ISSETTLED_YES);
    if (aucBrand != null) {
    String goodsName = aucLot.goodsName();//标的名称
    String brandNo = aucBrand.brandNo();//买受人号牌,竞买代码
    Date startTime = aucLot.startTime();//拍卖开始时间
    Date endTime = aucLot.endTime();//拍卖结束时间
    BigDecimal dealPrice = aucBrand.dealPrice();//拍卖成交金额
    BigDecimal clientCommison = aucLot.clientCommison();//委托佣金

    //定义成交价和委托佣金的总和(两种方式体现)
    BigDecimal totalPrice = dealPrice.add(clientCommison);//合计拍卖的总金额

    try {
    //获取模板文件的目录地址
    String fileDir = new File(base.getFile(), "../../../../../../doc/").getCanonicalPath();
    //获取模板文件
    File demoFile=new File(fileDir + "/1.doc");

    FileInputStream in = new FileInputStream(demoFile);
    HWPFDocument hdt = new HWPFDocument(in);
    //替换读取到的word模板内容的指定字段
    Range range = hdt.getRange();
    Map<String, String> map = new HashMap<String, String>();
    map.put("$PMBD$", goodsName);
    map.put("$PMKSSJ$", dateFormater.format(startTime));
    map.put("$MSRHP$", brandNo);
    map.put("$PMCJJ$", numberToHanZiUtility.number2CNMontrayUnit(dealPrice));
    map.put("$PMYJ$", numberToHanZiUtility.number2CNMontrayUnit(clientCommison));
    map.put("$HJ$", numberToHanZiUtility.number2CNMontrayUnit(totalPrice));
    map.put("$PMCJJXX$", dealPrice + "");
    map.put("$PMYJXX$", clientCommison + "");
    map.put("$HJXX$", totalPrice + "");
    map.put("$PMJSSJ$", dateFormater.format(endTime));
    for (Map.Entry<String,String> entry:map.entrySet()) {
    range.replaceText(entry.getKey(),entry.getValue());
    }

    //输出word内容文件流,提供下载
    response.setContentType("application/x-msdownload");
    String name = java.net.URLEncoder.encode("成交确认书_"+aucLot.goodsNo()+".doc", "UTF8");
    name = new String((name).getBytes("UTF-8"), "ISO-8859-1");
    response.addHeader("Content-Disposition", "attachment; filename*=utf-8'zh_cn'"+name);
    ByteArrayOutputStream ostream = new ByteArrayOutputStream();
    ServletOutputStream servletOS = response.getOutputStream();
    hdt.write(ostream);
    servletOS.write(ostream.toByteArray());
    servletOS.flush();
    servletOS.close();
    } catch (IOException e) {
    e.printStackTrace();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }


    }

  • 相关阅读:
    MyBatis 智能标签
    MyBatis入门
    Hibernate 分组查询 子查询 原生SQL
    组件映射
    Hibernate组件映射
    hibernate 中的 lazy=”proxy” 和 lazy=”no-proxy” 的区别
    save(),saveOrUpdate(),merge()的区别
    ThreadLocal
    OID,主键生成策略,PO VO DTO,get和load区别,脏检查,快照,java对象的三种状态
    HIbernate实现增、删、改、查。
  • 原文地址:https://www.cnblogs.com/mr-wuxiansheng/p/6131494.html
Copyright © 2011-2022 走看看