如何在Angular.JS中接收并下載PDF
介紹
jsPDF 是一個(gè)使用Javascript語(yǔ)言生成PDF的開(kāi)源庫(kù)。你可以在Firefox插件,服務(wù)端腳本或是瀏覽器腳本中使用它。
客戶端Safari 和 iPhone Safari 支持得最好,其次是Opera和Windows下的Firefox 3等。IE暫不支持。
示例代碼:
var doc = new jsPDF(); doc.text(20, 20, 'Hello world.'); doc.save('Test.pdf');
服務(wù)器端可以完美運(yùn)行。
jsPDF使用方便,但是不支持中文
pdfmake支持中文,但是由于還需要引入font文件,導(dǎo)致文件體積可到十幾M,不適合前端。
pdfmake 是基于客戶端服務(wù)器的 PDF 打印解決方案,完全基于 JavaScript 開(kāi)發(fā)。提供強(qiáng)大的排版引擎
安裝:
client-version bower install pdfmake server-version npm install pdfmake
最后還是采用了后端生成PDF,前端通過(guò)接口請(qǐng)求,后端返回PDF Stream,最后前端通過(guò)Blob生成PDF并實(shí)現(xiàn)下載。
AngularJS中的解決辦法
$http.get('/receivePDFUrl', {responseType: 'arraybuffer'}) // 設(shè)置$http get請(qǐng)求的responseType為arraybuffer .success(function(data){ var file = new Blob([data], {type: 'application/pdf'}); // 使用Blob將PDF Stream 轉(zhuǎn)換為file var fileUrl = URL.createOjectURL(file); window.open(fileUrl); // 在新的頁(yè)面中打開(kāi)PDF })
如何設(shè)置PDF的文件名
$http.get('/receivePDFUrl', {responseType: 'arraybuffer'}) // 設(shè)置$http get請(qǐng)求的responseType為arraybuffer .success(function(data){ var file = new Blob([data], {type: 'application/pdf'}); // 使用Blob將PDF Stream 轉(zhuǎn)換為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(); })
遇到的問(wèn)題
后端采用reset api的方式來(lái)寫(xiě)接口。前端框架采用的AngularJS,所以就采用$resouce來(lái)調(diào)用接口,同樣也設(shè)置了responseType:arraybuffer
,但是生成的PDF卻無(wú)法打開(kāi)。最后還是改為用$http.get()
方式就可以了。
兼容性問(wèn)題
由于使用了HTML5 API: Bolb,所以只能支持IE10+。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家學(xué)習(xí)或者使用Angular.js能有所幫助,如果有疑問(wèn)大家可以留言交流。
相關(guān)文章
Angularjs 依賴壓縮及自定義過(guò)濾器寫(xiě)法
這篇文章主要介紹了Angularjs 依賴壓縮及自定義過(guò)濾器寫(xiě)法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-02-02Angularjs 1.3 中的$parse實(shí)例代碼
本文通過(guò)實(shí)例代碼給大家介紹了angularjs $parse的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-09-09詳解如何將angular-ui的圖片輪播組件封裝成一個(gè)指令
本篇文章主要介紹了如何將angular-ui的圖片輪播組件封裝成一個(gè)指令 ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05AngularJS動(dòng)態(tài)綁定ng-options的ng-model實(shí)例代碼
本篇文章主要介紹了AngularJS動(dòng)態(tài)綁定ng-options的ng-model實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06詳解AngularJS中module模塊的導(dǎo)入導(dǎo)出
本文給大家介紹angularjs中module模塊的導(dǎo)入導(dǎo)出,涉及到angularjs module相關(guān)知識(shí),對(duì)angularjs module感興趣的朋友一起看看吧2015-12-12angularjs創(chuàng)建彈出框?qū)崿F(xiàn)拖動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了angularjs創(chuàng)建彈出框?qū)崿F(xiàn)拖動(dòng)效果的相關(guān)資料,angularjs modal模態(tài)框創(chuàng)建可拖動(dòng)的指令,感興趣的小伙伴們可以參考一下2016-01-01詳解利用Angular實(shí)現(xiàn)多團(tuán)隊(duì)模塊化SPA開(kāi)發(fā)框架
本篇文章主要介紹了詳解利用Angular實(shí)現(xiàn)多團(tuán)隊(duì)模塊化SPA開(kāi)發(fā)框架,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11