我在使用Chart.js和节点中的JSDOM时遇到了一些问题。
我不认为它是JSDOM,因为我可以在画布上绘制并且它被渲染得很好。所以我怀疑Chart.js或我对它的使用有问题。
我在github上也有这个https://github.com/jacktuck/node-chartjs当它运行时会自动打开test.png文件,这要感谢opn
正如您所看到的,尽管画布上的toBlob调用返回了一些数据,但看起来没有渲染。
var fs = require('fs')
var jsdom = require('jsdom')
var Canvas = require('canvas-prebuilt')
var pify = require('pify')
var config = require('./config')
var opn = require('opn')
var env = pify(jsdom.env) // promisify env
;(async function (exports) {
var chart = 'https://cdn.jsdelivr.net/npm/chart.js@2.4/dist/Chart.min.js'
var html = `<html>
<body>
<div id='chart-div' style='font-size:12; width:400; height:400;'>
<canvas id='myChart' width=400 height=400></canvas>
</div>
</body>
</html>`
try {
var window = await env(html, [chart], {
features: {
FetchExternalResources: ['script'],
ProcessExternalResources: ['script'],
SkipExternalResources: false
}
})
window.CanvasRenderingContext2D = Canvas.Context2d
config.options.responsive = false
config.animation = false
config.width = 400
config.height = 400
// console.log('canvas', _canvas)
// console.log('ctx', _ctx)
console.log('window.Chart', window.Chart)
const _canvas = window.document.getElementById('myChart')
const _ctx = _canvas.getContext('2d')
// If I just draw a circle it is rendered fine
// _ctx.beginPath()
// _ctx.arc(95,50,40,0,2*Math.PI)
// _ctx.stroke()
new window.Chart(_ctx, config)
_canvas.toBlob(function (blob, err) {
console.log('ERR', err)
var out = fs.createWriteStream(__dirname + '/test.png')
out.write(jsdom.blobToBuffer(blob))
opn('file://' + __dirname + '/test.png')
}, 'image/png')
} catch (e) {
console.log('ERR', e)
}
})(module.exports)
答案 0 :(得分:0)
我不记得我在这里遇到的问题是什么,但我不再拥有它。如果我记得正确的chart.js版本更改解决它。 https://github.com/jacktuck/node-chartjs现在按预期工作。