突然想起来有同学说过能不能导出图片,本来我是想说不懂的,后来我上官网查了查,还挺容易。我就简短的写一写怎么导出图片。

  官方提供了导出图片标签:

jx:image(lastCell="D10" src="data:image" imageType="PNG")

  这是在java中的代码调用:

InputStream imageInputStream = ImageDemo.class.getResourceAsStream("business.png");
byte[] imageBytes = Util.toByteArray(imageInputStream);
context.putVar("image", imageBytes);

  我把他写进以前的源码中,给同学们看看怎么导出图片。

  还记得以前写过一个person类吗?

public class Person {
String id;
String name;
Integer age;
byte[] img;
/** 省略构造器和get/set方法 */
}

  我们加入一个新的属性byte[] ,byte数组img。

  然后我们看看main方法怎么写。

public static void main(String[] args) throws Exception {
// 模板位置,输出流
String templatePath = "E:/template3.xls";
OutputStream os = new FileOutputStream("E:/out4.xls");
// 文件流,输入一张叫fly的png图片
InputStream imageInputStream = new FileInputStream("E:/fly.png");
     // 使用工具方法把流转成byte数组
byte[] imageBytes = Util.toByteArray(imageInputStream); // 一个装有对象数据的链表
List<Person> persons = new ArrayList<Person>();
Person p1 = new Person("001", "张三", 18);
Person p2 = new Person("002", "李四", 19);
Person p3 = new Person("003", "王五", 20);
     // 把图片转换的字节数组存进person对象中
p1.setImg(imageBytes);
p2.setImg(imageBytes);
p3.setImg(imageBytes);
persons.add(p1);
persons.add(p2);
persons.add(p3); Map<String, Object> model = new HashMap<String, Object>();
model.put("person", persons); // 把链表放进model中
JxlsUtils.exportExcel(templatePath, os, model);
os.close();
System.out.println("完成");
}

  代码中有个流转字节数组的工具类Util.toByteArray,这个工具类文章后我会提供下载链接。

  下面看下导出模板:

  老生常谈的就不说了,说下画红框框的:

jx:image(lastCell="D4" src="p.img" imageType="PNG")

  这是一个用来导出图片的标签,依照官方说明imageType图片类型默认是PNG,支持:PNG, JPEG, EMF, WMF, PICT, DIB。

  src是model中传入的字节数组byte[]。

  lastCell是图片结束位置,会自动拉伸填充完你定义的格子。比如你在A1中加入了这个注解,lastCell写C6,就会把A1到C6都拉伸填充完。

  行了,执行代码导出吧。

  这里是把字节数组放在遍历对象里的遍历出来的,你要是不想遍历,而是只想显示一张图片,你看了这么多篇我写的文章,应该不用我说该怎么做吧?就是直接把字节数组放进model中,在excel中取出就行了。

  官方图片导出简介:

  http://jxls.sourceforge.net/reference/image_command.html#

  下载工具类依赖的jar包:commons-codec-1.10.rar


  

  我原本的计划是写上五篇JXLS2.4的基础教程的,现在倒是写了六篇,花了两天的时间。目前看来算是写完了。未来会不会有更新机会要看我能把这个工具用到什么程度了。这个工具还有很多的功能,我估计都不大可能用得上了!哈哈哈。先这样吧,写了两天,剩下的国庆时间让我好好的过个国庆!

  有什么意见请在文章后留言,如果你要问我某某某怎么实现,你就先翻翻我有没有写过,如果我没有写过,估计我也不懂。

  我也不知道有没有代码复制下来执行不了的。这么几行代码都有报错,随缘吧!

