千家信息网

怎么通过java实现highcharts导出图片至excel

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要为大家展示了"怎么通过java实现highcharts导出图片至excel",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"怎么通过java实现h
千家信息网最后更新 2026年11月01日怎么通过java实现highcharts导出图片至excel

这篇文章主要为大家展示了"怎么通过java实现highcharts导出图片至excel",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"怎么通过java实现highcharts导出图片至excel"这篇文章吧。

1. 目的

通过java后台实现将前端页面的highcharts图表导出至生成的excel文件中。使用于报表页面导出类功能。

2. 说明

前端页面将图表的svg信息字符串作为参数传递后台使用batik工具包生成图片使用poi工具包操作excel

3. 使用jar包

1.batik-all-1.7.jar

2.poi-3.12.jar

3.commons-codec-1.12.jar

不导入不会报错,但使用时异常,提示信息:Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/codec/digest/DigestUtils at org.apache.poi.hssf.usermodel.HSSFWorkbook.addPicture(HSSFWorkbook.java:1575)

4. 实现

第一部分实现svg生成图片到磁盘;第二部分实现将磁盘上的图片读取到创建的excel;第三部分直接将svg信息读取并输出到excel,是上面二者的合并,省略了存至磁盘的过程。

4.1 将svg导出图片

代码:

