前言
这两天公司正在做一个PDF协议下载的功能。解决方案可以分为完全前端生成和后端生成两种方式。前端生成PDF有jsPDF 和pdfmake https://github.com/bpampuch/pdfmake两种方式。
最后还是采用了后端生成PDF,前端通过接口请求,后端返回PDF Stream,最后前端通过Blob生成PDF并实现下载。
AngularJS中的解决办法
1 2 3 4 5 6 7 8 9 10 11 12
| $http.get('/receivePDFUrl', {responseType: 'arraybuffer'})
.success(function(data){
var file = new Blob([data], {type: 'application/pdf'});
var fileUrl = URL.createOjectURL(file);
window.open(fileUrl);
})
|
如何设置PDF的文件名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| $http.get('/receivePDFUrl', {responseType: 'arraybuffer'})
.success(function(data){
var file = new Blob([data], {type: 'application/pdf'});
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
来调用接口,同样也设置了responseType:arraybuffer,但是生成的PDF却无法打开。最后还是改为用$http.get()方式就可以了。
兼容性问题
由于使用了HTML5 API: Bolb,所以只能支持IE10+。