2012-07-27 68 views
6

我知道有一堆库,但似乎没有完全符合我的方案。所以我希望在这里得到一些建议...在JavaScript中的HTML和CSS到PDF

技术:我在后端使用Express.js上的Node.js,前端使用html/css/js。浏览器支持IE8以上,Chrome浏览器,FF和其他现代浏览器。

我需要做的是:为用户点击一个“to pdf”按钮,然后将该DOM的一部分转换为pdf。当后端将API调用到另一个应用程序时,这个DOM的html块是动态生成的。 CSS是静态的。

除了这些,我有很多自由做任何我想做的,只要我没有明文数据发送给第三方等

任何建议如何做到这一点?


更新:寻找到wkhtmltopdf

+0

你找到了哪些图书馆,为什么它们不符合你的案例? – Bergi 2012-07-27 19:36:53

+0

好吧,例如,jspdf看起来不错,但它不采取在CSS – Max 2012-07-27 19:38:37

回答

5

基本上,这是我最后做

console.log("before"); 
fs.writeFile(html_filename, html, function (err) { 
    if (err) {res.writeHead(400); res.end("" + err); return;} 

    console.log("wrote html fine; now converting"); 
    exec('wkhtmltopdf ' + html_filename + ' ' + pdf_filename, function (err, stdout, stderr) { 
    if (err) {res.writeHead(400); res.end("" + err); return;} 

    console.log("converted; now reading"); 
    fs.readFile(pdf_filename, function (err, data) { 
     if (err) {res.writeHead(400); res.end("" + err); return;} 

     console.log("read fine; now serving"); 
     res.writeHead(200, {"content-type" : "application/pdf"}); 
     res.end(data); 
    }); 
    }); 
}); 

IMO这是一个有点难看,因为它需要制作一个文件,然后将其转换,然后为它服务,最后删除两个。我怀疑这里存在可伸缩性问题。另外wkhtmltopdf似乎与osx不太合适。尽管Linux上没有这样的问题。

0

尝试wkhtmltopdf。您可以轻松查看Ruby on Rails驱动程序的当前实现,并将其应用于节点和快车。您基本上称为命令行应用程序,它将使用您的打印CSS转换为PDF。

+0

我一直试图让wkhtmltopdf工作,但有重大问题。 – Max 2012-07-31 20:55:20

+0

目前,当我执行wkhtmltopdf时,无论是从终端手动还是从节点手动执行,都会在我的mac dock中弹出一个新进程,我必须单击它才能继续。否则它只是挂起。 – Max 2012-07-31 20:56:07