Java利用freemaker和(excelXML表格或wordXML表格),导出自己任何想要格式的文档

做管理系统比较爱用,还在像以前用html化报表,还像以前那样用DIV固定格式,固定填充数据的位置,

1、写好excel或者word

像这样:  中间的单元格 你可以随便填一些字母或者中文,这个是方便找它的位置,像我这样是因为我的JAVA代码封装了map,我可以通过这样去取值

2、将这文件另存为xml表(.xml)的格式,然后将文件扔在你的action包中,或者其他文件夹下。

3、这时候的文件还是.xml格式的文件,但是我们需要的freemaker的文件格式,所以你需要重命名将它的后缀改成.ftl的。

改好后,你可以打开它了,还记得图片上的我写了很多那种el表达式吗,找着你模板中写了这些表达式的位置:像这样

4 这时候  我们的模板算是基本完成了。那么接下来就要去写方法,然后取出你要填写到单元格的数据了。如果是WORD也是类似的,不用再像以前那样用HTML画DIV了。

5 首先写好实现类的方法

6 加载数据到模板中。利用freemaker的list循环将数据填充到你需要的位置,如果是单条数据填充word 是不需要循环。(只是我的部分代码)

@RequestMapping(value="/downloadzcexcel.action")
public void zcExcelImport(HttpServletRequest request, HttpServletResponse response)
throws Exception {
String fileName=null;
DocumentHandler handler=null;
String tempBasePath=null;
String tempName=null;
request.setCharacterEncoding("utf-8");
Map<String, Object> zcdata = new HashMap<String, Object>();
String sbzg=request.getParameter("sbzg");
String bbmc=request.getParameter("bbmc");
String year=request.getParameter("year");
String excelType=request.getParameter("excelType");
String xkzType=request.getParameter("xkzType");
bbmc=java.net.URLDecoder.decode(bbmc,"UTF-8");//参数解码
sbzg=java.net.URLDecoder.decode(sbzg,"UTF-8");
String pid=request.getParameter("pid");
excelType=java.net.URLDecoder.decode(excelType,"UTF-8"); //报表类型
if("评委会投票表".equals(excelType)){
xkzType=java.net.URLDecoder.decode(xkzType,"UTF-8");
tempBasePath="/com/daqsoft/titlemgmt/Action";
tempName="zcpwhtp.ftl";
handler=new DocumentHandler(tempBasePath);
List<Map> list=zcExcelService.getExcelByPwh(sbzg, xkzType,year);
zcdata.put("rows", list);
zcdata.put("BBMC", bbmc);
zcdata.put("XKZ", xkzType);
zcdata.put("COUNT", list.size());
}else{
if("706".equals(pid)){
tempBasePath="/com/daqsoft/titlemgmt/Action"; //资格评审、名册报表(转系列)
tempName="zcExcelByZxl.ftl";
handler=new DocumentHandler(tempBasePath);
List<Map> list=zcExcelService.getSbzgByZc(sbzg,year);
zcdata.put("rows", list);
zcdata.put("BBMC", bbmc);
zcdata.put("COUNT", list.size());
}else{
tempBasePath="/com/daqsoft/titlemgmt/Action"; //资格评审、名册报表(正常的)
tempName="zcexcel.ftl";
handler=new DocumentHandler(tempBasePath);
List<Map> list=zcExcelService.getSbzgByZc(sbzg,year);
zcdata.put("rows", list);
zcdata.put("BBMC", bbmc);
zcdata.put("COUNT", list.size());
}
}
File file = null;
InputStream inputStream = null;
ServletOutputStream outServletOutputStream = null;
try {
file=handler.createDoc(zcdata, fileName, tempBasePath, tempName);
inputStream=new FileInputStream(file);
response.setCharacterEncoding("utf-8");
response.setContentType("application/msexcel");
response.addHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(bbmc,"utf-8")+".xls");
outServletOutputStream=response.getOutputStream();
byte[] buffer = new byte[512];
int bytesToRead = -1;
while ((bytesToRead = inputStream.read(buffer)) != -1) {
outServletOutputStream.write(buffer, 0, bytesToRead);
}
} catch (Exception e) {
e.printStackTrace();
}finally{

if (inputStream != null)
inputStream.close();
if (outServletOutputStream != null)
outServletOutputStream.close();
if (file != null)
file.delete(); // 删除临时文件
}
}

7 下面是需要用到一个工具类,和数据流的输出是一样的

