JXLS 2.4.0系列教程番外篇——导出图片(完结)

Posted 李狐同学的异世界

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JXLS 2.4.0系列教程番外篇——导出图片(完结)相关的知识,希望对你有一定的参考价值。

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

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

jx:image(lastCell="D10" src="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

  srcmodel中传入的字节数组byte[]

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

  行了,执行代码导出吧。

 

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

  官方图片导出简介:

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

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

 


  

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

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

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

以上是关于JXLS 2.4.0系列教程番外篇——导出图片(完结)的主要内容,如果未能解决你的问题,请参考以下文章

JXLS 2.4.0系列教程——循环导出一个链表的数据

JXLS 2.4.0系列教程——拾遗 如何做页面小计

JXLS 2.4.0系列教程——更进一步的应用和bug修复

JXLS 2.4.0系列教程——嵌套循环是怎么做到的

JXLS 2.4.0系列教程——多sheet是怎么做到的

我要写整个中文互联网界最牛逼的JVM系列教程 | 番外篇:教你如何在自己的电脑上去安装一些专门解读字节码文件的工具