poi 导出的带等比例图片方法

  1. /**
  2. *
  3. * <p>Description: 将一物一码列表导出到excel</p>
  4. * @param response
  5. * @param list
  6. * @throws IOException
  7. */
  8. public void exportExcel(DispMeta meta) throws IOException {
  9.  
  10. Map<String, Object> params = new HashMap<String, Object>();
  11. params.put("orderNum", meta.getRequest().getParameter("orderNum"));
  12. meta.setParams(params);
  13.  
  14. IDispApi service;
  15.  
  16. meta.setParams(params);
  17. meta.setMapkey("OneThingAndOneYardService.queryProductCodeListExport");
  18. try {
  19. service = find(ModulePbDesc.PB_SALES_02, meta.getMapkey());
  20. service.disp(meta);
  21. } catch (DispException e) {
  22. e.printStackTrace();
  23. }
  24. ArrayList<Map<String,Object>> list = (ArrayList<Map<String, Object>>) meta.getResult();
  25.  
  26. HSSFWorkbook workbook = new HSSFWorkbook ();// 创建一个Excel文件
  27. HSSFSheet sheet = workbook.createSheet("一物一码");// 创建一个Excel的Sheet
  28. sheet.setColumnWidth(0, 40 * 256);
  29. sheet.setColumnWidth(1, 40 * 256);
  30. sheet.setColumnWidth(2, 40 * 256);
  31. sheet.setColumnWidth(3, 40 * 256);
  32. sheet.setColumnWidth(4, 40 * 256);
  33. sheet.setColumnWidth(5, 40 * 256);
  34. sheet.setColumnWidth(6, 40 * 256);
  35. sheet.setColumnWidth(7, 40 * 256);
  36.  
  37. HSSFRow row4 = sheet.createRow(0);
  38. HSSFCell cell4_1 = row4.createCell(0);
  39. HSSFCell cell4_2 = row4.createCell(1);
  40. HSSFCell cell4_3 = row4.createCell(2);
  41. HSSFCell cell4_4 = row4.createCell(3);
  42. HSSFCell cell4_5 = row4.createCell(4);
  43. HSSFCell cell4_6 = row4.createCell(5);
  44. HSSFCell cell4_7 = row4.createCell(6);
  45. HSSFCell cell4_8 = row4.createCell(7);
  46. cell4_1.setCellValue( "一物一码" );
  47. cell4_2.setCellValue( "订单编号" );
  48. cell4_3.setCellValue( "商品编码" );
  49. cell4_4.setCellValue( "规格材质" );
  50. cell4_5.setCellValue( "主人账号" );
  51. cell4_6.setCellValue( "柜号" );
  52. cell4_7.setCellValue( "配置号" );
  53. cell4_8.setCellValue( "生效日期" );
  54.  
  55. HSSFCellStyle style4= workbook.createCellStyle();
  56. style4.setAlignment(HSSFCellStyle. ALIGN_CENTER);//水平居中
  57. style4.setVerticalAlignment(HSSFCellStyle. VERTICAL_CENTER);//垂直居中
  58. style4.setWrapText( true);//自动换行
  59. style4.setFillForegroundColor(IndexedColors.SKY_BLUE.getIndex());
  60. style4.setFillPattern(CellStyle.SOLID_FOREGROUND);
  61. HSSFFont font4 = workbook.createFont();
  62. // font.setFontName("华文行楷");//设置字体名称
  63. font4.setFontHeightInPoints(( short)15);//设置字号
  64. // font4.setBoldweight(boldweight)( true);
  65. style4.setFont(font4);
  66.  
  67. // cell4.setCellStyle(style4);
  68. cell4_1.setCellStyle(style4);
  69. cell4_2.setCellStyle(style4);
  70. cell4_3.setCellStyle(style4);
  71. cell4_4.setCellStyle(style4);
  72. cell4_5.setCellStyle(style4);
  73. cell4_6.setCellStyle(style4);
  74. cell4_7.setCellStyle(style4);
  75. cell4_8.setCellStyle(style4);
  76. //row 4 - items List header -------------------------end
  77.  
  78. //row 5 - items List -------------------------start
  79. for (int i = 0; i < list.size(); i++) {
  80. HSSFRow row5 = sheet.createRow( i+1);
  81. HSSFCell cell5_1 = row5.createCell(0);
  82. HSSFCell cell5_2 = row5.createCell(1);
  83. HSSFCell cell5_3 = row5.createCell(2);
  84. HSSFCell cell5_4 = row5.createCell(3);
  85. HSSFCell cell5_5 = row5.createCell(4);
  86. HSSFCell cell5_6 = row5.createCell(5);
  87. HSSFCell cell5_7 = row5.createCell(6);
  88. HSSFCell cell5_8 = row5.createCell(7);
  89. Map<String, Object> map = list.get(i);
  90. // img --start
  91. ByteArrayOutputStream outStream_item = new ByteArrayOutputStream();
  92. // 将图片写入流中
  93. BufferedImage bufferImg_item = ImageIO.read(new FileInputStream("D:"+map.get("img_code").toString()));
  94. ImageIO. write(bufferImg_item, "PNG", outStream_item);
  95.  
  96. row5.setHeightInPoints(80);
  97. int width = bufferImg_item.getWidth();//原始宽度
  98. int height = bufferImg_item.getHeight();//原始高度
  99. // 一个12号字体的宽度为13,前面已设置了列的宽度为30*256,故这里的等比例高度计算如下
  100. height = (int) Math.round((height * (30 * 13) * 1.0 / width));
  101. // excel单元格高度是以点单位,1点=2像素; POI中Height的单位是1/20个点,故设置单元的等比例高度如下
  102. row5.setHeight((short) (height / 2 * 20));
  103. // 利用HSSFPatriarch将图片写入EXCEL
  104. HSSFPatriarch patri_item = sheet.createDrawingPatriarch();
  105. HSSFClientAnchor anchor_item = new HSSFClientAnchor(0, 0, 0, 0, (short ) 0, i+1, (short) 1, i+2);
  106. patri_item.createPicture(anchor_item, workbook.addPicture(outStream_item.toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG));
  107. // img -- end
  108.  
  109. //订单编号
  110. cell5_2.setCellValue(map.get("order_num").toString());
  111. //商品编码
  112. cell5_3.setCellValue(map.get("product_num").toString());
  113. //规格材质
  114. cell5_4.setCellValue(map.get("size_name").toString());
  115. //主人账号
  116. cell5_5.setCellValue(map.get("host_account")==null?"":map.get("host_account").toString());
  117. //柜号
  118. cell5_6.setCellValue(map.get("cabinet_number").toString());
  119. //配置号
  120. cell5_7.setCellValue(map.get("config_num").toString());
  121. //生效日期
  122. cell5_8.setCellValue(map.get("effective_time").toString());
  123.  
  124. HSSFCellStyle style5=workbook.createCellStyle();
  125. style5.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
  126. style5.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
  127. style5.setWrapText( true);//自动换行
  128.  
  129. cell5_2.setCellStyle(style5);
  130. cell5_3.setCellStyle(style5);
  131. cell5_4.setCellStyle(style5);
  132. cell5_5.setCellStyle(style5);
  133. cell5_6.setCellStyle(style5);
  134. cell5_7.setCellStyle(style5);
  135. cell5_8.setCellStyle(style5);
  136.  
  137. }
  138. //row 5 - items List -------------------------end
  139.  
  140. // 第六步,将文件存到指定位置
  141. try
  142. {
  143. String excelName="一物一码.xls";
  144.  
  145. meta.getResponse().addHeader( "Content-Disposition", "attachment;filename="
  146. + new String(excelName.getBytes("gb2312" ), "ISO-8859-1" ));
  147. // response.addHeader("Content-Length", "" + 1024);
  148. meta.getResponse().setContentType("application/vnd.ms-excel;charset=utf-8" );
  149. BufferedOutputStream out = new BufferedOutputStream(meta.getResponse().getOutputStream());
  150. workbook.write(out);
  151. out.close();
  152. }
  153. catch (Exception e )
  154. {
  155. e.printStackTrace();
  156. }
  157. }

