java (用freemarker导出word)实际项目应用

1.编写一个.ftl文件

<table cellspacing="0" cellpadding="0" width="1000" border="0" align="center">
    <tbody>
    <tr>
        <td width="100%">
            <table width="100%" border="0" cellspacing="0" cellpadding="0">
                <tr>
                    <td align="center" class="bgtd">
                        <table border="0" cellspacing="0" cellpadding="0">
                            <tr>
                                <td>
                                    <h1>巡查检查日志</h1>
                                </td>
                            </tr>
                        </table>
                    </td>
                </tr>
            </table>
            <div class="box">
                <table width="100%" border="1" cellspacing="0" cellpadding="0" class="table00" style="margin-top:30px">
                    <tr>
                        <td width="12%" style="text-align:center">巡查检查<br/>时间</td>
                        <td colspan="3" width="46%" style="text-align:center">${workTime!''}</td>
                        <td width="18%" style="text-align:center">天气</td>
                        <td style="text-align:center">${weather!''}</td>
                    </tr>
                    <tr>
                        <td style="text-align:center">巡查检查人员</td>
                        <td colspan="3" style="text-align:center">${spersonnel!''}</td>
                        <td style="text-align:center">班组负责人</td>
                        <td style="text-align:center">${smanager!''}</td>
                    </tr>
                    <tr>
                        <td style="text-align:center">巡查检查路线</td>
                        <td colspan="5" style="text-align:center">${roadPath!''}</td>
                    </tr>
                    <tr>
                        <td rowspan="2">巡查检查<br/>车牌号</td>
                        <td rowspan="2" style="text-align:center">${carNo!''}</td>
                        <td rowspan="2" style="text-align:center">车辆公里数</td>
                        <td>:${carStrartMileage!''}KM</td>
                        <td rowspan="2" style="text-align:center">巡查检查<br/>里程</td>
                        <td rowspan="2" style="text-align:center">${driveMileage!''}KM</td>
                    </tr>
                    <tr>
                        <td>:${carEndMileage!''}KM</td>
                    </tr>
                    <tr>
                        <td rowspan="8">当日巡</br>查重点</td>
                        <td colspan="5">
                            <center>路政巡查</center>
                        </td>
                    </tr>
                    <tr style="page-break-after: always">
                        <td colspan="5" id="roadPatrol">
                        </td>
                    </tr>

                    <tr>
                        <td colspan="5">
                            <center>道路运输执法检查</center>
                        </td>
                    </tr>
                    <tr>
                        <td colspan="5" id="trans">
                        </td>
                    </tr>
                    <tr>
                        <td colspan="5">
                            <center>收费稽查</center>
                        </td>
                    </tr>
                    <tr>
                        <td colspan="5" id="fee">
                        </td>
                    </tr>
                    <tr>
                        <td colspan="5">
                            <center>前次移交事项</center>
                        </td>
                    </tr>
                    <tr>
                        <td colspan="5">${sthinks!''}
                        </td>
                    </tr>
                    <tr>
                        <td>巡查记录</td>
                        <td colspan="5">
                        ${patrolEvent!''}
                        </td>
                    </tr>
                    <tr>
                        <td>交接事项处理情况</td>
                        <td colspan="5">${dealInfo!''!}
                        </td>
                    </tr>
                    <tr>
                        <td rowspan="5"></td>
                        <td>交接时间</td>
                        <td colspan="4">${tDate!''}</td>
                    </tr>
                    <tr>
                        <td rowspan="2">移交物品</td>
                        <td colspan="4">
                        ${goods!''}
                        </td>
                    </tr>

                    <tr>
                        <td colspan="4">
                        ${car!''}
                        </td>
                    </tr>
                    <tr>
                        <td>移交物品备注</td>
                        <td colspan="4">
                        ${remarks!''}
                        </td>
                    </tr>
                    <tr>
                        <td>移交事项</td>
                        <td colspan="4">${tthinks!''}
                        </td>
                    </tr>
                    <tr>
                        <td width="17%">交班人员签名</td>
                        <td colspan="2"></td>
                        <td>接班人员签名</td>
                        <td colspan="2"></td>
                    </tr>
                </table>
            </div>
        </td>
    </tr>
    </tbody>
</table>

2:建一个工具类

public class DownloadWordUtil {

