如何在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 相关文章推荐
ExtJS 2.2.1的grid控件在ie6中的显示问题
May 04 Javascript
JSQL 基于客户端的成绩统计实现方法
May 05 Javascript
actionscript与javascript的区别
May 25 Javascript
javascript的几种继承方法介绍
Mar 22 Javascript
js/jq仿window文件夹移动/剪切/复制等操作代码
Mar 08 Javascript
jQuery选择器之子元素过滤选择器
Sep 28 jQuery
一步快速解决微信小程序中textarea层级太高遮挡其他组件
Mar 04 Javascript
express + jwt + postMan验证实现持久化登录
Jun 05 Javascript
Node.js API详解之 tty功能与用法实例分析
Apr 27 Javascript
Antd的table组件表格的序号自增操作
Oct 27 Javascript
Vue中nprogress页面加载进度条的方法实现
Nov 13 Javascript
在vue项目中封装echarts的步骤
Dec 25 Vue.js
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
php中serialize序列化与json性能测试的示例分析
2013/04/27 PHP
解析php下载远程图片函数 可伪造来路
2013/06/25 PHP
PHP微信开发之查询城市天气
2016/06/23 PHP
jQuery效果 slideToggle() 方法(在隐藏和显示之间切换)
2011/06/28 Javascript
使用Jquery来实现可以输入值的下拉选单 雏型
2011/12/06 Javascript
JSON 数据格式介绍
2012/01/13 Javascript
JavaScript中的逻辑判断符&&、||与!介绍
2014/12/31 Javascript
跟我学习javascript的prototype原型和原型链
2015/11/18 Javascript
AJAX实现瀑布流触发分页与分页触发瀑布流的方法
2016/05/23 Javascript
第五篇Bootstrap 排版
2016/06/21 Javascript
AngularJS实现树形结构(ztree)菜单示例代码
2016/09/18 Javascript
Angular X中使用ngrx的方法详解(附源码)
2017/07/10 Javascript
Vue仿支付宝支付功能
2018/05/25 Javascript
微信小程序之裁剪图片成圆形的实现代码
2018/10/11 Javascript
JQuery实现ajax请求的示例和注意事项
2018/12/10 jQuery
webpack结合express实现自动刷新的方法
2019/05/07 Javascript
JavaScript进阶(三)闭包原理与用法详解
2020/05/09 Javascript
Python使用PyGreSQL操作PostgreSQL数据库教程
2014/07/30 Python
windows下python之mysqldb模块安装方法
2017/09/07 Python
Python 高级专用类方法的实例详解
2017/09/11 Python
Python3使用turtle绘制超立方体图形示例
2018/06/19 Python
python使用turtle库绘制树
2018/06/25 Python
centos7之Python3.74安装教程
2019/08/15 Python
在tensorflow中设置使用某一块GPU、多GPU、CPU的操作
2020/02/07 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
2020/10/27 Python
python自动化发送邮件实例讲解
2021/01/04 Python
详解HTML5 Canvas标签及基本使用
2020/01/10 HTML / CSS
澳大利亚首屈一指的在线购物目的地:Kogan.com
2017/02/02 全球购物
无谷物狗粮:Pooch & Mutt
2018/05/23 全球购物
Piercing Pagoda官网:耳环、戒指、项链、手链等
2020/09/28 全球购物
《桃林那间小木屋》教学反思
2014/05/01 职场文书
施工安全责任书范本
2014/07/24 职场文书
公司总经理岗位职责
2015/04/01 职场文书
小学生安全保证书
2015/05/09 职场文书
校园之声广播稿
2015/08/18 职场文书
签证扫盲贴,41个常见签证知识,需要的拿走
2019/08/09 职场文书