poi 导出excel 生成等比例图片的更多相关文章

  1. POI导出EXCEL经典实现

    1.Apache POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能. .NET的开发人员则 ...

  2. Java POI 导出EXCEL经典实现 Java导出Excel

    转自http://blog.csdn.net/evangel_z/article/details/7332535 在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者 ...

  3. java中使用poi导出excel表格数据并且可以手动修改导出路径

    在我们开发项目中,很多时候会提出这样的需求:将前端的某某数据以excel表格导出,今天就给大家写一个简单的模板. 这里我们选择使用poi导出excel: 第一步:导入需要的jar包到 lib 文件夹下

  4. 重构:以Java POI 导出EXCEL为例

    重构 开头先抛出几个问题吧,这几个问题也是<重构:改善既有代码的设计>这本书第2章的问题. 什么是重构? 为什么要重构? 什么时候要重构? 接下来就从这几个问题出发,通过这几个问题来系统的 ...

  5. 重构:以Java POI 导出EXCEL为例2

    前言 上一篇博文已经将一些对象抽象成成员变量以及将一些代码块提炼成函数.这一节将会继续重构原有的代码,将一些函数抽象成类,增加成员变量,将传入的参数合成类等等. 上一篇博文地址:http://www. ...

  6. 关于poi导出excel三种方式HSSFWorkbook,SXSSFWorkbook,csv的总结

    poi导出excel最常用的是第一种方式HSSFWorkbook,不过这种方式数据量大的话会产生内存溢出问题,SXSSFWorkbook是一种大数据量导出格式,csv是另一种excel导出的一种轻快的 ...

  7. 关于poi导出excel方式HSSFWorkbook(xls).XSSFWorkbook(xlsx).SXSSFWorkbook.csv的总结

    1.HSSFWorkbook(xls) import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermo ...

  8. POI导出EXCEL经典实现(转)

    http://www.cnblogs.com/xwdreamer/archive/2011/07/20/2296975.html 1.Apache POI简介 Apache POI是Apache软件基 ...

  9. 使用POI导出excel基础篇

    最近搞了下POI导出Excel,听说很多次,却是第一次搞. 在pom.xml中引入依赖 <dependency> <groupId>org.apache.poi</gro ...