public File createDoc(Map<String,Object> dataMap,String fileName,String tempBasePath,String tempName) throws UnsupportedEncodingException {
//dataMap 要填入模本的数据文件
//设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库装载,
//这里我们的模板是放在template包下面
//tempBasePath:‘/com/daqsoft/hrmanage/action‘
//tempName : ‘gbddTemp.ftl‘

fileName=fileName!=null?fileName:"temp" + (int) (Math.random() * 100000);
Template t=null;
try {
//test.ftl为要装载的模板
t = configuration.getTemplate(tempName);
} catch (IOException e) {
e.printStackTrace();
}
//输出文档路径及名称
File outFile = new File(fileName);
Writer out = null;
try {
out=new OutputStreamWriter(new FileOutputStream(outFile), "utf-8");
t.process(dataMap, out);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("------------完成文件封装---------------");
return outFile;

}

时间: 2024-10-27 08:09:27

Java利用freemaker和(excelXML表格或wordXML表格),导出自己任何想要格式的文档的相关文章

开发四年Java程序员斩获阿里P6岗,月薪40K+,靠的就是这两份文档!

目前一线城市的薪资水平在13到40k之间,但是找工作的时候并不仅仅有工作经验就行了,还需要一定的专业知识.如果你野心更大,想要进阿里美团头条等等这些大厂的话,那就需要更多的专业知识.那么,一个四年工作经验的Java程序员应该要具备哪些知识呢? 我整理了之后发现,程序员需要懂好多的知识. 为此,我将这些知识点整理搜集成了一个核心笔记PDF版,以及配套的面试题大纲,加起来差不多八百页!因为知识点太多,我这里只截目录出来,如需完整核心笔记及面试大纲的可以进我的学习交流群:909666042 免费获取!

Java利用poi生成word(包含插入图片,动态表格,行合并)

转: Java利用poi生成word(包含插入图片,动态表格,行合并) 2018年12月20日 09:06:51 wjw_11093010 阅读数:70 Java利用poi生成word(包含插入图片,动态表格,行合并) 测试模板样式: Word生成结果: 图表 2需要的jar包:(具体jar可自行去maven下载) 注意:需要严格按照上面版本下载jar包,否则可能出现jar包之间不能匹配的导致代码报错 各种 jar包都可以在这里下载: https://mvnrepository.com/ Tes

word 文档导出 (freemaker+jacob)--java开发

工作中终于遇到了 需要导出word文旦的需求了.由于以前没有操作过,所以就先百度下了,基本上是:博客园,简书,CDSN,这几大机构的相关帖子比较多,然后花了2周时间 才初步弄懂.  学习顺序: 第一阶段 1,.首先 是 先了解 java 通过什么方式 来操作word的导出工作.就有了下面这个帖子了: java 操作 word 的方法 :https://www.cnblogs.com/lcngu/p/5247179.html .新手可以先看看了解下. 2. 根据需求:操作word很复杂: 1.有图

Struts2利用iText导出word文档(包含表格)以提供下载

J2EE ExcelStrutsXML 在公司实习期间,带我的老师让我实现一功能——在显示课表的页面上上点击“导出文件“时能以word文档形式下载课表.将课表导出到excel里的功能他们已经实现了,用的是Struts2+poi实现的.poi对excel表格操作能力很强,但是对word文档的支持一直没有更新,操作能力有限. iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf 的文档,而且可以将XML.Ht

百度文库的实现——java利用openoffice,word转pdf

百度文库的主要功能就是将上传的word文档,转码成pdf格式再展示出来.其中有四种方法可以实现这样的操作: 方法一:用apache pio 读取doc文件,然后转成html文件用Jsoup格式化html文件,最后用itext将html文件转成pdf. 方法2:使用jdoctopdf来实现,这是一个封装好的包,可以把doc转换成pdf,html,xml等格式,调用很方便需要注意中文字体的写入问题. 方法3:使用jodconverter来调用openOffice的服务来转换,openOffice有个

Java实现web在线预览office文档与pdf文档实例

https://yq.aliyun.com/ziliao/1768?spm=5176.8246799.blogcont.24.1PxYoX 摘要: 本文讲的是Java实现web在线预览office文档与pdf文档实例, 1.首先我们需要找到可以把office转换成pdf的方法,查找资料发现有openoffice这一软件可以把office转换成pdf,这一软件先下载下来,然后记住自己安装的在那个位置.然后在cmd环境下进入安装目录的program目 云计算 云服务器ECS 大数据 建站 备案 文档

java将office文档pdf文档转换成swf文件在线预览

java将office文档pdf文档转换成swf文件在线预览 第一步,安装openoffice.org   openoffice.org是一套sun的开源office办公套件,能在widows,linux,solaris等操作系统上执行. 主要模块有writer(文本文档),impress(演示文稿),Calc(电子表格),Draw(绘图),Math(公式),base(数据库) 笔者下载的是openoffice.org 3.3.0.下载完直接安装即可.      但是,我们还需要启动openof

利用OpenXml生成Word2007文档

一.OpenXml简介 利用C#生成Word文档并非一定要利用OpenXml技术,至少可以使用微软提供的Office相关组件来编程,不过对于Office2007(确切的说是Word.Excel和PowerPoint2007)及以上版本,微软提供了这些信息组织的另外一种思路:OpenXml技术. OpenXml是微软office2007及之后版本里,对Office信息内容(Word.Excel和PowerPoint)的一种组织方式,当你创建一个Word2007文档:XXX.docx后,它实际上是一

word文档(选择题)转换为excl表格

Word转excl表格 同事在做一个批量性的工作,就是将word文档中的题目和选项,转移到xml文档中.实例:转: 再网上有很多将各种文档转化的工具和例子,但是很少有将固定格式进行转化的. 因为在这之前也是不明所以,老大直接让写个脚本,本能的感觉这个脚本不是很好写,有危险.但是哪有害怕就不做的道理,不会也要干. 首先确定好转化思路 1.查了很多资料,转excl的都是用的json文件转字典再转excl或者将字典.元组.列表转为json再转excl.归根结底就是将字典转excl.比较欣喜的是正好可以