如何在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中alert弹出窗口文本换行问题简单详细说明
Dec 11 Javascript
5秒后跳转到另一个页面的js代码
Oct 12 Javascript
JS获得QQ号码的昵称,头像,生日的简单实例
Dec 04 Javascript
jquery组件使用中遇到的问题整理及解决
Feb 21 Javascript
php+js实现倒计时功能
Jun 02 Javascript
举例简介AngularJS的内部语言环境
Jun 17 Javascript
javascript中window.open在原来的窗口中打开新的窗口(不同名)
Nov 15 Javascript
JavaScript制作简单的框选图表
May 15 Javascript
jQuery实现动态删除LI的方法
May 30 jQuery
parabola.js抛物线与加入购物车效果的示例代码
Oct 25 Javascript
vue中使用element组件时事件想要传递其他参数的问题
Sep 18 Javascript
关于angular浏览器兼容性问题的解决方案
Jul 26 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
现磨咖啡骗局!现磨咖啡=新鲜咖啡?现磨咖啡背后的猫腻你不懂!
2019/03/28 冲泡冲煮
Discuz 6.0+ 批量注册用户名
2009/09/13 PHP
codeigniter框架批量插入数据
2014/01/09 PHP
PHP实现的简易版图片相似度比较
2015/01/07 PHP
php微信分享到朋友圈、QQ、朋友、微博
2019/02/18 PHP
js模拟弹出效果代码修正版
2008/08/07 Javascript
Ajax异步提交表单数据的说明及方法实例
2013/06/22 Javascript
js获取select标签的值且兼容IE与firefox
2013/12/30 Javascript
jQuery中:selected选择器用法实例
2015/01/04 Javascript
JavaScript简单实现弹出拖拽窗口(二)
2016/06/17 Javascript
深入理解JS中的Function.prototype.bind()方法
2016/10/11 Javascript
基于js实现checkbox批量选中操作
2016/11/22 Javascript
写jQuery插件时的注意点
2017/02/20 Javascript
JS中的数组转变成JSON格式字符串的方法
2017/05/09 Javascript
详解webpack 如何集成第三方js库
2017/06/29 Javascript
使用veloticy-ui生成文字动画效果
2018/02/08 Javascript
小程序实现锚点滑动效果
2019/09/23 Javascript
[03:55]DOTA2完美大师赛选手传记——LFY.MONET
2017/11/18 DOTA
[46:50]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python深入学习之特殊方法与多范式
2014/08/31 Python
Python基于回溯法子集树模板解决选排问题示例
2017/09/07 Python
windows下cx_Freeze生成Python可执行程序的详细步骤
2018/10/09 Python
django session完成状态保持的方法
2018/11/27 Python
Django 日志配置按日期滚动的方法
2019/01/31 Python
对python 中class与变量的使用方法详解
2019/06/26 Python
基于TensorBoard中graph模块图结构分析
2020/02/15 Python
Django之全局使用request.user.username的实例详解
2020/05/14 Python
python实例化对象的具体方法
2020/06/17 Python
Python Mock模块原理及使用方法详解
2020/07/07 Python
Python实现http接口自动化测试的示例代码
2020/10/09 Python
项目考察欢迎辞
2014/01/17 职场文书
2014年科室工作总结
2014/11/20 职场文书
销售开票员岗位职责
2015/04/15 职场文书
导游词之清晏园
2019/11/22 职场文书
Java 实战项目之家居购物商城系统详解流程
2021/11/11 Java/Android
MySQL限制查询和数据排序介绍
2022/03/25 MySQL