咱小鲤鱼不服! 2024-01-22 15:29 采纳率: 0%
浏览 5

canvas截图echarts自定义字体无效

使用axios获取的数据进行渲染,并引入了自定义字体,在页面也预览也没问题。
但是使用html2canvas截图时,图表的字体就变回原样了,除了图表其他地方的字体没问题。
要怎么解决呢?

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2024-01-22 18:22
    关注

    【以下回答由 GPT 生成】

    问题的根本原因是html2canvas无法正确地捕捉和渲染canvas元素中使用的自定义字体。解决这个问题的一种方法是,在使用html2canvas截图之前,将自定义字体转换为base64编码,并直接应用到canvas中的字体样式上。

    以下是一种可能的解决方案:

    1. 将自定义字体文件(例如.woff或.ttf文件)转换为base64编码。可以使用一些在线工具或编程库来完成此任务。例如,可以使用以下JavaScript代码将.woff文件转换为base64编码:
    function convertToBase64(file) {
       return new Promise((resolve, reject) => {
          const reader = new FileReader();
          reader.readAsDataURL(file);
          reader.onload = () => resolve(reader.result);
          reader.onerror = error => reject(error);
       });
    }
    
    const fontFile = './path/to/font.woff'; // 替换为自己的字体文件路径
    convertToBase64(fontFile).then(base64 => {
       console.log(base64); // 输出转换后的base64编码
    });
    
    1. 在Vue组件中引入html2canvas和axios库:
    import html2canvas from 'html2canvas';
    import axios from 'axios';
    
    1. 在方法中使用axios获取数据并渲染图表:
    export default {
       methods: {
          async fetchData() {
             try {
                const response = await axios.get('your_api_endpoint'); // 替换为自己的数据获取接口
                const data = response.data;
    
                // 根据数据渲染图表
                // ...
    
                // 截图
                const chartElement = document.getElementById('your_chart_id'); // 替换为图表DOM元素的ID
                const canvas = await html2canvas(chartElement);
                const image = canvas.toDataURL('image/png');
                console.log(image); // 输出截图的base64编码
             } catch (error) {
                console.log(error);
             }
          }
       }
    }
    
    1. 将转换后的base64编码应用到渲染图表的canvas元素中的字体样式上:
    export default {
       methods: {
          async fetchData() {
             // ...
    
             // 获取转换后的base64字体编码
             const fontBase64 = await convertToBase64(fontFile); // 替换为转换后的字体文件base64编码
    
             // 根据数据渲染图表
             // ...
    
             // 设置图表中的自定义字体
             const chartCanvas = document.getElementById('your_chart_id').querySelector('canvas'); // 替换为渲染图表的canvas元素
             chartCanvas.style.fontFamily = "'Your Custom Font', sans-serif"; // 替换为自定义字体的名称
             chartCanvas.style.fontWeight = 'normal';
             chartCanvas.style.src = `url(${fontBase64}) format('woff')`; // 替换为转换后的字体文件base64编码
    
             // 截图
             // ...
          }
       }
    }
    

    这样,在使用html2canvas进行截图时,图表中的字体就会被正确地渲染成自定义字体了。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 1月22日

悬赏问题

  • ¥15 有偿求苍穹外卖环境配置
  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?
  • ¥15 C#连接不上服务器,