如何在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实现点击TreeView文本父节点展开/折叠子节点
Jan 10 Javascript
用示例说明filter()与find()的用法以及children()与find()的区别分析
Apr 26 Javascript
鼠标移到图片上变大显示而不是放大镜效果
Jun 15 Javascript
jQuery中is()方法用法实例
Jan 06 Javascript
对JavaScript中this指针的新理解分享
Jan 31 Javascript
AngularJs实现分页功能不带省略号的代码
May 30 Javascript
JS版微信6.0分享接口用法分析
Oct 13 Javascript
Angular4学习笔记之根模块与Ng模块
Sep 09 Javascript
js中的 || 与 && 运算符详解
May 24 Javascript
layui监听工具栏的实例(操作列表按钮)
Sep 10 Javascript
vue实现购物车功能(商品分类)
Apr 20 Javascript
详解小程序横屏方案对比
Jun 28 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
php+mysqli数据库连接的两种方式
2015/01/28 PHP
jqPlot jquery的页面图表绘制工具
2009/07/25 Javascript
js内置对象 学习笔记
2011/08/01 Javascript
JavaScript 表单处理实现代码
2015/04/13 Javascript
实例详解jQuery表单验证插件validate
2016/01/18 Javascript
jQuery+PHP实现微信转盘抽奖功能的方法
2016/05/25 Javascript
Vue2.x中的父子组件相互通信的实现方法
2017/05/02 Javascript
docker中编译nodejs并使用nginx启动
2017/06/23 NodeJs
Mac 安装 nodejs方法(图文详细步骤)
2017/10/30 NodeJs
Vue验证码60秒倒计时功能简单实例代码
2018/06/22 Javascript
Node.js Koa2使用JWT进行鉴权的方法示例
2018/08/17 Javascript
jQuery利用cookie 实现本地收藏功能(不重复无需多次命名)
2019/11/07 jQuery
Python中使用strip()方法删除字符串中空格的教程
2015/05/20 Python
Python实现的彩票机选器实例
2015/06/17 Python
浅谈python日志的配置文件路径问题
2018/04/28 Python
django自带的server 让外网主机访问方法
2018/05/14 Python
python爬虫实例详解
2018/06/19 Python
python opencv实现证件照换底功能
2019/08/19 Python
Python的赋值、深拷贝与浅拷贝的区别详解
2020/02/12 Python
Django用户身份验证完成示例代码
2020/04/03 Python
浅谈keras保存模型中的save()和save_weights()区别
2020/05/21 Python
HTML5 input placeholder 颜色修改示例
2014/05/30 HTML / CSS
大学生自荐书范文
2013/12/10 职场文书
给老师的一封建议书
2014/03/13 职场文书
保证书范文大全
2014/04/28 职场文书
青春励志演讲稿
2014/04/29 职场文书
人民调解员培训方案
2014/06/05 职场文书
简单的离婚协议书范本
2014/11/16 职场文书
2014年幼儿园园务工作总结
2014/12/05 职场文书
社会实践活动总结
2015/02/05 职场文书
2015年度物流工作总结
2015/04/30 职场文书
小学五年级班主任工作经验交流材料
2015/11/02 职场文书
简短清晨问候语
2015/11/10 职场文书
Python实现学生管理系统(面向对象版)
2021/06/24 Python
Java Kafka 消费积压监控的示例代码
2021/07/01 Java/Android
Spring Data JPA框架自定义Repository接口
2022/04/28 Java/Android