    /**
     * 生成Word方法
     *
     * @param dataMap
     *            页面数据
     * @param downloadWord
     *            模板名称
     * @return 生成的Word文档
     */
    public File createDoc(Map<String, Object> dataMap, String downloadWord)
    {
        String name = commonShiftFileName() + ".doc";
        File f = new File(name);
        try
        {
            Configuration configuration = new Configuration();
            configuration.setDefaultEncoding("UTF-8");//设置编码
            //设置模板文件所在路径
            configuration.setClassForTemplateLoading(DownloadWordUtil.class, "../../../../../../../ftl/shifts/");
            //获取模板文件
            Template template = configuration.getTemplate("downloadWord.ftl");
            //导出文件
            Writer out = new OutputStreamWriter(new FileOutputStream(f), "utf-8");
            template.process(dataMap, out);
            out.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
        return f;
    }

    /**
     * 生成文件名
     *
     * @return 文件名
     */
    private String commonShiftFileName()
    {
        // 获得当前时间
        DateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
        // 转换为字符串
        String formatDate = format.format(new Date());
        int random = new Random().nextInt(10000);
        return formatDate + random;
    }
}

3:在controller中编写方法

@RequestMapping("downloadWord")
public void downloadWord(HttpServletRequest request, HttpServletResponse response,
                         @RequestParam("id") String id) throws IOException {
    File file = null;
    InputStream fin;
    ServletOutputStream out;
    try
    {
        DownloadWordUtil dlUtil = new DownloadWordUtil();
        request.setCharacterEncoding("utf-8");
        Map<String, CommonShifts> commonMap = new HashMap<>();
        CommonShifts commonShifts = commonShiftsService.get(id);

        String officeName = commonShifts.getOffice().getName();
        commonMap.put("commonShifts", commonShifts);
        request.setCharacterEncoding("utf-8");

        List<CommonShiftsGoods> list = commonShiftsGoodsService.getShiftsGoodsList(commonShifts);
        SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd HHmm");

        DictDao dictDao = SpringContextHolder.getBean(DictDao.class);
        Map<String, Object> newMap = new HashMap<>();

        String workTime = formatter.format(commonShifts.getSdate()) + "</br>"
                + formatter.format(commonShifts.getTdate());

        String weather = "";
        if (commonShifts.getWeather() != null)
        {
            Dict weatherObject = dictDao.getById(commonShifts.getWeather().toString());
            if (weather != null)
            {
                weather = weatherObject.getLabel();
            }
        }

        String spersonnel = commonShifts.getSpersonnelName();
        String smanager = commonShifts.getSmanagerName();

        String carNo = "";
        LawVehicle c = lawVehicleDao.get(commonShifts.getCarNo());
        if (c != null)
        {
            carNo = c.getVehicleNo();
        }
        String carStrartMileage = commonShifts.getDirveMileage();// 开始里程
        String carEndMileage = commonShifts.getCarEndMileage();// 结束里程
        Integer driveMileage = 0;
        try
        {
            driveMileage = Integer.parseInt(carEndMileage) - Integer.parseInt(carStrartMileage);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        if (carEndMileage == null)
        {
            carEndMileage = "";
        }
        String sthinks = commonShifts.getSthinks();// 前次移交事项
        if (sthinks == null || "".equals(sthinks))
        {
            sthinks = "";
        }
        String dealInfo = commonShifts.getDealInfo();
        if (dealInfo == null || "".equals(dealInfo))
        {
            sthinks = "";
        }
        String tDate = formatter.format(commonShifts.getTdate());
        // 移交物品
        StringBuilder goodsStr = new StringBuilder("");
        for (CommonShiftsGoods goods : list)
        {
            if (goods.getName() != null)
            {
                goodsStr.append(goods.getName() + ",");
            }
            if (goods.getQuantity() != null)
            {
                goodsStr.append(goods.getQuantity() + "");
            }
            if (goods.getRemark() != null)
            {
                goodsStr.append("," + goods.getRemark() + "</br>");
            }
            else
            {
                goodsStr.append("</br>");
            }
        }
        String carStatus = "";
        if (commonShifts.getCarStatus() != null)
        {
            Dict carStatusObject = dictDao.getById(commonShifts.getCarStatus().toString());
            if (carStatusObject != null)
            {
                carStatus = carStatusObject.getLabel();
            }
        }
        String car = "执法车,车号:" + carNo + ";车辆是否正常:" + carStatus + ";交接公里数:" + carEndMileage + "";
        StringBuilder patrolEvent = new StringBuilder("");
        String tthinks = commonShifts.getTthinks();
        String remarks = commonShifts.getRemarks();
        newMap.put("workTime", workTime);
        newMap.put("weather", weather);
        newMap.put("spersonnel", spersonnel);
        newMap.put("smanager", smanager);
        newMap.put("carNo", carNo);
        newMap.put("carStrartMileage", carStrartMileage + "");
        newMap.put("carEndMileage", carEndMileage + "");
        newMap.put("driveMileage", driveMileage + "");
        newMap.put("sthinks", sthinks);
        newMap.put("dealInfo", dealInfo);
        newMap.put("roadPath",
                commonShifts.getRoadStart() + "<br/><br/>" + commonShifts.getRoadEnd());
        newMap.put("tDate", tDate);
        newMap.put("goods", "".equals(goodsStr.toString()) ? "" : goodsStr.toString());
        newMap.put("car", car);
        newMap.put("tthinks", tthinks);
        newMap.put("remarks", remarks);
        for (String key : newMap.keySet())
        {
            if (newMap.get(key) == null)
            {
                newMap.put(key, "");
            }
        }
        String patrolEventStr = patrolEvent.toString();
        newMap.put("patrolEvent", "".equals(patrolEventStr) ? "" : patrolEventStr);
        String ctxStatic = request.getSession().getServletContext().getRealPath("/")
                + File.separator + "static";
        newMap.put("ctxStatic", ctxStatic);
        file = dlUtil.createDoc(newMap, officeName);
        fin = new FileInputStream(file);
        response.setContentType("application/msword");
        out = response.getOutputStream();
        byte[] buffer = new byte[1024];// 缓冲区
        int bytesToRead;

        // 通过循环将读入的Word文件的内容输出到浏览器中
        while ((bytesToRead = fin.read(buffer)) != -1)
        {
            out.write(buffer, 0, bytesToRead);
        }
        fin.close();
        if (out != null)
        {
            out.close();
        }
    }
    catch (IOException ex)
    {
        ex.printStackTrace();
        logger.error("CommonShiftsControllerdownloadWord————" + ex.toString());
    }
    finally
    {
        if (file != null)
        {
            file.delete(); // 删除临时文件
        }
    }
}
本人技术比较菜,代码量比较打,但这是我在实际项目中实践的word导出代码,选择性Ctrl+C,Ctrl+V,谢谢

猜你喜欢

转载自blog.csdn.net/java_monkeys/article/details/79543803