echarts 图片导入到 word pdf

需求

现在做的项目是,将网页导出成一个word文件,文字部分直接把字符串传给后端就行了。

在这里插入图片描述
网页上echarts生成的图表不知道怎么传递给后端,后端还要能够把前端传来的图片写入到word文档中。
百度后,知道了需要将echarts图表的base64编码传递给后端。

获取echarts的base64编码

echarts 声明的代码

var chartDom = document.getElementById("main");
var myChart = echarts.init(chartDom);
var option;

获取base64编码只有一行代码:

let chartBase64 = myChart.getDataURL();

在附录查看完整代码

getDataURL()的参数,我使用的是,官网给的参数官方文档 echartsInstance.getDataURL

myChart.getDataURL({
        pixelRatio: 2,
        backgroundColor: "#fff",
      });

若你想先预览获取到的 base64的图片
添加如下代码后,在chrome调试窗口预览

var img = new Image();
img.src = myChart.getDataURL({
  pixelRatio: 2,
  backgroundColor: "#fff",
});

在这里插入图片描述

但我们发现echarts的base64生成的图片内,没有数据。

只需要在 option (关闭动画效果):

生成的图片是在有动画效果出来以前的样子,数据还没渲染上去,因此导出的图片没有数据

animation: false   

至此即可得到有数据的图片
在这里插入图片描述

服务器处理base64编码的图片

前端使用axios将base64编码的图片传递到后端后,由后端代码进行处理
axios POST传递数据,参考这篇文章

python django 将base64编码的图片 保存为png图片的代码

@csrf_exempt
def printPost(request):
    if request.method == "POST":
        data = simplejson.loads(request.body)
        # base64 编码的图片
        if data.get("img"):
            img_data = data.get("img")
            saveImg(img_data)
            # print("图片保存成功")
        return JsonResponse(data)
    else:
        return HttpResponse("只接受post传参", status=406)


def saveImg(ImgBase64):
    import base64
    img_data = base64.b64decode(ImgBase64)
    with open("./test.png", "wb") as f:
        f.write(img_data)
        f.close()

【注意】
base64图片格式如下,需要删去 data:image/png;base64,才能在python中保存为图片

data:image/png;base64,
iVBORw0KGgoAAAANSUhEUgAABLAAAAMgCAYAAAAz4JsCAAAAAXNSR0IArs4c6QAAIABJREFUeF7s3Qd0FWX6x/EnlYSE0EKR3iEGkCbi2kVdOyoK6K4NLIsKQuggiPQaIIQuILqKoIKyC/pHwcayKorCQiItQIAQQggQAoQ0/ucdyOVOCtwkt8yd+c45e3TNzPu+z+e

我是在前端js POST上传数据的部分,通过 slice(22) 就删除了data:image/png;base64,,所以我在后端没有对头部进行处理

upImg() {
      let url = "http://localhost:8080/jango/print/post";
      this.postData(url, {
        img: this.imgData.slice(22),
      });
    },

附录

vue 代码

<template>
  <div>
    <div id="main" style="width: 600px; height: 400px"></div>
  </div>
</template>

<script>
const echarts = require("echarts/lib/echarts");
require("echarts/lib/component/grid");
require("echarts/lib/chart/line");

export default {
  mounted() {
    this.draw();
  },
  methods: {
    draw() {
      var chartDom = document.getElementById("main");
      var myChart = echarts.init(chartDom);
      var option;

      option = {
        animation: false,
        xAxis: {
          type: "category",
          data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
        },
        yAxis: {
          type: "value",
        },
        series: [
          {
            data: [150, 230, 224, 218, 135, 147, 260],
            type: "line",
          },
        ],
      };

      option && myChart.setOption(option);
      let chartBase64 = myChart.getDataURL({
        pixelRatio: 2,
        backgroundColor: "#fff",
      });
      console.log(chartBase64);

      // chrome 窗口预览图片
      /*
      var img = new Image();
      img.src = myChart.getDataURL({
        pixelRatio: 2,
        backgroundColor: "#fff",
      });
      */
    },
  },
};
</script>

<style>
</style>

参考链接

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jieshenai

为了遇见更好的文章

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值