是否有可能使用JavaScript或jQuery将HTML页面保存为PDF?

是否有可能使用JavaScript或jQuery将HTML页面保存为PDF?

详细:

我生成了一个包含表格的HTML页面。 它有一个button“另存为PDF”。 如果用户点击该button,那么该HTML页面必须转换为PDF文件。

是否有可能使用JavaScript或jQuery?

是的 ,使用jspdf创buildPDF文件。

然后,您可以将其转换为数据URI,并将注入链接注入到DOM中

然而,你将需要自己写HTML到PDF转换。

不过这很愚蠢。 你为什么要把一个HTML页面转换成pdf?

只需使用打印机友好版本的页面,让用户select他想要打印的页面。

编辑:显然它有最小的支持

所以答案就是编写你自己的PDF编写器或者让一个现有的PDF编写器为你做(在服务器上)。

雅与JavaScript很容易做到。 希望这个代码对你有用。

你需要JSpdf库 。

<div id="content"> <h3>Hello, this is a H3 tag</h3> <p>a pararaph</p> </div> <div id="editor"></div> <button id="cmd">Generate PDF</button> <script> var doc = new jsPDF(); var specialElementHandlers = { '#editor': function (element, renderer) { return true; } }; $('#cmd').click(function () { doc.fromHTML($('#content').html(), 15, 15, { 'width': 170, 'elementHandlers': specialElementHandlers }); doc.save('sample-file.pdf'); }); // This code is collected but useful, click below to jsfiddle link. </script> 

jsfiddle链接在这里

下面是我该怎么做,它的想法不是防弹devise,你需要修改它

  • 用户点击保存为PDFbutton
  • 服务器使用ajax发送一个呼叫
  • 服务器响应一个使用HTML生成的PDF的URL,我非常成功地使用了Apache FOP
  • 处理ajax响应的js执行一个location.href来指向JS发送的URL,一旦该URL加载,它就使用内容处置标题作为附件发送文件,迫使用户下载文件。

你可以使用Phantomjs。 从这里下载并使用以下示例来testinghtml-> pdf转换functionhttps://github.com/ariya/phantomjs/blob/master/examples/rasterize.js

示例代码:

 phantomjs.exe examples/rasterize.js http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/xhtml/index.html sample.pdf 

总之:没有。 第一个问题是对文件系统的访问,在大多数浏览器中,由于安全原因,默认设置为“no”。 现代浏览器有时以数据库的forms支持简约存储,或者您可以要求用户启用文件访问。

如果你有权访问文件系统,那么保存为HTML并不难(请参阅JS文档中的文件对象),但PDF并不是那么容易。 PDF是一个相当先进的文件格式,真的不适合Javascript。 它要求你写信息的数据types不直接支持的Javascript,如单词和四边形。 您还需要预先定义一个必须保存到文件的字典查找系统。 我确定有人可以使它工作,但所花费的努力和时间会更好地学习C ++或Delphi。

但是,如果用户给你提供非限制性的访问,那么HTML导出应该是可能的

还有另一个非常明显的,简单的方法来使用JavaScript将HTML转换为PDf:使用在线API。 如果您不需要在用户离线时进行转换,这将工作正常。

FreeHtmlToPdf.com是一个不错的select。 我相信你可以find替代品(如PdfMage ,显然有自己的API,但不共享协议)。

对于FreeHtmlToPdf API,你可能有这样的事情:

 var form = document.createElement("form"); form.setAttribute("method", "post"); form.setAttribute("action", "http://freehtmltopdf.com"); var hiddenField = document.createElement("input"); hiddenField.setAttribute("name", "html"); hiddenField.setAttribute("value", "<html><body>Hi there!</body></html>"); form.appendChild(hiddenField); hiddenField = document.createElement("input"); hiddenField.setAttribute("name", "baseurl"); hiddenField.setAttribute("value", "http://localhost"); form.appendChild(hiddenField); hiddenField = document.createElement("input"); hiddenField.setAttribute("name", "convert"); hiddenField.setAttribute("value", ""); form.appendChild(hiddenField); document.body.appendChild(form); form.submit(); 

这可能是一个迟到的答案,但这是最好的: https : //github.com/eKoopmans/html2pdf

纯JavaScript的实现。 允许您通过ID指定一个元素并将其转换。

是。 例如,您可以通过https://grabz.it使用解决scheme。;

它有一个JavaScript API,可以用不同的方式来抓取和操纵屏幕截图。 为了在您的应用程序中使用它,您将需要先获得一个应用程序密钥和秘密,并下载免费的JavaScript SDK。

所以,让我们看一个简单的例子来使用它:

 //first include the grabzit.min.js library in the web page <script src="grabzit.min.js"></script> //include the code below to add the screenshot to the body tag <script> //use secret key to sign in. replace the url. GrabzIt("Sign in to view your Application Key").ConvertURL("http://www.google.com").Create(); </script> 

然后只需稍等片刻,图像就会自动出现在页面的底部,而无需重新加载页面。

这是最简单的一个。 有关image processing的更多示例,请将截图附加到元素等,请查看文档 。

我觉得不,因为JavaScript不能写入磁盘,你应该发送页面到服务器,并生成PDF文件,然后客户端将下载它