【问题标题】:Render Svg to Pdf using jspdf使用 jspdf 将 Svg 渲染为 Pdf
【发布时间】:2015-02-26 16:58:03
【问题描述】:

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

【问题讨论】:

  • svgToPdf 仅支持 g,line,rect,ellipse,circle,text 元素和一些属性。只需将其作为一个简单的演示来播放即可。
  • @Priyesh Tiwari : 我遇到了同样的问题 svg 到 pdf 的转换,你是怎么解决你的问题的?

标签: svg jspdf


【解决方案1】:

您可以使用 canvg 做到这一点。

Step1:从 DOM 中获取“SVG”标记代码

var svg = document.getElementById('svg-container').innerHTML;

  if (svg)
    svg = svg.replace(/\r?\n|\r/g, '').trim();

第 2 步: 使用 canvg 从 svg 创建 canvas。

  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 回购:https://github.com/gabelerner/canvg

【讨论】:

  • 你的 JSFiddle 不能在 Firefox 上运行(我用 FF47 Windows 试过)
  • 当我点击“获取 PDF”@Purushoth 时没有任何反应,这是错误 ReferenceError: canvg is not defined。似乎您的 jsfiddle 中的链接设置不正确:gabelerner.github.io/canvg/canvg.js 不存在。你能更新一下吗?提前致谢!
  • 外部资源似乎已被删除/移动。但是代码将使用正确的外部引用。点击此处了解更多详情,github.com/gabelerner/canvg。
  • 现在已修复,jsfiddle.net/Purushoth/hvs91vpq@Basj。感谢您指出。
  • 谢谢,现在可以使用了!另一个问题,我至少会捐赠 500 分 :) 如果你打开 josephernest.github.io/Writing,并写 $$x^2+1$$,它会使用“MathJax”渲染成数学。然后似乎不可能使用通常的 JS PDF 库将其转换为 PDF。你有想法吗? github.com/josephernest/Writing
【解决方案2】:

我在内部使用canvg 尝试了svg2pdf.js 和addSvgAsImage。 两者都对我来说效果不佳,导致 pdf 中的图像定位或显示不正确。

我最终做了以下工作,效果很好:

  1. 无需任何库即可将 SVG 转换为 PNG,请参阅 my answer to "Convert SVG to image (JPEG, PNG, etc.) in the browser"。
  2. 只需使用普通的addImage method 将结果添加到 pdf 中

【讨论】:

  • 在 Safari 中对我不起作用,只是挂起,没有错误
  • 您的答案是最简单、最轻便、最实用的。谢谢!
【解决方案3】:

我认为当前的 jspdf 版本 (2.3.1) 有一个 addSvgAsImage method,但它将 svg 作为字符串。我想您可以使用 ajax 调用来检索 SVG 内容,但我的代码中只有 SVG 并以这种方式传递它。

【讨论】:

  • 谢谢,这是更好的方法。而不是将 svg 转换回图像或将 svg 转换为画布,如果想要实现 pdf 的清晰度,这根本不是有效的。
猜你喜欢
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-10
  • 2023-03-31
  • 2015-03-07
  • 2021-06-04
相关资源
最近更新 更多