我在使用jspdf将svg元素渲染为pdf时遇到问题。我使用插件https://github.com/CBiX/svgToPdf.js/来执行此操作。
以下是我的代码
// I recommend to keep the svg visible as a preview
var tmp = document.getElementById("chartContainer");
var svgDoc = tmp.getElementsByTagName("svg")[0];
var pdf = new jsPDF('p', 'pt', 'a4');
svgElementToPdf(svgDoc, pdf, {
scale: 72 / 96, // this is the ratio of px to pt units
removeInvalid: false // this removes elements that could not be translated to pdf from the source svg
});
pdf.output('datauri'); // use output() to get the jsPDF buffer
正在制作空白pdf。请帮忙
答案 0 :(得分:13)
您可以使用 canvg 。
来实现步骤1:从DOM获取“SVG”标记代码
var svg = document.getElementById('svg-container').innerHTML;
if (svg)
svg = svg.replace(/\r?\n|\r/g, '').trim();
第2步: 使用 canvg 从svg创建画布。
var canvas = document.createElement('canvas');
canvg(canvas, svg);
第3步:
使用.toDataURL()
var imgData = canvas.toDataURL('image/png');
// Generate PDF
var doc = new jsPDF('p', 'pt', 'a4');
doc.addImage(imgData, 'PNG', 40, 40, 75, 75);
doc.save('test.pdf');
在此处查看演示http://jsfiddle.net/Purushoth/hvs91vpq/193/
Canvg Repo:https://github.com/gabelerner/canvg
答案 1 :(得分:1)
我认为当前的 jspdf 版本 (2.3.1) 有一个 addSvgAsImage method,但它将 svg 作为字符串。我想您可以使用 ajax 调用来检索 SVG 内容,但我的代码中只有 SVG 并以这种方式传递它。
答案 2 :(得分:0)
我在内部使用svg2pdf.js尝试了addSvgAsImage和canvg。 两者对我来说都行不通,在pdf中生成的图像位置或显示不正确。
我结束了下面的工作,效果很好: