Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jspdf将Svg呈现为Pdf_Svg_Jspdf - Fatal编程技术网

使用jspdf将Svg呈现为Pdf

使用jspdf将Svg呈现为Pdf,svg,jspdf,Svg,Jspdf,我在使用jspdf将svg元素呈现为pdf时遇到问题。我正在使用插件来实现这一点 下面是我的代码 // 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'); svgElemen

我在使用jspdf将svg元素呈现为pdf时遇到问题。我正在使用插件来实现这一点

下面是我的代码

// 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。请帮助

您可以使用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()从画布创建图像

在这里查看演示

Canvg Repo:

我已经尝试了这两种方法,并在内部使用。 这两个对我来说都不起作用,在pdf中生成的图像要么位置不正确,要么显示不正确

我最后做了以下工作,效果非常好:

  • 将SVG转换为不带任何库的PNG,请参见
  • 只需使用普通的

  • svgToPdf只支持g、line、rect、椭圆、圆、文本元素和一些属性。只是作为一个简单的演示来播放。@Priyesh Tiwari:我遇到了同样的问题svg到pdf的转换,你是如何解决你的问题的?你的JSFIDLE在Firefox上不工作(我用FF47窗口尝试过)当我点击“Get pdf”@Purushoth时什么也没有发生,下面是错误
    ReferenceError:canvg没有定义
    。在您的jsfiddle:不存在中,似乎没有正确设置链接。你能更新一下吗?提前谢谢!外部资源似乎已被删除/移动。但是代码将与正确的外部引用一起工作。查看此处了解更多详细信息。它现在已修复,@Basj。谢谢你的指点。谢谢,它现在工作了!另一个问题,我至少会贡献500分:)如果你打开并写
    $$x^2+1$$
    它将使用“MathJax”渲染成数学。然后,用通常的JS PDF库将其转换为PDF似乎是不可能的。你有什么想法吗?在Safari中没有为我工作,只是挂起,没有错误。你的答案是最简单、轻松和实用的。非常感谢。
      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');