5、进阶之Jxls2的加载图片

本文档详细介绍了如何在使用Jxls2的过程中加载和展示图片,包括单个图片引用和数据循环时的图片显示。通过Java代码示例展示了数据结构和模板设计,并提供了运行示例及可能出现的问题,如图片单元格边框丢失的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://www.chendd.cn/information/viewInformation/other/228.a

本章节将在导出逻辑中演示加载并显示图片的场景,分为单个图片的引用和数据循环时的图片显示。本示例涉及jxls2的jx:image表达式函数,需要自行另外掌握,另外该表达式函数中的图片类型imageType参数支持的范围可参见org.jxls.common.ImageType枚举类。单个图片的引用随便找了一个eclipse的旧版本图片,但是你得相信以我的示例是完全可以让你得图片出现在这里的;循环的图片也同样是随便找的eclipse中的工具图片。

Java代码参考为:

package cn.chendd.examples;
 
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import org.jxls.common.Context;
import org.jxls.util.JxlsHelper;
 
/**
 * 简单引用图片的示例
 * 感觉设置的格式没啥用
 * @author chendd
 */
public class SimpleImageJxls {
 
   public static void main(String[] args) throws Exception {
      //构造图片数据
      byte imageBytes[] = getImageBytes("/cn/chendd/examples/images/splash.jpg");
      //载入模板
      InputStream is = SimpleImageJxls.class.getClass().getResourceAsStream("/cn/chendd/examples/templates/simpleImage.xls");
      Context context = new Context();
      context.putVar("image", imageBytes);//单一图片
      byte prop3Bytes[] = getImageBytes("/cn/chendd/examples/images/wn_nav.png");
      byte prop4Bytes[] = getImageBytes("/cn/chendd/examples/images/wr_nav.png");
      //构造列表数据,包括两个图片
      List<Map<String , Object>> dataList = new ArrayList<Map<String , Object>>();
      Map<String , Object> m1 = new HashMap<String , Object>();
      m1.put("prop1" , "p1-1");m1.put("prop2" , "p1-2");
      m1.put("prop3" , prop3Bytes);m1.put("prop4" , prop4Bytes);
      dataList.add(m1);
      Map<String , Object> m2 = new HashMap<String , Object>();
      m2.put("prop1" , "p2-1");m2.put("prop2" , "p2-2");
      m2.put("prop3" , prop3Bytes);m2.put("prop4" , prop4Bytes);
      dataList.add(m2);
      Map<String , Object> m3 = new HashMap<String , Object>();
      m3.put("prop1" , "p3-1");m3.put("prop2" , "p3-2");
      m3.put("prop3" , prop3Bytes);m3.put("prop4" , prop4Bytes);
      dataList.add(m3);
      context.putVar("dataList", dataList);
      OutputStream os = new FileOutputStream(new File("d:\\test\\out_simpleImage.xls"));
      //指定Sheet文件解析
      JxlsHelper.getInstance().processTemplate(is, os, context);
      os.flush();
      os.close();
      is.close();
   }
 
   //获取图片的字节码,临时使用
   private static byte[] getImageBytes(String imagePath) throws IOException {
      byte imageBytes[] = null;
      InputStream is = SimpleImageJxls.class.getClass().getResourceAsStream(imagePath);
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      byte bytes[] = new byte[1024];
      int lens = -1;
      try {
         while ((lens = is.read(bytes)) != -1) {
            baos.write(bytes, 0, lens);
         }
         imageBytes = baos.toByteArray();
      } catch (IOException e) {
         throw new IOException(e);
      } finally {
         baos.flush();
         baos.close();
         is.close();
      }
      return imageBytes;
   }
 
}

代码说明

上述代码中我们可以看出由后台设置了 “dataList”的集合列表数据结构,其中每一条数据都是以键值对对应的字段信息,prop1、prop2二为文本字段,prop3和prop4为二进制的图片参数。

模板参考为:

blob.png

blob.png

模板说明

上述2个模板中有2组示例,分别是显示一个图片和循环显示一组数据的图片。

运行示例为:

blob.png

blob.png

运行说明

示例中分为2种情况的导入图片,第二个示例中由于模板中设置了循环表格的边框,实际结果在显示时发现少了边框了,经过一点点时间的探索发现并不好使,我想如果要想解决这个图片单元格边框的问题还是得用Poi进行二次处理。

相关下载

icon_txt.gifout_simpleImage.xls

本示例代码会在后文中提供。

转载于:https://my.oschina.net/haiyangyiba/blog/2246028

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值