JXLS 2.4.0系列教程(六)番外篇——导出图片(完结)的更多相关文章

  1. JXLS 2.4.0系列教程(二)——循环导出一个链表的数据

    请务必先看上一篇文章,本文在上一篇文章的代码基础上修改而成. JXLS 2.4.0系列教程(一)--最简单的模板导出 上一篇文章我们介绍了JXLS和模板导出最简单的应用,现在我们要更进一步,介绍在模板 ...

  2. 黄聪:Microsoft Enterprise Library 5.0 系列教程(六) Security Application Block

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(六) Security Application Block 开发人员经常编写需要安全功能的应用程序.这些应用程序 ...

  3. JXLS 2.4.0系列教程(一)——最简单的模板导出

    Java中实现excel根据模板导出数据的方法有很多,一般简单的可以通过操作POI进行.还可以使用一些工具很轻松的实现模板导出.这些工具现在还在维护,而且做得比较好的国内的有easyPOI,国外的就是 ...

  4. JXLS 2.4.0系列教程(五)——更进一步的应用和页面边距bug修复

    注:本文代码建立于前面写的代码.不过不看也不要紧. 前面的文章把JXLS 2.4.0 的基本使用写了一遍,现在讲讲一些更进一步的使用方法.我只写一些我用到过的方法,更多的高级使用方法请参考官网. ht ...

  5. JXLS 2.4.0系列教程(四)——多sheet是怎么做到的

    注:本文代码在第一篇文章基础上修改而成,请务必先阅读第一篇文章. http://www.cnblogs.com/foxlee1024/p/7616987.html 本文也不会过多的讲解模板中遍历表达式 ...

  6. JXLS 2.4.0系列教程(四)——拾遗 如何做页面小计

    注:阅读本文前,请先阅读第四篇文章. http://www.cnblogs.com/foxlee1024/p/7619845.html 前面写了第四篇教程,发现有些东西忘了讲了,这里补回来. 忘了讲两 ...

  7. JXLS 2.4.0系列教程(三)——嵌套循环是怎么做到的

    注:本文代码在第一篇文章基础上修改而成,请务必先阅读第一篇文章. http://www.cnblogs.com/foxlee1024/p/7616987.html 本文也不会过多的讲解模板中遍历表达式 ...

  8. 【Python3.6+Django2.0+Xadmin2.0系列教程之三(入门篇-下)】学生信息管理系统

    上一篇我们已经初步的构建起了一个学生管理系统的模型,现在接着来继续完善它吧. 1.上传图片/文件等资源 有时候需要添加一些附件,例如,新生刚入学,大家相互之间还不熟悉,希望能通过照片来加深印象,并且方 ...

  9. Enterprise Library 5.0 系列教程

    1. Microsoft Enterprise Library 5.0 系列教程(一) Caching Application Block (初级) 2. Microsoft Enterprise L ...

随机推荐

  1. ProjectA: 多元非线性回归

    https://www.youtube.com/watch?v=n9XycstdPYs&t=907s

  2. 2017双11海量数据下EagleEye的使命和挑战

    摘要: EagleEye作为阿里集团老牌的链路跟踪系统,其自身业务虽不在交易链路上,但却监控着全集团的链路状态,特别是在中间件的远程调用上,覆盖了集团绝大部分的场景,在问题排查和定位上发挥着巨大的作用 ...

  3. redis centos启动

    转到redis目录 ./redis-server /usr/java/redis/redis.conf

  4. Debian安装fail2ban来防止扫描

    vps的root密码不要设置的太简单,这样很容易被攻破,你可以安装如下软件来降低vps被攻破的机会. 输入如下命令: apt-get install fail2ban 提示如下表示安装完成: root ...

  5. swiper轮播问题之二:默认显示3张图片,中间显示全部两边显示部分

    其二:项目遇到比较有点要求的轮播图,默认显示3张图片,中间显示全部,两边显示部分.如图: 网上找了也没有找到合适的,最后经过自己摸索写了出来,贴出代码分享给大家.         CSS .swipe ...

  6. Android OpenGL ES 入门系列(一) --- 了解OpenGL ES的前世今生

    转载请注明出处 本文出自Hansion的博客 OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三维图形 API 的子集,针对手机.PDA和游戏主机等嵌 ...

  7. Spring中配置数据源的四种方式

    1.spring自带的数据源 <bean id="dataSource" class="org.springframework.jdbc.datasource.Dr ...

  8. 一个简单JDK动态代理的实例

    动态代理的步骤: 创建一个实现了InvocationHandler接口的类,必须重写接口里的invoke()方法. 创建被代理的类和接口 通过Proxy的静态方法 newProxyInsatance( ...

  9. 【Java框架型项目从入门到装逼】第六节 - 用ajax请求后台数据

    这一节我们来说一下如何用ajax提交请求? 我们先不讲ajax的原理,还是先以实战为主,看一下这个东西到底怎么用的? form表单: <!-- 采用post表单提交 --> <for ...

  10. iOS自带API集成二维码、条形码扫描

    源码于 :https://github.com/wangjinfeng/ScanForiOSAPI/tree/main 1.AVFoundation.framework,QuartzCore.fram ...