import org.apache.batik.transcoder.TranscoderException;import org.apache.batik.transcoder.TranscoderInput;import org.apache.batik.transcoder.TranscoderOutput;import org.apache.batik.transcoder.image.PNGTranscoder;import java.io.*;/***@Description: 将svg转换为png格式的图片*/public class SvgPngConverter {/***@Description: 将svg字符串转换为png*@Author:*@param svgCode svg代码*@param pngFilePath 保存的路径*@throws IOException io异常*@throws TranscoderException svg代码异常*/public static void convertToPng(String svgCode,String pngFilePath) throws IOException,TranscoderException {File file = new File (pngFilePath);FileOutputStream outputStream = null;try {file.createNewFile ();outputStream = new FileOutputStream (file);convertToPng (svgCode, outputStream);} finally {if (outputStream != null) {try {outputStream.close ();} catch (IOException e) {e.printStackTrace ();}}}}/***@Description: 将svgCode转换成png文件,直接输出到流中*@param svgCode svg代码*@param outputStream 输出流*@throws TranscoderException 异常*@throws IOException io异常*/public static void convertToPng(String svgCode,OutputStream outputStream) throws TranscoderException,IOException{try {byte[] bytes = svgCode.getBytes ("UTF-8");PNGTranscoder t = new PNGTranscoder ();ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);TranscoderInput input = new TranscoderInput (byteArrayInputStream);TranscoderOutput output = new TranscoderOutput (outputStream);t.transcode (input, output);outputStream.flush ();} finally {if (outputStream != null) {try {outputStream.close ();} catch (IOException e) {e.printStackTrace ();}}}}public static void main(String[] args) {StringBuilder svgStr = ""; // 图表的svg字符串,一般较长,此处省略String path = "H:\\svg1.png";try {convertToPng(svgStr, path);} catch (IOException e) {e.printStackTrace();} catch (TranscoderException e) {e.printStackTrace();}}}

效果:

图片内容:

4.2 读取图片输出至excel

代码:

import org.apache.poi.hssf.usermodel.HSSFClientAnchor;import org.apache.poi.hssf.usermodel.HSSFPatriarch;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;/***@Description: 读取磁盘中图片到excel*/public class ExcelImageTest {public static void main(String[] args) {FileOutputStream fileOut = null;BufferedImage bufferImg = null;//先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArraytry {ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();bufferImg = ImageIO.read(new File("H:/svg1.png"));ImageIO.write(bufferImg, "png", byteArrayOut);HSSFWorkbook wb = new HSSFWorkbook();HSSFSheet sheet1 = wb.createSheet("test picture");//画图的顶级管理器,一个sheet只能获取一个(一定要注意这点)HSSFPatriarch patriarch = sheet1.createDrawingPatriarch();//anchor主要用于设置图片的属性HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 255, 255,(short) 1, 1, (short) 7, 10);anchor.setAnchorType(3);//插入图片patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));fileOut = new FileOutputStream("H:/测试Excel.xls");// 写入excel文件wb.write(fileOut);System.out.println("----Excle文件已生成------");} catch (Exception e) {e.printStackTrace();}finally{if(fileOut != null){try {fileOut.close();} catch (IOException e) {e.printStackTrace();}}}}}

说明:

方法中HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 255, 255,(short) 1, 1, (short) 7, 10)表示要将图片插入至excel时的位置。

方法为:public HSSFClientAnchor(int dx1, int dy1, int dx2, int dy2, short col1, int row1, short col2, int row2) {},

参数如下:

int row 1:图片左上角所在单元格行数(值为1,即2行);short col1:图片左上角所在单元格列数(值为1,即B列);int row2:图片右下角所在单元格行数(值为10,即11行);short col2:图片右下角所在单元格列数(值为7,即H列);int dx1:图片左上角距(B,2)单元格左上角行向距离;int dy1:图片左上角距(B,2)单元格左上角列向距离;int dx2:图片右下角距(H,11)单元格左上角的行向距离;int dy2:图片右下角距(H,11)单元格左上角的列向距离;

4.3 直接将图表导出至excel

代码:

import org.apache.batik.transcoder.TranscoderInput;import org.apache.batik.transcoder.TranscoderOutput;import org.apache.batik.transcoder.image.PNGTranscoder;import org.apache.poi.hssf.usermodel.HSSFClientAnchor;import org.apache.poi.hssf.usermodel.HSSFPatriarch;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import java.io.*;/***@Description: 直接将svg信息转为图片添加至excel*/public class SvgToExcelPng {public static void main(String[] args) {FileOutputStream fileOut;try {String svgStr = ""; // 图表的svg字符串,一般较长,此处省略byte[] bytes = svgStr.getBytes ("UTF-8");ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();PNGTranscoder t = new PNGTranscoder ();TranscoderInput input = new TranscoderInput (new ByteArrayInputStream(bytes));TranscoderOutput output = new TranscoderOutput (byteArrayOut);t.transcode (input, output);HSSFWorkbook wb = new HSSFWorkbook();HSSFSheet sheet1 = wb.createSheet("test picture");//画图的顶级管理器,一个sheet只能获取一个(一定要注意这点)HSSFPatriarch patriarch = sheet1.createDrawingPatriarch();//anchor主要用于设置图片的属性HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 255, 255,(short) 1, 1, (short) 7, 10);anchor.setAnchorType(3);//插入图片patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));fileOut = new FileOutputStream("H:/测试Excel2.xls");// 写入excel文件wb.write(fileOut);System.out.println("----Excle文件已生成------");} catch (Exception e) {e.printStackTrace();}}}

以上是"怎么通过java实现highcharts导出图片至excel"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

图片 单元 左上角 代码 文件 图表 生成 信息 内容 字符 字符串 所在 磁盘 输出 篇文章 页面 前端 参数 后台 属性 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网高科技 上海喔噻互联网科技有限公司 云之行互联网科技 互联网科技巨头监管 科技企业和互联网企业 易互联网科技有限公司 互联网科技股票 科技互联网公司logo 互联网养老 桔豆科技 江苏南京365互联网科技 济南华为互联网科技产业总部基地 福建科技产业互联网发展 崇明区互联网教育科技售后服务 河南住房之家互联网科技 用友工业互联网科技发展 风投北京互联网科技 北京军民互联网科技公司 数字互联网科技有限公司 青岛互联网科技园 小牛互联网科技有限公司地址 互联网科技公司经营范围 互联网科技社 岳阳华臻互联网科技有限公司 崇明区互联网教育科技诚信经营 江阴互联网智能科技产品进口 速维有品互联网信息科技(苏州)有限公司 本届互联网博览会上的黑科技 富国互联网金融科技混合基金 浙南科技城互联网大厦招聘 互联网高科技绘画
0