如何在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 相关文章推荐
jquery中的 $("#jb51")与document.getElementById("jb51") 的区别
Jul 26 Javascript
利用JavaScript实现新闻滚动效果(实例代码)
Nov 27 Javascript
全面解析DOM操作和jQuery实现选项移动操作代码分享
Jun 07 Javascript
各式各样的导航条效果css3结合jquery代码实现
Sep 17 Javascript
微信js-sdk分享功能接口常用逻辑封装示例
Oct 13 Javascript
JS使用正则截取两个字符串之间的字符串实现方法详解
Jan 06 Javascript
ReactNative中使用Redux架构总结
Dec 15 Javascript
vue2.0 datepicker使用方法
Feb 04 Javascript
Angular4.x通过路由守卫进行路由重定向实现根据条件跳转到相应的页面(推荐)
May 10 Javascript
js函数和this用法实例分析
Mar 13 Javascript
javascript+css实现俄罗斯方块小游戏
Jun 28 Javascript
Vue实现计算器计算效果
Aug 17 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
风味层面去分析咖啡油脂
2021/03/03 咖啡文化
php 文件状态缓存带来的问题
2008/12/14 PHP
无需重新编译php加入ftp扩展的解决方法
2013/02/07 PHP
学习php过程中的一些注意点的总结
2013/10/25 PHP
PHP简单实现欧拉函数Euler功能示例
2017/11/06 PHP
PHP的Trait机制原理与用法分析
2019/10/18 PHP
javascript动态的改变IFrame的高度实现自动伸展
2013/10/12 Javascript
js中Image对象以及对其预加载处理示例
2013/11/20 Javascript
js中function()使用方法
2013/12/24 Javascript
使用jquery提交form表单并自定义action的实现代码
2016/05/25 Javascript
jQuery Ajax Post 回调函数不执行问题的解决方法
2016/08/15 Javascript
利用Vue.js框架实现火车票查询系统(附源码)
2017/02/27 Javascript
JavaScript常用工具方法封装
2019/02/12 Javascript
Vue实现按钮级权限方案
2019/11/21 Javascript
JavaScript中数组去重的5种方法
2020/07/04 Javascript
Vue scoped及deep使用方法解析
2020/08/01 Javascript
python决策树之C4.5算法详解
2017/12/20 Python
python获取网页中所有图片并筛选指定分辨率的方法
2018/03/31 Python
对django xadmin自定义菜单的实例详解
2019/01/03 Python
使用OpCode绕过Python沙箱的方法详解
2019/09/03 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
2020/03/04 Python
python sitk.show()与imageJ结合使用常见的问题
2020/04/20 Python
python如何构建mock接口服务
2021/01/28 Python
DJI全球:DJI Global
2021/03/15 全球购物
大学生水文观测实习自我鉴定
2013/09/29 职场文书
光电信息专业应届生求职信
2013/10/07 职场文书
优秀毕业生自我鉴定
2014/02/11 职场文书
梅花魂教学反思
2014/04/25 职场文书
学雷锋志愿者活动方案
2014/08/21 职场文书
晋江市人民政府党组群众路线教育实践活动整改方案
2014/10/25 职场文书
晚自修旷课检讨书怎么写
2014/11/17 职场文书
招标保密承诺书
2015/01/20 职场文书
教师继续教育反思周记
2015/06/25 职场文书
班干部学习委员竞选稿
2015/11/20 职场文书
导游词之韩国济州岛
2019/10/28 职场文书
对讲机的最大通讯距离是多少
2022/02/18 无线电