用于生成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>();
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);
// 这个地方不能使用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;
in = new fileinputstream(filename);
data = new byte[in.available()];
in.read(data);
in.close();
} 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.filenotfoundexception;
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
* @date 2015-4-12 上午9:36:43
@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;
// 调用工具类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);
if (fin != null)
fin.close();
if (out != null)
out.close();
if (file != null)
file.delete(); // 删除临时文件
service代码
package com.ucap.netcheck.service;
/**
* @title: report2wordservice.java
* @package com.ucap.netcheck.service
* @description: 用户生成word的报告的service接口
* @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.list;
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.isinglerejectresultservice;
import com.ucap.netcheck.service.isiteservice;
import com.ucap.netcheck.service.targettypeservice;
* @title: report2wordserviceimpl.java
* @package com.ucap.netcheck.service.impl
* @description:
* @author
* @date 2015-4-12 上午11:58:09
@service
public class report2wordserviceimpl implements ireport2wordservice {
private isiteservice siteservice;
private checkserviceservice checkserviceservice;
private ireport2worddao report2worddao;
private targettypeservice targettypeservice;
private isinglerejectresultservice singlerejectresultservice;
* todo
@override
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("")} 判断字符串是空的时候的处理情况