package com.chis.web.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.StringWriter;
import java.net.URLEncoder;
import java.util.Map;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.chis.web.reportBean.JasperPrintBean;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JasperRunManager;
public class DownLoadUtil {
public static String uploadFile2Database(FileInputStream fis)
throws IOException {
StringWriter sw = new StringWriter();
int len = 1;
byte[] temp = new byte[len];
/* 16进制转化模块 */
for (; (fis.read(temp, 0, len)) != -1;) {
if (temp[0] > 0xf && temp[0] <= 0xff) {
sw.write(Integer.toHexString(temp[0]));
} else if (temp[0] >= 0x0 && temp[0] <= 0xf) {// 对于只有1位的16进制数前边补“0”
sw.write("0" + Integer.toHexString(temp[0]));
} else { // 对于int<0的位转化为16进制的特殊处理,因为Java没有Unsigned
// int,所以这个int可能为负数
sw.write(Integer.toHexString(temp[0]).substring(6));
}
}
return sw.toString();
}
public static void writeNew2Binary(ServletOutputStream sos, String replaced)
throws NumberFormatException, IOException {
for (int i = 0; i < replaced.length(); i = i + 2) {
sos.write(Integer.parseInt(replaced.substring(i, i + 2), 16));
}
}
/**
* 文件下载
*/
public static void downFile(String fileName, String fileContent) {
try {
HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext
.getCurrentInstance().getExternalContext().getResponse();
// 从页面下载的流
ServletOutputStream servletOutputStream = httpServletResponse
.getOutputStream();
writeNew2Binary(servletOutputStream, fileContent);
// 文件名编码转换
httpServletResponse.setHeader("Content-disposition","attachment; filename="+ URLEncoder.encode(fileName, "UTF-8"));
httpServletResponse.setContentLength((int) fileContent.length() / 2);
httpServletResponse.setContentType("application/x-download");
servletOutputStream.flush();
servletOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
FacesContext.getCurrentInstance().responseComplete();
}
/**
* 框架内嵌入报表打印
* @param tjb
*/
public static void printPdf1(JasperPrintBean tjb) {
HttpServletResponse response = (HttpServletResponse) FacesContext
.getCurrentInstance().getExternalContext().getResponse();
HttpServletRequest request = (HttpServletRequest) FacesContext
.getCurrentInstance().getExternalContext().getRequest();
ServletContext servletContext = request.getSession()
.getServletContext();
File reportFile = new File(servletContext
.getRealPath(tjb.getFileName()));
String myname = new String("裴贺先");
Map<String, Object> parameters = tjb.getParam();
parameters.put("Name", myname);
JRDataSource ds = tjb.getDs();
try {
byte[] bytes = JasperRunManager.runReportToPdf(
reportFile.getPath(), parameters, ds);
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
} catch (Exception e) {
System.out.println("打印报表失败:" + e.getMessage());
}
FacesContext.getCurrentInstance().responseComplete();
}
}