导出 doc
...
/**
* 导出word
* @return
* @throws Exception
*/
@JCall
public String word() throws Exception{
String data=WebUtil.getParam("submitData");
// {"nf":"2005","jd":"第四季度:10月-12月","yf":"","zdy_ks":"","zdy_js":""} // 数据处理
List<Map<String, Object>> sj = sjcl(data); //文件名
String fileName = DateUtil.format("yyyyMMddHHmmssSSS", new Date())+ ".doc";
fileName = URLEncoder.encode(fileName, "utf-8"); CustomXWPFDocument doc = mortgage(sj,data); // (用于处理.docx文件的高(ish)级别类) 自定义 XWPFDocument,并重写 createPicture()方法 try{//输出文件 PropertiesUtil propertiesUtil=new PropertiesUtil("/db.properties");
// 作用是使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据。
FileOutputStream os = new FileOutputStream(new File(System.getProperty("catalina.home")+"/webapps/"+this.getRequest().getContextPath()+"/doc/"+fileName));
// 获得字节流,通过该字节流的write(byte[] bytes)可以向response缓冲区中写入字节,再由Tomcat服务器将字节内容组成Http响应返回给浏览器。
// OutputStream os = getResponse().getOutputStream();
doc.write(os);
//os.flush();
os.close();
return fileName;
} catch (Exception e) {
e.printStackTrace();
// 没有数据 返回什么到前台呢
return "false";
}
} // 数据处理
private List<Map<String, Object>> sjcl(String data) throws Exception {
JSONObject Jdata =JSONObject.fromObject(data);
String nf = Jdata.get("nf").toString();
String jd = Jdata.get("jd").toString();
String yf = Jdata.get("yf").toString();
String zdy_ks = Jdata.get("zdy_ks").toString();
String zdy_js = Jdata.get("zdy_js").toString();
// {"nf":"2005","jd":"第四季度:10月-12月","yf":"","zdy_ks":"","zdy_js":""} String sql = " SELECT T.TASK_ID,T.TASK_NAME,T.XTYH_ID,T.TASK_DATE,T.TASK_TEXT, T.BY2,t.by3,T.CREATE_USER,T.CREATE_DATE,T.INSERT_PERSON,T.INSERT_TIME,T.DATA_FLAG,T.XMLX,T.SFGK,T.TASK_NAME_ID "
+" FROM FSXC3.T_FSXC_TASK T "
+" WHERE T.DATA_FLAG <> 'D' "
+" AND T.XTYH_ID='"+SysUtil.getUserId()+"' ";
// dateTime=dateTime+" 00:00:00";
// String sql = " select * from t_fsxc_task t where t.XTYH_ID='"+SysUtil.getUserId()+"' and t.TASK_DATE like to_date('"+dateTime+"','yyyy-MM-dd') and t.MODIFY_FLAG<>'D' ";
// date>='2010-01-01' and date<='2010-10-1'
if(!nf.equals("") && jd .equals("") && yf.equals("")){ // 年份不等于空,季度等于空,月份等于空 >>年度
// nf+="-01-01";
sql += " AND T.TASK_DATE like '%"+nf+"%' "; // 模糊查询 }else if(!jd.equals("")){ // 季度(问?第一:只选了季度;第二:季度加年份)
String jdks = "";
String jdjs = "";
if(jd.equals("第一季度:1月-3月")){
jdks += "-01-01";
jdjs += "-03-31";
}else if(jd.equals("第二季度:4月-6月")){
jdks += "-04-01";
jdjs += "-06-30";
}else if(jd.equals("第三季度:7月-9月")){
jdks += "-07-01";
jdjs += "-09-30";
}else if(jd.equals("第四季度:10月-12月")){
jdks += "-10-01";
jdjs += "-12-31";
}
if(!nf.equals("")){
sql += " AND T.TASK_DATE >= '"+nf+jdks+"' AND T.TASK_DATE <= '"+nf+jdjs+"' ";
}else{
// 获得当前年份 加上季度时间
Calendar date = Calendar.getInstance();
String year = String.valueOf(date.get(Calendar.YEAR)); sql +=" AND T.TASK_DATE >= '"+year+jdks+"' AND T.TASK_DATE <= '"+year+jdjs+"' ";
}
}else if(!yf.equals("")){ // 月份
// 获得当前年份 加上季度时间
Calendar date = Calendar.getInstance();
int year = date.get(Calendar.YEAR); // 年份 String Iyf = yf.substring(0,1); // 截取String中数字部分的月份
int month = Integer.parseInt(Iyf); // 如果有0就只有数字 String yfx ="-"+yf+"-01"; /////////////////////////////////////////////
// 获得某年某月的最后一天
Calendar cal = Calendar.getInstance();
//设置年份
cal.set(Calendar.YEAR,year);
//设置月份
cal.set(Calendar.MONTH, month-1);
//获取某月最大天数
int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
/////////////////////////////////////// String yfd ="-0"+Iyf+lastDay; // 没有31号的月份会不会报错 // 获取这个月的最后一天 if(!nf.equals("")){
sql += " AND T.TASK_DATE >= '"+nf+yfx+"' AND T.TASK_DATE <= '"+nf+yfd+"' ";
}else{
sql +=" AND T.TASK_DATE >= '"+year+yfx+"' AND T.TASK_DATE <= '"+year+yfd+"' ";
}
} if(!zdy_ks.equals("")){
sql +=" AND T.TASK_DATE >= '"+zdy_ks+"' ";
} if(!zdy_js.equals("")){
sql +=" AND T.TASK_DATE <= '"+zdy_js+"' ";
} // (List集合中的对象是一个Map对象,而这个Map对象的键是String类型,值是Object类型)
List<Map<String, Object>> sj = this.dBSelect(sql.toString()); // 调用查询数据库
return sj;
} // word
private CustomXWPFDocument mortgage(List<Map<String, Object>> sj,String tj) throws Exception {
JSONObject jsonObject=JSONObject.fromObject(tj);
//{"nf":"2005","jd":"第四季度:10月-12月","yf":"","zdy_ks":"","zdy_js":""}
String bt="";
if(!jsonObject.getString("nf").equals("")){
bt=jsonObject.getString("nf");
}else if(!jsonObject.getString("jd").equals("")){
bt+=jsonObject.getString("jd")+"个人工作";
}else if(!jsonObject.getString("yf").equals("")){
bt+=jsonObject.getString("yf")+"个人工作";
}
if(!jsonObject.getString("zdy_ks").equals("") && !jsonObject.getString("zdy_js").equals("")){
bt=jsonObject.getString("zdy_ks").replace("T00:00:00", "")+"到"+jsonObject.getString("zdy_js").replace("T00:00:00", "")+"个人工作";
} CustomXWPFDocument document= new CustomXWPFDocument(); //添加标题
XWPFParagraph titleParagraph = document.createParagraph(); //设置段落居中
titleParagraph.setAlignment(ParagraphAlignment.CENTER); XWPFRun titleParagraphRun = titleParagraph.createRun();
titleParagraphRun.setBold(true);
titleParagraphRun.setText(bt);
titleParagraphRun.setFontFamily("方正小标宋简体");
titleParagraphRun.setColor("000000");
titleParagraphRun.setFontSize(22); //换行
XWPFParagraph paragraph1 = document.createParagraph();
XWPFRun paragraphRun1 = paragraph1.createRun();
paragraphRun1.setText("\r"); for(int i=0;i<sj.size();i++){
//段落
XWPFParagraph firstParagraph = document.createParagraph();
XWPFRun run = firstParagraph.createRun();
String ybgcm=(i+1)+"."+SysUtil.toStr(sj.get(i).get("task_date"))+SysUtil.toStr(sj.get(i).get("task_name"))+"-"+SysUtil.toStr(sj.get(i).get("by2"))+" ("+SysUtil.toStr(sj.get(i).get("by3"))+")";
run.setText(ybgcm);
run.setBold(true);
run.setColor("000000");
run.setFontSize(15); //段落
XWPFParagraph Paragraph2 = document.createParagraph();
XWPFRun run2 = Paragraph2.createRun();
run2.setBold(false);
run2.setText("工作内容:"+SysUtil.toStr(sj.get(i).get("task_text")));
run2.setColor("000000");
run2.setFontSize(15); //段落
XWPFParagraph Paragraph3 = document.createParagraph();
XWPFRun run3 = Paragraph3.createRun();
run3.setBold(false);
run3.setText("附件:");
run3.setColor("000000");
run3.setFontSize(15); //获取附件
String sqlString ="select t.file_info_id,t.file_extend,t.file_info_c3,t.file_filename from T_P_FILE_INFO t where t.data_flag <> 'D' and t.file_index ='"+SysUtil.toStr(sj.get(i).get("task_id"))+"'";
List<Map<String, Object>> fjList=dBSelect(sqlString);
for(int j=0;j<fjList.size();j++){
String imagePath =SysUtil.toStr(fjList.get(j).get("file_info_id"))+"."+SysUtil.toStr(fjList.get(j).get("file_extend"));
String imgurl = System.getProperty("catalina.home")+"/webapps/webdav/"+imagePath;
int format;
if(imgurl.endsWith(".emf")) format = XWPFDocument.PICTURE_TYPE_EMF;
else if(imgurl.endsWith(".wmf")) format = XWPFDocument.PICTURE_TYPE_WMF;
else if(imgurl.endsWith(".pict")) format = XWPFDocument.PICTURE_TYPE_PICT;
else if(imgurl.endsWith(".jpeg") || imgurl.endsWith(".jpg")) format = XWPFDocument.PICTURE_TYPE_JPEG;
else if(imgurl.endsWith(".png")) format = XWPFDocument.PICTURE_TYPE_PNG;
else if(imgurl.endsWith(".dib")) format = XWPFDocument.PICTURE_TYPE_DIB;
else if(imgurl.endsWith(".gif")) format = XWPFDocument.PICTURE_TYPE_GIF;
else if(imgurl.endsWith(".tiff")) format = XWPFDocument.PICTURE_TYPE_TIFF;
else if(imgurl.endsWith(".eps")) format = XWPFDocument.PICTURE_TYPE_EPS;
else if(imgurl.endsWith(".bmp")) format = XWPFDocument.PICTURE_TYPE_BMP;
else if(imgurl.endsWith(".wpg")) format = XWPFDocument.PICTURE_TYPE_WPG;
else {
System.err.println("Unsupported picture: " + imgurl +
". Expected emf|wmf|pict|jpeg|png|dib|gif|tiff|eps|bmp|wpg"); //不是图片,直接输入超链接
appendExternalHyperlink(this.getRequest().getScheme()+"://"+this.getRequest().getServerName()+":"+this.getRequest().getServerPort()+"/webdav/"+imagePath,
fjList.get(j).get("file_filename").toString(), document.createParagraph());
continue;
} File dir = new File(imgurl);
if (dir.exists()) {
String picId = document.addPictureData(new FileInputStream(imgurl), format);
document.createPicture(picId, document.getNextPicNameNumber(format), 500, 400);
}
} } return document;
}
导出 doc的更多相关文章
- eclipse导出doc文档
选中需要导出的项目, 1 点击eclipse上面的Project,选择Generate javadoc..., 2 然后配置 javadoc command,比如我本地的路径为: C:\Program ...
- Eclipse文档注释导出doc
选择要导出的项目,右键选择Export 直接next,在最后finish之前加上编码格式.要不然会出现乱码
- eclipse导出doc帮助文档字符编码设置
- php导出word格式数据的代码
<?php /** * 生成word文档的类 * by www.jbxue.com */ class word { function start() { ...
- 使用PHP导出Word文档的原理和实例
PHP操作Word文档的方法有很多,这里再为大家提供一种方法. 原理 一般,有2种方法可以导出doc文档,一种是使用com,并且作为php的一个扩展库安装到服务器上,然后创建一个com,调用它的方 ...
- DevExpress ASPxHtmlEditor控件格式化并导出Word (修复中文字体导出丢失)
在前台页面中先插入一个ASPxHtmlEditor控件,名为ASPxHtmlEditor1. 我用的Dev版本为14.1 格式化文本 在后台插入如下代码 1 const string css ...
- php导出word格式数据的代码(转)
本节内容:一个php导出文档的类 例子:<?php /*** 生成word文档的类* by www.jbxue.com*/class word{ function start() ...
- PHP网页导出Word文档的方法分离
今天要探讨的是PHP网页导出Word文档的方法,使用其他语言的朋友也可以参考,因为原理是差不多的. 原理 一般,有2种方法可以导出doc文档,一种是使用com,并且作为php的一个扩展库安装到服务器上 ...
- PHP导出excel word的代码
php导出为word原理 一般,有2种方法可以导出doc文档,一种是使用com,并且作为php的一个扩展库安装到服务器上,然后创建一个com,调用它的方法.安装过office的服务器可以调用一个叫wo ...
随机推荐
- Kettle学习笔记(一)— 环境部署及运行
目录 Kettle学习笔记(一)-环境部署及运行 Kettle学习笔记(二)- 基本操作 kettle学习笔记(三)- 定时任务的脚本执行 Kettle学习笔记(四)- 总结 Kettle简介 Ket ...
- 配置一个简单的传统SSM项目
背景 我们知道,从2002年开始,Spring一直在飞速的发展,如今已经成为了在Java EE开发中的标准,早期的项目都是传统的Spring-SpringMVC-Mybatis项目,打成一个war包丢 ...
- 从工具、工具箱到数字化软件工厂——DevOps 设计理念与工程实践专场 | CIF 精彩看点
西方经典管理理论认为,组织效率可以归为劳动效率.组织效率和人的效率.美国管理学家泰勒所著的<科学管理原理>被德鲁克誉为"20 世纪最伟大的发明",劳动效率说认为分工提升 ...
- C#开发BIMFACE系列44 服务端API之计算图纸对比差异项来源自哪个图框
BIMFACE二次开发系列目录 [已更新最新开发文章,点击查看详细] 在前两篇博客<C#开发BIMFACE系列42 服务端API之图纸对比>.<C#开发BIMFACE系列43 ...
- bzoj1341 名次排序问题rank sorting(dp,考虑到对未来的贡献)
QWQ啊 这个题可以说是我目前碰到过的最难理解的dp之一了. 题目大意: 已知参赛选手的得分,你的任务是按照得分从高到底给出选手的排名.遗憾的是,保存选手信息的数据结构只支持 一种操作,即将一个选手从 ...
- FastAPI 学习之路(十)请求体的字段
系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...
- HTTP状态码 详细解析汇总
一.状态码的类别: 类别 原因短语1XX Informational(信息性状态码) 接受的请求正在处理2XX Success(成功状态码) 请求正常处理完毕3XX Redirection(重定向状态 ...
- 【c++ Prime 学习笔记】目录索引
第1章 开始 第Ⅰ部分 C++基础 第2章 变量和基本类型 第3章 字符串.向量和数组 第4章 表达式 第5章 语句 第6章 函数 第7章 类 第 Ⅱ 部分 C++标准库 第8章 IO库 第9章 顺序 ...
- 【数据结构与算法Python版学习笔记】树——平衡二叉搜索树(AVL树)
定义 能够在key插入时一直保持平衡的二叉查找树: AVL树 利用AVL树实现ADT Map, 基本上与BST的实现相同,不同之处仅在于二叉树的生成与维护过程 平衡因子 AVL树的实现中, 需要对每个 ...
- HCNP Routing&Switching之BGP防环机制和路由聚合
前文我们了解了BGP路由宣告相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15440860.html:今天我们来聊一聊BGP防环机制和路由聚合相关话题 ...