JsPDF-在小屏幕上剪切图像

时间:2019-02-06 10:45:34

标签: reactjs d3.js jspdf

我有一个程序代码,用于获取3 svg(y1轴,底部x1轴的图形,y2轴的图形),并用它创建一个pdf。 在创建svg之前,在创建pdf的代码中

var source = d3.select("body")
    .append("svg")
    .attr("height", this.node.clientHeight + this.node.clientHeight/10)
    .attr("width", this.node.clientWidth + 65*2 + this.node.clientWidth/20)
    .attr('version', 1.1)
    .attr('xmlns', 'http://www.w3.org/2000/svg')
    .html(d3.select(".svgaxisy").node().innerHTML+"<g transform='translate(65,10)'>"+d3.select(this.node).node().innerHTML+"</g>"+
        "<g transform='translate("+(this.node.clientWidth + ((this.node.clientWidth/this.nested_data.length)/20) + 65)+",0)'>"+d3.select(".svgaxisy2").node().innerHTML+"</g>");

在为jsPDF设置width和height的值之后,我将源代码放入SaveSvgAsPng npm模块中,以给我提供图像链接。我将该图片放在JsPDF中,将其转换为pdf。
(我已经通过saveSvgAsPng测试过,可以下载png,并且可以按预期工作)

saveSvgAsPng.svgAsPngUri(source.node(), {}, function(uri) {
    const pdf = new jsPDF("landscape", 'px', [more_height, more_width]);
    pdf.addImage(uri, 'PNG', 0, 0);
    pdf.save("graph.pdf");
    d3.select(source.node()).remove();
}.bind(this));

这样可以正常工作,在我的大屏幕上,它可以显示完整的图形,但在屏幕很小的笔记本电脑上,它只能显示一半的图形。

1 个答案:

答案 0 :(得分:2)

因此,对于该解决方案,我决定将npm模块ALTER DEFAULT PRIVILEGES FOR ROLE table_creating_user in SCHEMA public GRANT SELECT ON TABLES TO read-only; 与该代码一起使用:

save-svg-as-png