whyclj
2019-06-29 82c1e7ced425f43781b0cd01290fad298f51e623
sensor/src/com/fgkj/servlets/EchartPictureDowloadServlet.java
@@ -1,6 +1,9 @@
package com.fgkj.servlets;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
@@ -9,6 +12,7 @@
import java.util.Date;
import java.util.List;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
@@ -34,6 +38,11 @@
   protected void service(HttpServletRequest req, HttpServletResponse resp)
         throws ServletException, IOException {
      String pageName = req.getParameter("pageName");
      String eName = req.getParameter("excelName");
      if(eName != null && eName.length()>0){
         excelName = eName;
      }
      if (ServletUtils.isNotNull(pageName)) {
         if ("charge-test".equalsIgnoreCase(pageName)) {
            chargeExcelExprot(req, resp);            //导出单个图表            
@@ -56,11 +65,14 @@
      String[] picNames = null;
      String[] picSours = null;
      String[][] tabData = null;
      try {
         picNames = ActionUtil.getGson().fromJson(req.getParameter("picNames"), String[].class);
         picSours = ActionUtil.getGson().fromJson(req.getParameter("picSours"), String[].class);
         tabData  = ActionUtil.getGson().fromJson(req.getParameter("tabData"), String[][].class);
         picNames = req.getParameter("picNames")==null?null:ActionUtil.getGson().fromJson(req.getParameter("picNames"), String[].class);
         picSours = req.getParameter("picSours")==null?null:ActionUtil.getGson().fromJson(req.getParameter("picSours"), String[].class);
         tabData  = req.getParameter("tabData")==null?null:ActionUtil.getGson().fromJson(req.getParameter("tabData"), String[][].class);
//         for(int i =0;i<picNames.length;i++) {
//            System.out.print(picNames[i]+"\t");
//            System.out.println(picSours[i]);
//         }
         // 创建一个工作薄
         HSSFWorkbook wb = new HSSFWorkbook();
         if(picNames != null && picSours != null){
@@ -87,8 +99,8 @@
   private void ExprotReportTabData(HSSFWorkbook wb, HttpServletRequest req,
         HttpServletResponse resp, String[][] tabData) {
      HSSFSheet sheet1 = wb.createSheet("表格数据");
      int rownum = 1;
      for(int i=0;i<tabData[0].length;i++){
      int rownum = 0;
      for(int i=0;i<tabData.length;i++){
         sheet1.createRow(rownum);
         for(int j=0;j<tabData[i].length;j++){
            sheet1.getRow(rownum).createCell(j+1).setCellValue(tabData[i][j]);
@@ -101,28 +113,46 @@
   private void ExprotReportPicData(HSSFWorkbook wb, HttpServletRequest req,
         HttpServletResponse resp,String[] picName,String[] picSource) {
      HSSFSheet sheet1 = wb.createSheet("图片数据");
      double[] picPX = new double[picSource.length];
      bytes = new ArrayList<byte[]>();
      //将图片数据转换成字节数组
      BASE64Decoder base64 = new BASE64Decoder();
      //Base64解码
      byte[] b;
      BufferedImage src = null;
      for(int i = 0 ;i<picSource.length;i++ ){
         try {
            bytes.add(new BASE64Decoder().decodeBuffer(picSource[i].split(",")[1]));
            bytes.add(base64.decodeBuffer(picSource[i].split(",")[1]));
            b = base64.decodeBuffer(picSource[i].split(",")[1]);
            for (int k = 0; k < b.length; ++k) {
               if (b[k] < 0) {// 调整异常数据
                  b[k] += 256;
               }
            }
            InputStream buffin = new ByteArrayInputStream(b);
            src = ImageIO.read(buffin);
            int widthYuan = src.getWidth(); // 得到源图宽
              int heightYuan = src.getHeight(); // 得到源图高
            //System.out.println("width:"+widthYuan+"\theight:"+heightYuan+"\t单元格宽:"+swidth+"\t单元格高"+sheight);
            picPX[i] = (double)widthYuan/(heightYuan*4);
         } catch (IOException e) {
            e.printStackTrace();
         }
      }
      int rownum = 1;
      int rownum = 0;
      //创建图片
      if(bytes.size() > 0){         
         HSSFPatriarch patriarch = sheet1.createDrawingPatriarch();
         for(int i=0;i<bytes.size();i++){
            sheet1.createRow(rownum);
            sheet1.getRow(rownum).createCell(1).setCellValue(i>=picName.length?"":picName[i]);
            sheet1.getRow(rownum).createCell(0).setCellValue(i>=picName.length?"":picName[i]);
            rownum++;
            HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 512, 255,(short) 1, rownum, (short) 10, 25 * (i + 1));
            HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 512, 255,(short) 0, rownum, (short) Math.ceil(25*picPX[i]), 25 + rownum-1);
            anchor.setAnchorType(3);
            patriarch.createPicture(anchor,wb.addPicture(bytes.get(i),HSSFWorkbook.PICTURE_TYPE_PNG)).resize(1);
            rownum+=25;
            patriarch.createPicture(anchor,wb.addPicture(bytes.get(i),HSSFWorkbook.PICTURE_TYPE_PNG));
            rownum+=26;
         }
      }
   }
@@ -567,4 +597,5 @@
   public static double formartDouble(double b , int places){
      return new   BigDecimal(b).setScale(places,   BigDecimal.ROUND_HALF_UP).doubleValue();  
   }
}