package com.wdit.linsheng.modules.cms.utils;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.apache.http.client.utils.DateUtils;
import org.apache.log4j.Logger;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import com.wdit.linsheng.common.config.Global;
import com.wdit.linsheng.modules.cms.entity.Complain;
public class WordUtil {
static Logger logger = Logger.getLogger(WordUtil.class);
private static WordUtil wordUtil = null;
/**
* 私有构造
*/
private WordUtil() {
}
public static WordUtil getInstance() {
if (wordUtil == null) {
wordUtil = new WordUtil();
}
return wordUtil;
}
/**
* 方法描述:下载文件
* @param response
* @param rootPath
* @param targetName
* @param fileName
* @param module
* @throws IOException
*/
public void downloadFile(String path, String downLoadFileName,HttpServletResponse response) {
try {
File file = new File(path);
if (!file.exists()) {
return;
}
file = new File(path + downLoadFileName);
InputStream fis = new BufferedInputStream(new FileInputStream(file));
//buffer 中间缓冲池
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
//保存为word
//String tragetFileName = downLoadFileName + ".doc";
// 清空response
response.reset();
// 设置response的Header
response.addHeader("Content-Disposition",
"attachment;filename=" + downLoadFileName);//URLEncoder.encode());//, "UTF-8"
// 设置response的Header 如果文件名参数中含有中文的写法
//response.addHeader( "Content-Disposition",
// "attachment;filename=" + new String(downLoadFileName.getBytes("gb2312"), "ISO8859-1"));
response.addHeader("Content-Length", "" + file.length());
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
response.setContentType("text/plain");
toClient.write(buffer);
toClient.flush();
toClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 创建 投诉热线 word文档
* @param list
* @param response
* @return
*/
public static String createComplain(List<Complain> list) {
try {
XWPFDocument doc = new XWPFDocument();
XWPFParagraph p1 = doc.createParagraph();
//设置段落左对齐
p1.setAlignment(ParagraphAlignment.LEFT);
XWPFRun r1 = p1.createRun();
for (Complain complain : list) {
r1.setText("时间:");
r1.setText(DateUtils.formatDate(complain.getCreateDate(), "yyyy-MM-dd HH:mm:ss"));
// r1.addBreak();
r1.setText("地点:");
r1.setText(complain.getAddress());
// r1.addBreak();
r1.setText("内容:");
// r1.addBreak();
r1.setText(complain.getContent());
r1.setText("姓名:");
r1.setText(complain.getName());
// r1.addBreak();
r1.setText("电话:");
r1.setText(complain.getPhone());
// r1.addBreak();
r1.setText("是否公开:");
r1.setText(complain.getIsPublic());
// r1.addBreak();
r1.setText("信息补充:");
// r1.addBreak();
r1.setText(complain.getYjComm());
r1.setTextPosition(100);
}
String fileName = Global.getWebProjectPath() + File.separator + "doc" + File.separator + list.get(0).getTitle() + ".doc" ;
File tempFile = new File(fileName);
if (tempFile.exists()) {
tempFile.delete();
}
FileOutputStream out = new FileOutputStream(fileName);
doc.write(out);
out.close();
return list.get(0).getTitle() + ".doc";
} catch (Exception e) {
logger.error("exportWordError:" + e);
e.printStackTrace();
return null;
}
}
/**
* 利用模板创建投诉热线WORD
* @param list
* @return
*/
public static String createComplainWord(List<Complain> list){
try {
String templatePath = Global.getWebProjectPath() + File.separator + "doc" + File.separator + "compTemplete.doc";
InputStream is = new FileInputStream(templatePath);
HWPFDocument doc = new HWPFDocument(is);
Range range = doc.getRange();
Complain complain = list.get(0);
//把range范围内的${param}替换为对应参数
range.replaceText("${incidentDate}", DateUtils.formatDate(complain.getIncidentDate(), "yyyy-MM-dd HH:mm:ss"));
range.replaceText("${location}", complain.getLocation());
range.replaceText("${content}", complain.getContent());
range.replaceText("${name}", complain.getName());
range.replaceText("${phone}", complain.getPhone());
range.replaceText("${isPublic}", "1".equals(complain.getIsPublic()) ? "是" : "否");
String fileName = Global.getWebProjectPath() + File.separator + "doc" + File.separator + list.get(0).getTitle() + ".doc" ;
File tempFile = new File(fileName);
if (tempFile.exists()) {
tempFile.delete();
}
tempFile.createNewFile();
OutputStream os = new FileOutputStream(fileName);
//把doc输出到输出流中
doc.write(os);
closeStream(os);
closeStream(is);
return list.get(0).getTitle() + ".doc";
} catch (Exception e) {
logger.error("exportWordError:" + e);
e.printStackTrace();
return null;
}
}
/**
* 关闭输入流
* @param is
*/
private static void closeStream(InputStream is) {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 关闭输出流
* @param os
*/
private static void closeStream(OutputStream os) {
if (os != null) {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}