【问题标题】:Streaming multiple svg strings to png in nodejs using promises使用 Promise 在 nodejs 中将多个 svg 字符串流式传输到 png
【发布时间】:2018-06-12 13:51:39
【问题描述】:

我正在尝试将多个 svg 字符串转换为 png,以便我可以使用 nodejs 中的 PdfMake 将它们呈现为 pdf。这适用于一个 svg,但是当我添加多个 svg 字符串时,它们会被最后一个覆盖。使用此示例代码,它会渲染两个 png2 (svg2) 的图像。

const promises = [svg1,svg2].map(str => {
    const stream = new Readable();
    stream.push(str);
    stream.push(null);
    return svgPromise(stream);
});

const result = await Promise.all(promises);

const png1 = result[0].content;
const png2 = result[1].content;

function svgPromise(stream) {
    return new Promise((resolve, reject) => {
    const svg = new Rsvg();
    stream.pipe(svg);
    svg.on("finish", function() {
      const buffer = svg.render({
          format: "png",
          width: width * 2,
          height: height * 2
      }).data;
      const png = datauri.format(".png", buffer);
      resolve(png);
    });
  });
}

不确定此错误是否与流或我的承诺逻辑有关。有什么想法吗?

依赖关系:

"librsvg": "0.7.0" “pdfmake”:“0.1.35” “datauri”:“1.0.5”

【问题讨论】:

标签: node.js svg promise stream pdfmake


【解决方案1】:

列出所有使用的模块是值得的。假设您使用datauri,您似乎需要为每次调用初始化一个新实例:

      svg.on("finish", function() {
          const datauri = new Datauri();
          const buffer = svg.render({
              format: "png",
              width: 16,
              height: 16
          }).data;
          const png = datauri.format(".png", buffer);
          resolve(png);
      });

【讨论】:

  • 谢谢!每次都创建一个新的 datauri 实例来修复它。抱歉,我用使用的依赖项编辑了我的答案。
猜你喜欢
  • 2020-10-02
  • 2019-03-20
  • 1970-01-01
  • 1970-01-01
  • 2021-07-16
  • 2020-10-10
  • 1970-01-01
  • 2015-05-22
  • 2014-10-26
相关资源
最近更新 更多