FreeMarker生成word的代码
用于生成word用的freemarker工具类
package com.ucap.netcheck.utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import com.thoughtworks.xstream.core.util.Base64Encoder;
import freemarker.template.Configuration;
import freemarker.template.Template;
/**
* @Title: FreeMarkerUtil.java
* @Package com.ucap.netcheck.utils
* @Description: FreeMarker工具类
* @author Zuoquan Tu
* @date 2015-4-5 下午6:02:11
* @version V1.0
*/
public class FreeMarkerUtil {
private static Configuration configuration = null;
private static Map<String, Template> allTemplates = null;
static {
configuration = new Configuration();
configuration.setDefaultEncoding("utf-8");
//configuration.setClassForTemplateLoading(FreeMarkerUtil.class,
// "../template");
try {
configuration.setDirectoryForTemplateLoading(
new File(TemplateUtil.reportTemplatePath));
} catch (IOException e1) {
e1.printStackTrace();
}
allTemplates = new HashMap<String, Template>();
try {
allTemplates.put("word",configuration.getTemplate(TemplateUtil.templateFileName));
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
public FreeMarkerUtil() {
}
public static File createDoc(Map<?, ?> dataMap,String type){
String name = "temp" + (int) (Math.random() * 100000) + ".doc";
File f = new File(name);
Template t = allTemplates.get(type);
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();
}
return f;
}
public static String getImageString(String fileName) throws IOException {
InputStream in = null;
byte[] data = null;
try {
in = new FileInputStream(fileName);
data = new byte[in.available()];
in.read(data);
in.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (in != null){
in.close();
}
}
Base64Encoder encoder = new Base64Encoder();
return data != null ? encoder.encode(data) : "";
}
}
生成word用的springMVC代码
package com.ucap.netcheck.controller;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.ucap.netcheck.entity.User;
import com.ucap.netcheck.service.IReport2WordService;
import com.ucap.netcheck.utils.DateUtil;
import com.ucap.netcheck.utils.FreeMarkerUtil;
/**
* @Title: Report2WordController.java
* @Package com.ucap.netcheck.controller
* @Description: 生成word部分的Controller
* @author Zuoquan Tu
* @date 2015-4-12 上午9:36:43
* @version V1.0
*/
@Controller
@RequestMapping(value = "/reportToWord", method = { RequestMethod.GET,
RequestMethod.POST })
public class Report2WordController {
@Autowired
private IReport2WordService report2WordService;
@RequestMapping(value = "/word")
public String outWord(Model model, HttpServletRequest request,
HttpServletResponse response) throws Exception {
request.setCharacterEncoding("utf-8");
// 获取innerUUID,taskId
String siteCode = request.getParameter("innerUUID");
// 获取taskId
Integer taskId = Integer.parseInt(request.getParameter("taskId"));
// 获取用户的userId
User user = (User) request.getSession().getAttribute("user");
// 通过下面的方式获得模板的参数
Map<String, Object> map = report2WordService
.generateWordData(siteCode, taskId, user.getId());
// 获取innerUUID,taskId
//Map<String, Object> map = new HashMap<String, Object>();
//获取innerUUID,taskId
// Map<String, Object> map = new HashMap<String, Object>();
// map.put("taskNum", "测试");
// map.put("tackRunNum", "测试2……rqwrqw");
// String imageStr = new FreeMarkerUtil().getImageString("D:/1.png");
// map.put("imgStr", imageStr);
//
// List<CheckService> newsList = new ArrayList<CheckService>();
// for (int i = 0; i < 10; i++) {
// CheckService checkService = new CheckService();
// checkService.setTaskRunNum(10);
// checkService.setTaskNum(1000);
// newsList.add(checkService);
// }
// map.put("newList", newsList);
this.generateWord(response, map);
return null;
}
private void generateWord(HttpServletResponse response,
Map<String, Object> map) throws FileNotFoundException, IOException {
File file = null;
InputStream fin = null;
ServletOutputStream out = null;
try {
// 调用工具类WordGenerator的createDoc方法生成Word文档
file = new FreeMarkerUtil().createDoc(map, "word");
fin = new FileInputStream(file);
response.setCharacterEncoding("utf-8");
response.setContentType("application/msword");
// 设置浏览器以下载的方式处理该文件默认名为下面的文件,按照时间来生成的一个文件名称
String longMsDateStr = DateUtil.getStringLongMsDate();
response.addHeader("Content-Disposition","attachment;filename="+longMsDateStr+".doc");
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(); // 删除临时文件
}
}
}
Service代码
package com.ucap.netcheck.service;
import java.util.Map;
/**
* @Title: Report2WordService.java
* @Package com.ucap.netcheck.service
* @Description: 用户生成word的报告的service接口
* @author Zuoquan Tu
* @date 2015-4-12 上午9:43:25
* @version V1.0
*/
public interface IReport2WordService {
/**
* generateWordData(通过这个方法获得生成报告所需的数据)
*
* @Title: generateWordData
* @Description: 通过这个方法获得生成报告所需的数据
* @param @return 返回所需的数据
* @return Map<String,Object> 返回的数据
* @throws
*/
public Map<String, Object> generateWordData(
String siteCode,Integer taskId,String userId);
}
package com.ucap.netcheck.service.impl;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ucap.netcheck.combination.beans.TargetTypeParentToChildBean;
import com.ucap.netcheck.common.GenerateKey;
import com.ucap.netcheck.dao.IReport2WordDao;
import com.ucap.netcheck.entity.CheckService;
import com.ucap.netcheck.entity.MainPageScanFail;
import com.ucap.netcheck.entity.MainPageScanResult;
import com.ucap.netcheck.entity.ProblemInfo;
import com.ucap.netcheck.entity.Site;
import com.ucap.netcheck.service.CheckServiceService;
import com.ucap.netcheck.service.IReport2WordService;
import com.ucap.netcheck.service.ISingleRejectResultService;
import com.ucap.netcheck.service.ISiteService;
import com.ucap.netcheck.service.TargetTypeService;
import com.ucap.netcheck.utils.DateUtil;
/**
* @Title: Report2WordServiceImpl.java
* @Package com.ucap.netcheck.service.impl
* @Description:
* @author
* @date 2015-4-12 上午11:58:09
* @version V1.0
*/
@Service
public class Report2WordServiceImpl implements IReport2WordService {
@Autowired
private ISiteService siteService;
@Autowired
private CheckServiceService checkServiceService;
@Autowired
private IReport2WordDao report2WordDao;
@Autowired
private TargetTypeService targetTypeService;
@Autowired
private ISingleRejectResultService singleRejectResultService;
/**
* generateWordData(通过这个方法获得生成报告所需的数据)
* TODO
*
* @Title: generateWordData
* @Description: 通过这个方法获得生成报告所需的数据
* @param @return 返回所需的数据
* @return Map<String,Object> 返回的数据
* @throws
*/
@Override
public Map<String, Object> generateWordData(
String siteCode,Integer taskId,String userId) {
Map<String, Object> map = new HashMap<String, Object>();
//网站名称,首页网址,报告编号,报告日期
Site site = siteService.findSite(siteCode);
map.put("site", site);
//生成报告编号和报告日期
map.put("reportCode", GenerateKey.generateKeyByDate(6));
map.put("reportDate", DateUtil.getYearMonthAndDay());
//检查方法的数据,获得CheckService的值
CheckService checkService = report2WordDao.findCheckService(userId);
map.put("checkService", checkService);
//设置开通时间的日期
map.put("checkServiceOpenTime", DateUtil.dateToStr(checkService.getOpenTime()));
//设置结束时间的日期
map.put("checkServiceCloseTime", DateUtil.dateToStr(checkService.getCloseTime()));
//问题统计部分的数据
List<TargetTypeParentToChildBean> targetTypeBeanStatistics =
targetTypeService.getTargetTypeByParentId(siteCode, taskId);
map.put("targetTypeBeanStatistics", targetTypeBeanStatistics);
//----------------------------------------------------------------------------------
//单项否决部分的问题
//获取站点无法访问的数据,获取单项否决权的数据
//下面是单项否决部分的代码
MainPageScanResult mainPageScanResult =
singleRejectResultService.queryMainPageScanResultUnique(siteCode,taskId);
map.put("mainPageScanResult", mainPageScanResult);
if (null != mainPageScanResult && mainPageScanResult.getFailNum() >= 0 && mainPageScanResult.getSuccessNum() >= 0) {
NumberFormat format = NumberFormat.getNumberInstance();
format.setMaximumFractionDigits(2);
double rate = mainPageScanResult.getFailNum() / mainPageScanResult.getSuccessNum();
String mainPageFailRateString = format.format(rate);
map.put("mainPageFailRateString", mainPageFailRateString);
} else {
map.put("mainPageFailRateString", "");
}
List<MainPageScanFail> queryMainPageScanFailList = new ArrayList<MainPageScanFail>();
if (null != mainPageScanResult) {
queryMainPageScanFailList = singleRejectResultService.queryMainPageScanFailListById(mainPageScanResult.getId());
}
map.put("queryMainPageScanFailList", queryMainPageScanFailList);
// List<MainPageScanResult> mainPageScanResults =
// singleRejectResultService.queryMainPageScaneResultByCondition(siteCode,taskId);
// map.put("mainPageScanResults", mainPageScanResults);
//获取网站不更新的数据
List<Object[]> MainPageUpdateInfoLists = singleRejectResultService.queryMainPageUpdateResultByCondition(siteCode,taskId);
map.put("MainPageUpdateInfoLists", MainPageUpdateInfoLists);
//获取栏目不更新
List<ProblemInfo> problemInfoUnUpdate = report2WordDao.queryCheckProblemInfo(taskId, siteCode, 4);
map.put("problemInfoUnUpdate", problemInfoUnUpdate);
//严重错误
List<ProblemInfo> problemInfoSeriousError = report2WordDao.queryCheckProblemInfo(taskId, siteCode, 5);
map.put("problemInfoSeriousError", problemInfoSeriousError);
//互动回应差
List<ProblemInfo> problemInfoInterAct = report2WordDao.queryCheckProblemInfo(taskId, siteCode, 6);
map.put("problemInfoInterAct", problemInfoInterAct);
//----------------------------------------------------------------------------------
//网站可用性
//1、首页可用性
List<ProblemInfo> problemInfoIndexUsability = report2WordDao.queryCheckProblemInfo(taskId, siteCode, 8);
map.put("problemInfoIndexUsability", problemInfoIndexUsability);
//
// //连接可用性
// List<ProblemInfo> problemInfoLinkUsability = report2WordDao.queryCheckProblemInfo(taskId, siteCode, 9);
// map.put("problemInfoLinkUsability", problemInfoLinkUsability);
//-----------------------------------------------------------------------------------
//信息更新情况
//首页栏目
List<ProblemInfo> problemInfoIndexColumn = report2WordDao.queryCheckProblemInfo(taskId, siteCode, 11);
map.put("problemInfoIndexColumn", problemInfoIndexColumn);
//基本信息
List<ProblemInfo> queryCheckProblemInfoBaseInfo = report2WordDao.queryCheckProblemInfo(taskId, siteCode, 12);
map.put("queryCheckProblemInfoBaseInfo", queryCheckProblemInfoBaseInfo);
//-----------------------------------------------------------------------------------
//互动回应情况
//政务咨询类栏目
List<ProblemInfo> problemInfoGovAdvisory = report2WordDao.queryCheckProblemInfo(taskId, siteCode, 14);
map.put("problemInfoGovAdvisory", problemInfoGovAdvisory);
//调查集体类栏目
List<ProblemInfo> problemInfoSurvey = report2WordDao.queryCheckProblemInfo(taskId, siteCode, 15);
map.put("problemInfoSurvey", problemInfoSurvey);
//互动访谈类栏目
List<ProblemInfo> problemInfoInterview = report2WordDao.queryCheckProblemInfo(taskId, siteCode, 16);
map.put("problemInfoInterview", problemInfoInterview);
//-----------------------------------------------------------------------------------
//服务使用情况
//办事指南
List<ProblemInfo> problemInfoServiceUsedInfo = report2WordDao.queryCheckProblemInfo(taskId, siteCode, 18);
map.put("problemInfoServiceUsedInfo", problemInfoServiceUsedInfo);
//附件下载
List<ProblemInfo> problemInfoAccessory = report2WordDao.queryCheckProblemInfo(taskId, siteCode, 19);
map.put("problemInfoAccessory", problemInfoAccessory);
//在线系统
List<ProblemInfo> problemInfoOnLineInfo = report2WordDao.queryCheckProblemInfo(taskId, siteCode, 20);
map.put("problemInfoOnLineInfo", problemInfoOnLineInfo);
return map;
}
}
关于错误总结:
1.档值为空的时候会报错,处理方式:类似:${(site.wzmc)?default("")} 判断字符串是空的时候的处理情况
FreeMarker生成word的代码的更多相关文章
- 使用freemarker生成word、html时图片显示问题
使用freemarker生成word.html时图片显示问题 博客分类: Java 使用freemarker生成word时图片显示问题使用freemarker生成html时图片显示问题使用iText生 ...
- Java Web项目中使用Freemarker生成Word文档遇到的问题
这段时间项目中使用了freemarker生成word文档.在项目中遇到了几个问题,在这里记录一下.首先就是关于遍历遇到的坑.整行整行的遍历是很简单的,只需要在整行的<w:tr></w ...
- FreeMarker生成word
FreeMarker生成word数据填充是通过,Map填充. Map dataMap = new HashMap<String, Object>(); List<User> l ...
- freemarker生成word,表格分页
在做项目的过程中,使用到了freemarker生成word.又有一个需求,明细的要确定有多少页,这就用到了换页的xml标签了,找了我好久 <w:p ><w:r><w:br ...
- Java Freemarker生成word
Java Freemarker生成word freeMaker 简介: FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代 ...
- 使用freemarker生成word,步骤详解并奉上源代码
1. 步骤 1. 用word编辑好模板 1. 普通字符串替换为 ${string} 2. 表格循环用标签 <#list userList as user> 姓名:${user.u ...
- springboot中使用freemarker生成word文档并打包成zip下载(简历)
一.设计出的简历模板图以及给的简历小图标切图 二.按照简历模板图新建简历word文件 :${字段名},同时将图片插入到word中,并将建好的word文件另存为xml文件: 三.直 ...
- FreeMarker生成Word文档
FreeMarker简介: FreeMarker是一款模板引擎:即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具,它不是面向最终用户的,而是一个 ...
- Java Web项目中使用Freemarker生成Word文档
Web项目中生成Word文档的操作屡见不鲜.基于Java的解决方式也是非常多的,包含使用Jacob.Apache POI.Java2Word.iText等各种方式,事实上在从Office 2003開始 ...
随机推荐
- iphone inline video fragments
DOMContentLoaded 它在DOM加载之后及资源加载之前被触发 通过递归调用同一方法来不断更新画面以达到动起来的效果,但它优于setTimeout/setInterval的地方在于它是由浏览 ...
- Java线程池使用和常用参数
多线程问题: 1.java中为什么要使用多线程使用多线程,可以把一些大任务分解成多个小任务来执行,多个小任务之间互不影像,同时进行,这样,充分利用了cpu资源. 2.java中简单的实现多线程的方式 ...
- Python小代码_9_求水仙花数
for i in range(100, 1000): ge = i % 10 shi = i // 10 % 10 bai = i // 100 if ge ** 3 + shi ** 3 + bai ...
- 如何改变hr颜色
html中用css改变颜色,<hr style="border:0;background-color:#ff0000;height:1px;">如果不加border:0 ...
- 纯CSS菜单样式,及其Shadow DOM,Json接口 实现
先声明,要看懂这篇博客要求你具备少量基础CSS知识, 当然如果你只是要用的话就随便了,不用了解任何知识 完整项目github链接:https://github.com/git-Code-Shelf/M ...
- python笔记十(列表生成式、字典生成式、生成器、生成器的并行)
一.列表生成式 列表生成式就是python设置的可以用来可以生成列表的. 如要生成一个0-9的列表我们可以通过以下代码实现: >>> list(range(10)) [0, 1, 2 ...
- 安卓高级 WebView的使用到 js交互
我们先来学习 怎么使用再到用js和安卓源生方法交互 WebView简单使用 此部分转载并做了补充 原博客 原因:比较简单不是很想在写,我只要写js交互部分 WebView可以使得网页轻松的内嵌到app ...
- Hive基本原理及环境搭建
今天我主要是在折腾这个Hive,早上看了一下书,最开始有点凌乱,后面慢慢地发现,hive其实挺简单的,以我的理解就是和数据库有关的东西,那这样的话对我来说就容易多啦,因为我对sql语法应该是比较熟悉了 ...
- Swift中如何化简标准库中冗长的类实例初始化代码
可能有些童鞋并不知道,在Swift中缩写点符号对于任何类型的任何static成员都有效. 我们实际写一个例子看一下: import UIKit class CFoo{ static let share ...
- python模块:网络协议和支持
python模块:网络协议和支持 webbrowser 调用浏览器显示html文件 webbrowser.open('map.html') [webbrowser - Convenient Web-b ...