当前位置: 首页 > 面试题库 >

D3js:如何生成独立的SVG文件?(Node.js)

邵骏喆
2023-03-14
问题内容

给定D3js代码 ,例如:

var square= function() {

        var svg = window.d3.select("body")

            .append("svg")

            .attr("width", 100)

            .attr("height", 100);

        svg.append("rect")

            .attr("x", 10)

            .attr("y", 10)

            .attr("width", 80)

            .attr("height", 80)

            .style("fill", "orange");

    }

square();


svg { border: 1px solid grey;} /* just to visualized the svg file's area */


<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>

<body></body>

如何使用我的D3js代码和NodeJS生成正确的独立* .svg文件?


问题答案:

Github存储库
svgcreator.node.js
可以尝试。

D3完全不关心实际生成SVG的原因。仅创建SVG的主要问题是您不能使用Javascript,这当然意味着您不能使用D3。除了基本的禁忌外,没有什么可以阻止您了:)

概念验证: 受其他答案的启发,下面是一些使用jsdom的概念验证代码。

1.安装NodeJS( 1)。

curl http://npmjs.org/install.sh | sh       #this should work (not tested)

2.使用Node Packages Manager(
2
)安装jsdom :

$npm install jsdom

3.将您的D3js代码包装在一些jsdom代码中,粘贴到jsdom.node.js文件中

var jsdom = require('jsdom');

jsdom.env(
  "<html><body></body></html>",
  [ 'http://d3js.org/d3.v3.min.js' ],
  function (err, window) {
    var svg = window.d3.select("body")
        .append("svg")
        .attr("width", 100).attr("height", 100);

    svg.append("rect")
        .attr("x", 10)
        .attr("y", 10)
        .attr("width", 80)
        .attr("height", 80)
        .style("fill", "orange");
// PRINT OUT:
    console.log(window.d3.select("body").html());
//  fs.writeFileSync('out.svg', window.d3.select("body").html()); // or this
  }
);

4.在终端中运行

$node jsdom.node.js > test.svg

stdout输出是SVG,然后将其注入到test.svg文件中。任务完成。

正如Gilly在评论中指出的那样,您可能需要jsdom的版本3才能起作用。



 类似资料:
  • 在Expo的支持下,我们正在React Native中构建一个移动应用程序。过了一段时间,我们决定把世博会分离出来,利用世博会带来的其他本土利益。它同时支持和两种平台 我能够成功地将我们的应用程序与expo分离,使用这里提到的说明。我们有和文件夹,一切都很好。 现在,我们要从应用程序生成一个独立的签名APK。我指的是这些步骤。它确实产生了APK,但不知何故,它不工作后,安装在设备上。安装后,如果我

  • 我正在使用代码::块进行编程。我设置了一些断点,但是当我运行程序时,Code::Blocks似乎忽略了它们。 我在下检查并看到不可用(开始/继续): 程序编译运行正常,只是忽略断点。有人知道如何解决这个问题吗? 注意:我在这里检查了一下,我认为建议的答案与我无关,因为在中,我在下只有“C:\MinGW”。 编辑: 我正在使用Windows 8(64位),代码::块12.11

  • 问题内容: 我正在使用d3.js可视化一些数据。我希望能够采用它生成的SVG代码并将其存储为图像文件(用于在Inkscape / Illustrator中进行编辑)。 我试过简单地复制svg标签的内容,即 放入名为image.svg的文件中,但这会漏掉两个单独的CSS文件中的颜色/样式信息。 有没有简单的方法可以做到这一点? 问题答案: 我认为SVG Crowbar可能是解决此问题的最佳方法。

  • 我正在为初级操作系统Luna上的Scratch文本编辑器应用程序编写一个扩展。但是对于扩展的创建,文档实际上是不存在的,我不知道在编写了扩展的主要代码之后如何继续。 我已经写了扩展名。我还不能使用或测试它,因为它需要“安装”。我花了几个小时寻找文档,但它们不存在。然而,我在scratchlaunchpad页面上找到了一条评论 通常,您必须生成一个pluginname.so文件,并将其与plugin

  • 我有一个web应用程序(tomcat 8.5.4,java 1.7.0_72)以前使用Apache POI生成有效的xlsx excel文件。我正在将应用程序转换为使用maven管理jar依赖项,现在生成的文件被Excel视为已损坏(或无效)。我根本没有更改生成文件的代码,所包含的JAR大部分都是相同的,只是一些版本更改和删除了一些未使用且不在maven依赖树中的JAR(下面列出的删除的JAR)。

  • 我正在使用Eclipse,在那里,我Java名为“测试”的项目,它也包含文本文件。这个项目中的类应该能够使用BufferedReader读取其中一个文件。这是我目前的代码: 我的文件始终在项目中,但当我将项目移动到另一个路径时,文件路径也会更改,因此我必须使用新路径调整代码。我不想那样,因为这是不切实际的,那我该怎么办呢?如何获得项目的路径?