使用承诺将多个 svg 字符串流式传输到 nodejs 中的 png
Streaming multiple svg strings to png in nodejs using promises
我正在尝试将多个 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"
列出所有使用的模块是值得的。假设你使用了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);
});
我正在尝试将多个 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"
列出所有使用的模块是值得的。假设你使用了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);
});