javascript - canvg 不能将类作为函数调用
问题描述
对于我正在处理的项目,我需要将 svg 转换为 png 文件。为此,我在网上找到了多个指南和解释。可在此处找到其中之一:将D3 图表导出为 PDF
为了将 svg 转换为 png,他们使用以下代码:
let canvas = document.createElement('canvas');
canvg(canvas, svg);
let imgData = canvas.toDataURL('image/png');
但是当我尝试在自己的项目中实现它时,我不断收到错误:"TypeError: Cannot call a class as a function"
. 我在网上找到了多种使用该canvg(canvas, svg);
符号的解释。我还阅读了Canvg 的Github 文档表格,并没有发现任何关于这种类型的表示法或替代方法的信息。
我将包导入我的项目的方式如下:
import canvg from "canvg";
这是我用来将 d3 svg 图表转换为 pdf 的完整代码:
exportToPDF() {
let svg = document.getElementsByClassName("svg")[0].innerHTML;
var canvas = document.createElement("canvas");
canvg(canvas, svg);
let imgData = canvas.toDataURL("image/png");
var doc = new jsPDF("l", "pt", [1020, 768]);
doc.addImage(imgData, "PNG", 0, 0, 1020, 768);
doc.save("svg-png-chart.pdf");
}
解决方案
错误很明显,您正在调用canvg
没有new
关键字的类。
另外,您参考了GitHub 文档,其中清楚地写了如何使用它:
window.onload = () => {
const canvas = document.querySelector('canvas');
const ctx = canvas.getContext('2d');
// ==== HERE YOUR FUNCTION ===
v = canvg.Canvg.fromString(ctx, '<svg width="600" height="600"><text x="50" y="50">Hello World!</text></svg>');
// Start SVG rendering with animations and mouse handling.
v.start();
};
您阅读的将D3 图表导出为 PDF的文章可能指的是较旧的 APICanvg
这应该这样做:
exportToPDF() {
let svg = document.getElementsByClassName("svg")[0].innerHTML;
let canvas = document.createElement("canvas");
let context = canvas.getContext('2d')
let v = canvg.Canvg.fromString(context, svg);
v.start();
let imgData = canvas.toDataURL("image/png");
var doc = new jsPDF("l", "pt", [1020, 768]);
doc.addImage(imgData, "PNG", 0, 0, 1020, 768);
doc.save("svg-png-chart.pdf");
}
推荐阅读
- java - concurrentHashMap 有一个 volatile 表,为什么 get() 时需要 unsafe.getObjectVolatile()
- firebase - 检查firebase文档中的特定字段并在找到字段时返回文档ID?
- spring-boot - 如何从不属于 pojo 的 html 传递字段?
- ios - 表单内 Swift 中的选择器控件有什么问题?
- node.js - 如何从云存储node.js客户端中的url上传文件
- android - 以下依赖不满足要求的版本:project ':flutter_launch' -> org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.71
- c# - 如何使用 Kendo 网格在控制器中显示验证错误消息?
- django - Heroku上的Django i18n问题
- python - 从熊猫数据框中的json数组中提取数据
- javascript - 在反应中确保折叠到小屏幕上的卡片之间的空间