You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js用D3 6.5.0绘制饼图报错d3.entries is not a function 及SVG转PDF方案咨询

问题1:d3.entries is not a function报错解决

原因:d3从v5版本开始就移除了d3.entries方法,你使用的6.5.0版本已经不存在这个API,该功能已经被原生JS的Object.entries替代。
原来的d3.entries(data)会返回结构为[{key: 'MacOS', value: 29}, ...]的数组,而原生Object.entries(data)返回的是[['MacOS', 29], ...]的二元数组,你只需要对报错行代码做如下修改即可:
把

var data_ready = pie(d3.entries(data));

替换为:

var data_ready = pie(Object.entries(data).map(([key, value]) => ({key, value})));

修改后即可正常生成饼图数据。

问题2:Node.js中生成SVG并插入PDF的方案

你当前依赖中已经安装了pdfkit和d3-node,可以直接用以下两种方案实现:

方案1:基于现有代码改造

你当前代码已经可以输出SVG字符串,直接将生成的SVG字符串传入pdfkit即可插入PDF,示例代码如下:

const PDFDocument = require('pdfkit');
const fs = require('fs');

// 原有生成svg的代码不变,拿到svg字符串
const svgStr = body.html();

// 生成PDF
const doc = new PDFDocument();
doc.pipe(fs.createWriteStream('output.pdf'));
// 插入SVG,可自定义x、y坐标和宽高
doc.svg(svgStr, {
  x: 50,
  y: 50,
  width: 400,
  height: 400
});
doc.end();

方案2:使用d3-node简化流程

d3-node已经封装了Node.js环境下的DOM模拟,不需要自己手动初始化JSDOM,生成SVG的流程更简洁,适合服务端生成图表的场景。


内容的提问来源于stack exchange,提问作者Subham Subhasis Patra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 03:54:00