如何在Angular.JS中接收并下载PDF


Posted in Javascript onNovember 26, 2016

介绍

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();
 })

遇到的问题

后端采用reset api的方式来写接口。前端框架采用的AngularJS,所以就采用$resouce来调用接口,同样也设置了responseType:arraybuffer,但是生成的PDF却无法打开。最后还是改为用$http.get()方式就可以了。

兼容性问题

由于使用了HTML5 API: Bolb,所以只能支持IE10+。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用Angular.js能有所帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
用javascript实现页面打印的三种方法
Mar 05 Javascript
javascript 密码框防止用户粘贴和复制的实现代码
Feb 17 Javascript
原生javascript实现的分页插件pagenav
Aug 28 Javascript
使用Javascript简单实现图片无缝滚动
Dec 05 Javascript
js+jquery实现图片裁剪功能
Jan 02 Javascript
浅析JavaScript动画
Jun 10 Javascript
JavaScript数组对象赋值用法实例
Aug 04 Javascript
利用jQuery及AJAX技术定时更新GridView的某一列数据
Dec 04 Javascript
js轮播图代码分享
Jul 14 Javascript
Angular在一个页面中使用两个ng-app的方法(二)
Feb 20 Javascript
JS实现的获取银行卡号归属地及银行卡类型操作示例
Jan 08 Javascript
elementUI select组件默认选中效果实现的方法
Mar 25 Javascript
Vue 固定头 固定列 点击表头可排序的表格组件
Nov 25 #Javascript
AngularJs验证重复密码的方法(两种)
Nov 25 #Javascript
jQuery实现发送验证码并60秒倒计时功能
Nov 25 #Javascript
js document.getElementsByClassName的使用介绍与自定义函数
Nov 25 #Javascript
微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】
Nov 25 #Javascript
JS实现的图片预览插件与用法示例【不上传图片】
Nov 25 #Javascript
微信小程序开发之实现选项卡(窗口顶部TabBar)页面切换
Nov 25 #Javascript
You might like
第四节 构造函数和析构函数 [4]
2006/10/09 PHP
基于mysql的论坛(7)
2006/10/09 PHP
PHP 在线翻译函数代码
2009/05/07 PHP
解析PHP中VC6 X86和VC9 X86的区别及 Non Thread Safe的意思
2013/06/28 PHP
那些年我们错过的魔术方法(Magic Methods)
2014/01/14 PHP
smarty自定义函数htmlcheckboxes用法实例
2015/01/22 PHP
php中session与cookie的比较
2015/01/27 PHP
PHP扩展开发教程(总结)
2015/11/04 PHP
php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
2016/11/10 PHP
十个迅速提升JQuery性能让你的JQuery跑得更快
2012/12/10 Javascript
使用javascript实现页面定时跳转总结篇
2013/09/21 Javascript
node.js中watch机制详解
2014/11/17 Javascript
Jquery左右滑动插件之实现超级炫酷动画效果附源码下载
2015/12/02 Javascript
JavaScript中定时控制Throttle、Debounce和Immediate详解
2016/11/17 Javascript
JavaScript实现动态添加Form表单元素的方法示例
2017/08/14 Javascript
详解Angularjs 自定义指令中的数据绑定
2018/07/19 Javascript
浅析Vue实例以及生命周期
2018/08/14 Javascript
vue2.0实现的tab标签切换效果(内容可自定义)示例
2019/02/11 Javascript
使用js获取身份证年龄的示例代码
2020/12/11 Javascript
[01:14:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Orenda
2014/05/22 DOTA
Django中的CACHE_BACKEND参数和站点级Cache设置
2015/07/23 Python
python3新特性函数注释Function Annotations用法分析
2016/07/28 Python
Python实现对百度云的文件上传(实例讲解)
2017/10/21 Python
pandas 对series和dataframe进行排序的实例
2018/06/09 Python
Pandas 数据处理,数据清洗详解
2018/07/10 Python
Python jieba结巴分词原理及用法解析
2020/11/05 Python
物流专业大学生职业生涯规划书范文
2014/01/15 职场文书
大学生党员自我批评
2014/02/14 职场文书
离婚协议书标准格式
2014/10/04 职场文书
求职简历自我评价怎么写
2015/03/10 职场文书
2016年优秀共青团员事迹材料
2016/02/25 职场文书
一封真诚的自荐信帮你赢得机会
2019/05/07 职场文书
导游词之云南丽江-泸沽湖
2019/09/26 职场文书
vue使用节流函数的踩坑实例指南
2021/05/20 Vue.js
只需要这一行代码就能让python计算速度提高十倍
2021/05/24 Python
拙作再改《我的收音机情缘》
2022/04/05 无线电