微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Vue.js 和 vuetify 如何实现从 Vue 组件创建和下载 PNG 文件?

如何解决Vue.js 和 vuetify 如何实现从 Vue 组件创建和下载 PNG 文件?

假设我有一个像卡片一样的 vue 组件,如下面的链接和下图所示

https://vuetifyjs.com/en/components/cards/#v-card-actions

card

我将如何实现用户可以点击按钮或下载带有这张卡片图片的 .png 文件功能

我当前的实现是使用“dom-to-image-more”库https://github.com/tsayen/dom-to-image

但是使用这个库,我在下载文件时遇到了一些问题,如下图所示

radio buttons

我的单选按钮在我的 PNG 下载中变成了文本。

我目前的实现就像

domTOIMAGE.toPng(document.getElementById('cheese')).then((dataUrl: any) => {
        var theLink = document.createElement('a')
        theLink.download = 'tactic-performance.png'
        theLink.href = dataUrl
        theLink.click()
      }) 

有人可以帮我修复我当前的实现吗,也许我只能将屏幕的一部分下载为 PNG 文件,如果使用“dom-to-image-more”库可能的话?我还有一个菜单,它在我下载期间弹出,我不想在那里。因此,如果我可以下载 90% 的内容,那就太好了

如果我不能使用这个库,那么我愿意接受任何其他建议!非常感谢您的帮助:)

解决方法

我为此使用了 html-to-image 包并且它工作正常。链接在这里 https://www.npmjs.com/package/html-to-image

此外,如果您想快速实现此功能,可以使用此代码

import * as htmlToImage from "html-to-image";
import { saveAs } from "file-saver";

htmlToImage
        .toBlob(document.getElementById("yourCardID"))
        .then(function (blob) {
          saveAs(blob,"screenshot.png");
        });

如果您无法获得结果,请将您的 v-card 放在 div 标签中并将 id 分配给 div 并实现您的结果

注意:这里我使用的是 file-saver 包来保存文件, https://www.npmjs.com/package/file-saver ,如果你不想安装另一个包来保存文件,你也可以使用下面的方法

htmlToImage
        .toBlob(document.getElementById("yourCardID"))
        .then(function (blob) {
          const a = document.createElement("a");
          a.href = URL.createObjectURL(blob);
          a.download = "screenshot.png";
          a.click();
        });

此外,如果您只想保存 blob ,您可以将其保存为您想要的位置

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。