使用jspdf将Svg渲染为Pdf

时间:2014-12-30 14:09:56

标签: svg jspdf

我在使用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。请帮忙

3 个答案:

答案 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尝试了addSvgAsImagecanvg。 两者对我来说都行不通,在pdf中生成的图像位置或显示不正确。

我结束了下面的工作,效果很好:

  1. 不使用任何库即可将SVG转换为PNG,请参见my answer to "Convert SVG to image (JPEG, PNG, etc.) in the browser"
  2. 只需使用常规addImage method
  3. 将结果添加到pdf中