随机推荐

  1. NERO8.0刻录系统光盘

    正常启动NREO,点击NERO 8.0左下角图标(启动NERO应用程序和工具),选NERO Express Essentials,在左边的几个选项中选择“映像.项目.复制”,右边选“光盘映像或保存的项 ...

  2. mongodb.py

    from chatterbot.storage import StorageAdapter class Query(object): def __init__(self, query={}): sel ...

  3. Error524 源站处理超时 Error 524: A timeout occurred

    https://su.baidu.com/helps/index.html#/4/5a61e4b5b34f697f13234a5b Error524 源站处理超时 更新时间:2018-01-19 20 ...

  4. 【题解】kth异或和/魔改版线性基

    [题解]魔改版线性基 魔改版线性基解决此类问题. 联系线性空间的性质,我们直接可以构造出这样的基: \[ 100000 \\ 010000 \\ 000010 \\ 000001 \] 使得每个基的最 ...

  5. 【windows】如何让一个程序开机自启动

    windows的开机自启动也是将一个程序放在文件夹下即可,将应用程序或者快捷方式放在如下文件夹下,即可实现开机自启动 C:\ProgramData\Microsoft\Windows\Start Me ...

  6. Mongo 分组后排序取时间最大的一整条数据对象

    db.getCollection('product_protocol_new').aggregate([ {$sort:{"end_date":-1}}, {$group:{ _i ...

  7. [IR课程笔记]Query Refinement and Relevance Feedback

    相关反馈的两种类型: “真实”的相关反馈: 1. 系统返回结果 2. 用户提供一些反馈 3. 系统根据这些反馈,返回一些不同的,更好的结果 “假定”的相关反馈 1. 系统得到结果但是并不返回结果 2. ...

  8. Linux下/usr/bin/python被删除的后果

    可能部分的人使用linux都有直接root登陆的习惯,这有很大的便利性,因为很多的命令不需要使用sudo请求root权限.但是使用root权限,所有的命令都会立即被执行,即使这个命令是对系统有害处的. ...

  9. Java基础教程:多线程基础(3)——阻塞队列

    Java基础教程:多线程基础(3)——阻塞队列 快速开始 引入问题 生产者消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一存储空间,生产者向空间里生产数据,而消费者取走数据. 模 ...

  10. html5手机网站需要加的那些meta标签,手机网站自适应

    的html5相关meta和标签    a.<!-- 强制让文档与设备的宽度保持1:1 -->    <meta name="viewport" content=& ...