首頁  >  文章  >  web前端  >  如何在Angular.JS中接收並下載PDF

如何在Angular.JS中接收並下載PDF

高洛峰
高洛峰原創
2016-12-05 11:13:521775瀏覽

介紹

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+。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn