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

/**
*
* <p>Description: 将一物一码列表导出到excel</p>
* @param response
* @param list
* @throws IOException
*/
public void exportExcel(DispMeta meta) throws IOException { Map<String, Object> params = new HashMap<String, Object>();
params.put("orderNum", meta.getRequest().getParameter("orderNum"));
meta.setParams(params); IDispApi service; meta.setParams(params);
meta.setMapkey("OneThingAndOneYardService.queryProductCodeListExport");
try {
service = find(ModulePbDesc.PB_SALES_02, meta.getMapkey());
service.disp(meta);
} catch (DispException e) {
e.printStackTrace();
}
ArrayList<Map<String,Object>> list = (ArrayList<Map<String, Object>>) meta.getResult(); HSSFWorkbook workbook = new HSSFWorkbook ();// 创建一个Excel文件
HSSFSheet sheet = workbook.createSheet("一物一码");// 创建一个Excel的Sheet
sheet.setColumnWidth(0, 40 * 256);
sheet.setColumnWidth(1, 40 * 256);
sheet.setColumnWidth(2, 40 * 256);
sheet.setColumnWidth(3, 40 * 256);
sheet.setColumnWidth(4, 40 * 256);
sheet.setColumnWidth(5, 40 * 256);
sheet.setColumnWidth(6, 40 * 256);
sheet.setColumnWidth(7, 40 * 256); HSSFRow row4 = sheet.createRow(0);
HSSFCell cell4_1 = row4.createCell(0);
HSSFCell cell4_2 = row4.createCell(1);
HSSFCell cell4_3 = row4.createCell(2);
HSSFCell cell4_4 = row4.createCell(3);
HSSFCell cell4_5 = row4.createCell(4);
HSSFCell cell4_6 = row4.createCell(5);
HSSFCell cell4_7 = row4.createCell(6);
HSSFCell cell4_8 = row4.createCell(7);
cell4_1.setCellValue( "一物一码" );
cell4_2.setCellValue( "订单编号" );
cell4_3.setCellValue( "商品编码" );
cell4_4.setCellValue( "规格材质" );
cell4_5.setCellValue( "主人账号" );
cell4_6.setCellValue( "柜号" );
cell4_7.setCellValue( "配置号" );
cell4_8.setCellValue( "生效日期" ); HSSFCellStyle style4= workbook.createCellStyle();
style4.setAlignment(HSSFCellStyle. ALIGN_CENTER);//水平居中
style4.setVerticalAlignment(HSSFCellStyle. VERTICAL_CENTER);//垂直居中
style4.setWrapText( true);//自动换行
style4.setFillForegroundColor(IndexedColors.SKY_BLUE.getIndex());
style4.setFillPattern(CellStyle.SOLID_FOREGROUND);
HSSFFont font4 = workbook.createFont();
// font.setFontName("华文行楷");//设置字体名称
font4.setFontHeightInPoints(( short)15);//设置字号
// font4.setBoldweight(boldweight)( true);
style4.setFont(font4); // cell4.setCellStyle(style4);
cell4_1.setCellStyle(style4);
cell4_2.setCellStyle(style4);
cell4_3.setCellStyle(style4);
cell4_4.setCellStyle(style4);
cell4_5.setCellStyle(style4);
cell4_6.setCellStyle(style4);
cell4_7.setCellStyle(style4);
cell4_8.setCellStyle(style4);
//row 4 - items List header -------------------------end //row 5 - items List -------------------------start
for (int i = 0; i < list.size(); i++) {
HSSFRow row5 = sheet.createRow( i+1);
HSSFCell cell5_1 = row5.createCell(0);
HSSFCell cell5_2 = row5.createCell(1);
HSSFCell cell5_3 = row5.createCell(2);
HSSFCell cell5_4 = row5.createCell(3);
HSSFCell cell5_5 = row5.createCell(4);
HSSFCell cell5_6 = row5.createCell(5);
HSSFCell cell5_7 = row5.createCell(6);
HSSFCell cell5_8 = row5.createCell(7);
Map<String, Object> map = list.get(i);
// img --start
ByteArrayOutputStream outStream_item = new ByteArrayOutputStream();
// 将图片写入流中
BufferedImage bufferImg_item = ImageIO.read(new FileInputStream("D:"+map.get("img_code").toString()));
ImageIO. write(bufferImg_item, "PNG", outStream_item); row5.setHeightInPoints(80);
int width = bufferImg_item.getWidth();//原始宽度
int height = bufferImg_item.getHeight();//原始高度
// 一个12号字体的宽度为13,前面已设置了列的宽度为30*256,故这里的等比例高度计算如下
height = (int) Math.round((height * (30 * 13) * 1.0 / width));
// excel单元格高度是以点单位,1点=2像素; POI中Height的单位是1/20个点,故设置单元的等比例高度如下
row5.setHeight((short) (height / 2 * 20));
// 利用HSSFPatriarch将图片写入EXCEL
HSSFPatriarch patri_item = sheet.createDrawingPatriarch();
HSSFClientAnchor anchor_item = new HSSFClientAnchor(0, 0, 0, 0, (short ) 0, i+1, (short) 1, i+2);
patri_item.createPicture(anchor_item, workbook.addPicture(outStream_item.toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG));
// img -- end //订单编号
cell5_2.setCellValue(map.get("order_num").toString());
//商品编码
cell5_3.setCellValue(map.get("product_num").toString());
//规格材质
cell5_4.setCellValue(map.get("size_name").toString());
//主人账号
cell5_5.setCellValue(map.get("host_account")==null?"":map.get("host_account").toString());
//柜号
cell5_6.setCellValue(map.get("cabinet_number").toString());
//配置号
cell5_7.setCellValue(map.get("config_num").toString());
//生效日期
cell5_8.setCellValue(map.get("effective_time").toString()); HSSFCellStyle style5=workbook.createCellStyle();
style5.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
style5.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
style5.setWrapText( true);//自动换行 cell5_2.setCellStyle(style5);
cell5_3.setCellStyle(style5);
cell5_4.setCellStyle(style5);
cell5_5.setCellStyle(style5);
cell5_6.setCellStyle(style5);
cell5_7.setCellStyle(style5);
cell5_8.setCellStyle(style5); }
//row 5 - items List -------------------------end // 第六步,将文件存到指定位置
try
{
String excelName="一物一码.xls"; meta.getResponse().addHeader( "Content-Disposition", "attachment;filename="
+ new String(excelName.getBytes("gb2312" ), "ISO-8859-1" ));
// response.addHeader("Content-Length", "" + 1024);
meta.getResponse().setContentType("application/vnd.ms-excel;charset=utf-8" );
BufferedOutputStream out = new BufferedOutputStream(meta.getResponse().getOutputStream());
workbook.write(out);
out.close();
}
catch (Exception e )
{
e.printStackTrace();
}
}

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. mongodb启动不了:提示错误信息为 child process failed, exited with error number 100

    [启动mongo 副本集错误提示]: [原因分析说明]: 查询很多资料得知由于上次使用了暴力关闭系统或者DB,导致数据文件锁住. [解决办法]: 1.  在 mongo.conf 文件添加一下属性值  ...

  2. struts2 环境建立(1)

    说明:以下操作都是以本机例 在java web 开发之前,应该具备开发环境.要搭建开发环境应该具备以下工作: 1 JDK,jdk是java开发不可缺少的开发工具包. 2. 开发工具本例使用Eclips ...

  3. EasyNVR无插件播放HLS/RTMP网页直播方案前端完善:监听表单变动

    在上一篇博客中我们表述完了防止提交成功后多余操作提交的一个过程:其中的精髓在于ajax的触发事件的使用. 而这篇博客主要想说明一下如何实时的判断出表单是否发生变化. 问题表述: 在网页前端的开发过程中 ...

  4. MVC教程--MiniProfiler.EF监控调试MVC和EF的性能

    上一篇谈到mvc中ef输出执行sql日志:来谈用mvc开发项目的调试和性能监控.EF框架自动给我生成sql语句,当我们的程序遇到性能问题的时候我们可以用MiniProfiler.EF来监控调试MVC和 ...

  5. 如何在ubuntun中安装pycharm并将图标显示在桌面上

    安装pycharm首先要安装jdk. 可以通过java -V来查看是否安装了jdk.安装jdk的方法如下: 1 首先在oracle网站下载jdk,现在jdk是1.8的. 2 新建一个/usr/lib/ ...

  6. Linux就该这么学--计划任务服务

    有经验的系统运维工程师能够让系统自动化运行,无需人工的干预就可以让各个服务.命令在指定的时间段运行.停止. 计划任务分为: 一次性计划任务:今晚11:30开启网站服务 长期性计划任务:每周1.3.5的 ...

  7. 【AWS】亚马逊云常用服务解释

    新公司使用的是亚马逊服务,刚开始的时候,对很多名词不太明白,总结了一下如下 1,EC2 这个是亚马逊的一种服务器服务,可以理解为跟vmware差不多,EC2为虚拟机提供载体,EC2上跑虚拟机服务器. ...

  8. [2018-10-10]记录一下Vue的一个问题

    最近用vue typescript SPA 做管理后台(ABP官网导出的vue项目模板),遇到一个错误,找了好久,虽然有相关资料,但发现都没解决,这里自己记录一下. Failed to mount c ...

  9. UVA - 10305 【全排列】

    题意 要求给出一组 包含 1 - N 的数字的序列 要求这个序列 满足 题给的限制条件 比如 1 2 就是 1 一定要在 2 前面 思路 因为 数据规模较小 可以用 全排列 然后判断每个序列 是否满足 ...

  10. bind(),live(),delegate(),on()绑定事件方式

    1.bind():向匹配元素添加一个或多个事件处理器. 适用所有版本,但是自从jquery1.7版本以后bind()函数推荐用on()来代替. $(selector).bind(event,data, ...