2012-07-27 79 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