如何在Angular.JS中接收并下載PDF
介紹
jsPDF 是一個(gè)使用Javascript語言生成PDF的開源庫。你可以在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 開發(fā)。提供強(qiáng)大的排版引擎
安裝:
client-version bower install pdfmake server-version npm install pdfmake
最后還是采用了后端生成PDF,前端通過接口請求,后端返回PDF Stream,最后前端通過Blob生成PDF并實(shí)現(xiàn)下載。
AngularJS中的解決辦法
$http.get('/receivePDFUrl', {responseType: 'arraybuffer'}) // 設(shè)置$http get請求的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); // 在新的頁面中打開PDF
})
如何設(shè)置PDF的文件名
$http.get('/receivePDFUrl', {responseType: 'arraybuffer'}) // 設(shè)置$http get請求的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();
})
遇到的問題
后端采用reset api的方式來寫接口。前端框架采用的AngularJS,所以就采用$resouce來調(diào)用接口,同樣也設(shè)置了responseType:arraybuffer,但是生成的PDF卻無法打開。最后還是改為用$http.get()方式就可以了。
兼容性問題
由于使用了HTML5 API: Bolb,所以只能支持IE10+。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家學(xué)習(xí)或者使用Angular.js能有所幫助,如果有疑問大家可以留言交流。
相關(guān)文章
Angular事件之不同組件間傳遞數(shù)據(jù)的方法
這篇文章主要介紹了Angular事件之不同組件間傳遞數(shù)據(jù)的方法,利用Angular Event在不同組件之間傳遞數(shù)據(jù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11
Angular2仿照微信UI實(shí)現(xiàn)9張圖片上傳和預(yù)覽的示例代碼
本篇文章主要介紹了Angular2仿照微信UI實(shí)現(xiàn)9張圖片上傳和預(yù)覽的示例代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-10-10
使用Angular CLI生成 Angular 5項(xiàng)目教程詳解
這篇文章主要介紹了使用Angular CLI生成 Angular 5項(xiàng)目的教程詳解 ,需要的朋友可以參考下2018-03-03
Angular.js中$resource高大上的數(shù)據(jù)交互詳解
這篇文章主要給大家介紹了關(guān)于Angular.js中$resource高大上的數(shù)據(jù)交互的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用angular.js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來一起看看吧。2017-07-07
AngularJS實(shí)現(xiàn)的2048小游戲功能【附源碼下載】
這篇文章主要介紹了AngularJS實(shí)現(xiàn)的2048小游戲,可實(shí)現(xiàn)通過鍵盤W、S、A、D鍵控制上下左右移動進(jìn)行游戲的功能,涉及AngularJS頁面元素動態(tài)操作及數(shù)值運(yùn)算等相關(guān)操作技巧,并附帶源碼供讀者下載參考,需要的朋友可以參考下2018-01-01
AngularJS基礎(chǔ) ng-dblclick 指令用法
本文主要介紹AngularJS ng-dblclick 指令,這里對ng-dblclick基礎(chǔ)資料整理并詳細(xì)介紹,簡單的代碼實(shí)例和實(shí)現(xiàn)效果,希望能幫助學(xué)習(xí)AngularJS的朋友2016-08-08
AngularJS入門教程之?dāng)?shù)據(jù)綁定用法示例
這篇文章主要介紹了AngularJS之?dāng)?shù)據(jù)綁定用法,結(jié)合實(shí)例形式分析了AngularJS基于內(nèi)置指令ng-model實(shí)現(xiàn)數(shù)據(jù)綁定的操作技巧,需要的朋友可以參考下2016-11-11

