如何在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同步Import,同步调用外部js的方法
Jul 08 Javascript
JQuery下关于$.Ready()的分析
Dec 13 Javascript
基于JQuery的一句代码实现表格的简单筛选
Jul 26 Javascript
js实现运动logo图片效果及运动元素对象sportBox使用方法
Dec 25 Javascript
jquery遍历select元素(实例讲解)
Dec 31 Javascript
JavaScript设计模式之工厂方法模式介绍
Dec 28 Javascript
Js获取图片原始宽高的实现代码
May 17 Javascript
BootStrap便签页的简单应用
Jan 06 Javascript
微信小程序wepy框架笔记小结
Aug 08 Javascript
在Vue-cli里应用Vuex的state和mutations方法
Sep 16 Javascript
浅谈Express.js解析Post数据类型的正确姿势
May 30 Javascript
vue实现将一个数组内的相同数据进行合并
Nov 07 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
杏林同学录(六)
2006/10/09 PHP
php反弹shell实现代码
2009/04/22 PHP
PHP日期时间函数的高级应用技巧
2009/05/16 PHP
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
2011/12/19 PHP
codeigniter上传图片不能正确识别图片类型问题解决方法
2014/07/25 PHP
php实现的简单多进程服务器类完整示例
2020/02/01 PHP
jquery在Chrome下获取图片的长宽问题解决
2013/03/20 Javascript
Javascript自定义排序 node运行 实例
2013/06/05 Javascript
js css后面所带参数含义介绍
2013/08/18 Javascript
一个Action如何调用两个不同的方法
2014/05/22 Javascript
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
JavaScript数组各种常见用法实例分析
2015/08/04 Javascript
jQuery在线选座位插件seat-charts特效代码分享
2015/08/27 Javascript
javascript解决小数的加减乘除精度丢失的方案
2016/05/31 Javascript
Ubuntu系统下Angularjs开发环境安装
2016/09/01 Javascript
js阻止冒泡和默认事件(默认行为)详解
2016/10/20 Javascript
JS+html5制作简单音乐播放器
2020/09/13 Javascript
利用SpringMVC过滤器解决vue跨域请求的问题
2018/02/10 Javascript
微信小程序:数据存储、传值、取值详解
2019/05/07 Javascript
JavaScript使用百度ECharts插件绘制饼图操作示例
2019/11/26 Javascript
python3中dict(字典)的使用方法示例
2017/03/22 Python
详解python使用Nginx和uWSGI来运行Python应用
2018/01/09 Python
pygame实现俄罗斯方块游戏
2018/06/26 Python
python 使用socket传输图片视频等文件的实现方式
2019/08/07 Python
在TensorFlow中实现矩阵维度扩展
2020/05/22 Python
详解Html5原生拖拽操作
2018/01/12 HTML / CSS
英国最大的网上药品商店:Chemist Direct
2017/12/16 全球购物
ECCO英国官网:丹麦鞋履品牌
2019/09/03 全球购物
如何查询Oracle数据库中已经创建的索引
2013/10/11 面试题
车辆安全检查制度
2014/01/12 职场文书
2014年社区学雷锋活动总结
2014/03/09 职场文书
法律进机关实施方案
2014/03/12 职场文书
2014年财务工作自我评价
2014/09/23 职场文书
大学迎新生标语
2014/10/06 职场文书
导游词之崇武古城
2019/10/07 职场文书
uniapp引入支付宝原生扫码插件步骤详解
2022/07/23 Javascript