如何在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 相关文章推荐
JS控制日期显示的小例子
Nov 23 Javascript
javascript弹出层输入框(示例代码)
Dec 11 Javascript
点击表单提交时出现jQuery没有权限的解决方法
Jul 23 Javascript
浅析Node.js 中 Stream API 的使用
Oct 23 Javascript
获取JavaScript异步函数的返回值
Dec 21 Javascript
详谈Angular 2+ 的表单(一)之模板驱动型表单
Apr 25 Javascript
bootstrap弹出层的多种触发方式
May 10 Javascript
AngularJs用户登录问题处理(交互及验证、阻止FQ处理)
Oct 26 Javascript
JavaScript中的高级函数
Jan 04 Javascript
javascript数组拍平方法总结
Jan 20 Javascript
基于vue+uniapp直播项目实现uni-app仿抖音/陌陌直播室功能
Nov 12 Javascript
Ajax获取node服务器数据的完整步骤
Sep 20 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
全国FM电台频率大全 - 16 河南省
2020/03/11 无线电
php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
2014/11/06 PHP
ThinkPHP3.2.3数据库设置新特性
2015/03/05 PHP
php制作的简单验证码识别代码
2016/01/26 PHP
PHP精确到毫秒秒杀倒计时实例详解
2019/03/14 PHP
JavaScript的目的分析
2007/01/05 Javascript
JavaScript中的关键字"VAR"使用详解 分享
2013/07/31 Javascript
关于JavaScript对象的动态选择及遍历对象
2014/03/10 Javascript
我的Node.js学习之路(二)NPM模块管理
2014/07/06 Javascript
轻松创建nodejs服务器(8):非阻塞是如何实现的
2014/12/18 NodeJs
HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
2016/01/26 Javascript
js实现多图左右切换功能
2016/08/04 Javascript
js仿支付宝多方框输入支付密码效果
2016/09/27 Javascript
JS实现的简单拖拽购物车功能示例【附源码下载】
2018/01/03 Javascript
vue中导出Excel表格的实现代码
2018/10/18 Javascript
如何在vue中使用百度地图添加自定义覆盖物(水波纹)
2020/11/03 Javascript
[15:07]lgd_OG_m2_BP
2019/09/10 DOTA
跟老齐学Python之集合的关系
2014/09/24 Python
python实现线程池的方法
2015/06/30 Python
Python基于分水岭算法解决走迷宫游戏示例
2017/09/26 Python
python操作excel文件并输出txt文件的实例
2018/07/10 Python
利用python GDAL库读写geotiff格式的遥感影像方法
2018/11/29 Python
详解python 3.6 安装json 模块(simplejson)
2019/04/02 Python
Python中zip()函数的简单用法举例
2019/09/02 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
2019/09/17 Python
Python远程方法调用实现过程解析
2020/07/28 Python
Python爬虫之Selenium实现窗口截图
2020/12/04 Python
Python的collections模块真的很好用
2021/03/01 Python
附答案的Java面试题
2012/11/19 面试题
校园安全标语
2014/06/07 职场文书
2015年行风建设工作总结
2015/05/15 职场文书
2016年党员学习廉政准则心得体会
2016/01/20 职场文书
redis哨兵常用命令和监控示例详解
2021/05/27 Redis
一篇文章搞懂python混乱的切换操作与优雅的推导式
2021/08/23 Python
Nginx 路由转发和反向代理location配置实现
2021/11/11 Servers
MySQL生成千万测试数据以及遇到的问题
2022/08/05 MySQL