wordExport导出word时关于echarts图表生成图片的解决方案

一、基本介绍

wordExport是一款基于前端处理生成word的处理方式
在对应页面引入FileSaver.js和jquery.wordexport.js
在这里插入图片描述
使用:需生成word的部分.wordExport(文件名,文件样式)
在这里插入图片描述

二、echarts相关

一般我们页面存在echarts图表导出word时通常时将其先生成为一张图片,再将其导出,在图表转变图片的这个过程中,经常会出现导出文档中的echarts图片生成不完整的情况,要么直接是一张破图,要么是一张未加载完成的图片,针对这类问题,我的解决方案如下:
1.在echarts图表的区域下放置一个image标签,默认隐藏在这里插入图片描述

2.echarts图表加载完毕后,
a.echarts自带函数finished触发操作;
b.getDataURL()获取图片路径;
c.将图片路径传入后端,保存在本地服务器,返回一个本地路径;
d.给隐藏的img标签赋予src属性;
在这里插入图片描述
在这里插入图片描述

/**
     * echarts图表保存至本地
     * @param base64Info
     * @param fileType 文件类型(.png)
     * @param request
     * @return
     */
    @RequestMapping("/echartToImg")
    @ResponseBody
    public Result echartToImg(String base64Info, String fileType, HttpServletRequest request){
        //若传入图片路及类型为空,返回错误提示
        if(StringUtils.isBlank(base64Info)&&StringUtils.isBlank(fileType)){
            return Result.error(CodeMsg.NULL_UPLOAD_FILE_ERROR.getMsg());
        }
        try {
            BASE64Decoder decoder = new BASE64Decoder();
            String realPath = request.getSession().getServletContext().getRealPath("/static/image/");
            File dir = new File(realPath);
            if (!dir.isDirectory()) {
                dir.mkdirs();
            }
            String fileName = System.currentTimeMillis()+fileType;
            File saveFile = new File(realPath,fileName);
            String imgUrl = "/static/image/"+fileName;
            FileOutputStream outputStream = new FileOutputStream(saveFile);
            byte[] decoderBytes = decoder.decodeBuffer(base64Info.split(",")[1]);
            outputStream.write(decoderBytes);
            outputStream.close();
            return Result.success(imgUrl);
        } catch (IOException e) {
            return Result.error(CodeMsg.SERVER_ERROR.getMsg());
        }
    }

e.当页面做出导出word的操作时,隐藏所有echarts图表的div,展示所有echarts相关的图片。
在这里插入图片描述
这种处理方式能较为稳定的解决echarts图片显示不全的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值