在PDF中embeddedSVG(使用JS将SVG导出为PDF)

起点:我没有一个服务器,可以提供任何东西,但静态文件。 我在我的<body>中有一个SVG元素(dynamic创build),我想要导出为vector格式,最好是PDF或SVG。

我开始考虑使用已经存在的lib jsPDF和downloadify 。 它工作正常。 不幸的是,这不支持SVG,只有文本。

我已经阅读了关于PDF格式embeddedSVG图像的可能性,并且从Acrobat Reader 5(以及ImageViewer插件)开始似乎已经启用。 但它不起作用。 我已经尝试了3个不同的PDF阅读器没有成功。

这是否意味着PDF已经降低了SVGembedded支持? 我还没有发现任何东西。

我有两个问题 这可以解决? 如果是的话,在PDF中embeddedSVG的规范是什么? 有了这些信息,我就可以在jsPDF中build立自己的支持。

浏览器支持需求是Safari,Chrome和Firefox。 支持SVG的版本。

对于任何正在寻找JS-only解决scheme的人来说: PDFKit似乎是最近从JS生成PDF的高级解决scheme,它支持所有SVG几何图元(包括解释path几何string)。 如果你不需要像符号等复杂的东西,那么渲染现有的SVG内容将需要一个DOM-walker来跟踪CSS样式和inheritance。

我在其他答案中提到的jsPDF / svgToPdf组合的粗略SVG支持方面没有取得成功,而且这两者的源代码看起来并不完善,完整。

我会回答我自己的问题。 我最终使用了可以从JavaScript调用客户端的DocRaptor 。 这在技术上解决了我的问题,即使它是非免费的解决scheme。 如果我的答案可能是一个服务器端的解决scheme,我可以使用由Mic 提出的wkhtmltopdf 。

jsPDF有一个插件: svgToPdf

https://github.com/ahwolf/jsPDF/blob/master/jspdf.plugin.svgToPdf.js

我还没有尝试过,但是这可以允许放弃使用外部API和/或不得不依靠服务器端解决scheme。

你试过WKHTMLTOPDF吗? 这是一个基于webkit的免费工具。
我们在这里写了一个小教程。

在Mac上,使用Safari或Chrome,可以将embedded式SVG的HTML页面保存为PDF。
由于这些浏览器在内部使用WKHTMLTOPDF,可能这也适用于你。

EVO HTML to PDF Converter支持将HTML中embedded的SVG转换为PDF。 您可以在此处查看此function的示例: http : //www.evopdf.com/demo/HTML_to_PDF/HTML5_Features/SVG_to_PDF.aspx 。 这个示例代码是:

 // Create a HTML to PDF converter object with default settings HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter(); // Convert the HTML page with SVG to a PDF document in a memory buffer byte[] outPdfBuffer = htmlToPdfConverter.ConvertUrl(urlHtmlWithSVG); // Send the PDF as response to browser // Set response content type Response.AddHeader("Content-Type", "application/pdf"); // Instruct the browser to open the PDF file as an attachment or inline Response.AddHeader("Content-Disposition", String.Format("attachment; filename=SVG_to_PDF.pdf; size={0}", outPdfBuffer.Length.ToString())); // Write the PDF document buffer to HTTP response Response.BinaryWrite(outPdfBuffer); // End the HTTP response and stop the current page processing Response.End();