介紹
jsPDF 是一個使用Javascript語言產生PDF的開源程式庫。你可以在Firefox插件,服務端腳本或瀏覽器腳本使用它。
客戶端Safari 和 iPhone Safari 支援得最好,其次是Opera和Windows下的Firefox 3等。 IE暫不支援。
範例程式碼:
var doc = new jsPDF(); doc.text(20, 20, 'Hello world.'); doc.save('Test.pdf');
伺服器端可以完美運作。
jsPDF使用方便,但不支援中文
pdfmake支援中文,但由於還需要引入font文件,導致文件體積可到十幾M,不適合前端。
pdfmake 是基於客戶端伺服器的 PDF 列印解決方案,完全基於 JavaScript 開發。提供強大的排版引擎
安裝:
client-version bower install pdfmake server-version npm install pdfmake
最後還是採用了後端產生PDF,前端透過介面請求,後端返回PDF Stream,最後前端透過Blob產生PDF並實現下載。
AngularJS中的解決方案
$http.get('/receivePDFUrl', {responseType: 'arraybuffer'}) // 设置$http get请求的responseType为arraybuffer .success(function(data){ var file = new Blob([data], {type: 'application/pdf'}); // 使用Blob将PDF Stream 转换为file var fileUrl = URL.createOjectURL(file); window.open(fileUrl); // 在新的页面中打开PDF })
如何設定PDF的檔案名稱
$http.get('/receivePDFUrl', {responseType: 'arraybuffer'}) // 设置$http get请求的responseType为arraybuffer .success(function(data){ var file = new Blob([data], {type: 'application/pdf'}); // 使用Blob将PDF Stream 转换为file var fileUrl = URL.createOjectURL(file); var a = document.createElement('a'); a.href = fileURL; a.target = '_blank'; a.download = 'yourfilename.pdf'; document.body.appendChild(a); a.click(); })
後的問題端?前端框架所採用的AngularJS,所以就採用$resouce來呼叫接口,同樣也設定了responseType:arraybuffer,但是產生的PDF卻無法開啟。最後還是改為用$http.get()方式就可以了。
由於使用了HTML5 API: Bolb,所以只能支援IE10+。