如何在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_05_原型继承原理
Oct 13 Javascript
一个通过script自定义属性传递配置参数的方法
Sep 15 Javascript
jquery滚动到顶部底部代码
Apr 20 Javascript
javascript自动恢复文本框点击清除后的默认文本
Jan 12 Javascript
使用JQuery 加载页面时调用JS的实现方法
May 30 Javascript
详解vue 模版组件的三种用法
Jul 21 Javascript
JS基于正则表达式实现的密码强度验证功能示例
Sep 21 Javascript
node.js通过axios实现网络请求的方法
Mar 05 Javascript
JS中的一些常用的函数式编程术语
Jun 15 Javascript
vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
Mar 07 Javascript
javascript-hashchange事件和历史状态管理实例分析
Apr 18 Javascript
解决Vue watch里调用方法的坑
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
php的header和asp中的redirect比较
2006/10/09 PHP
全文搜索和替换
2006/10/09 PHP
用php实现像JSP,ASP里Application那样的全局变量
2007/01/12 PHP
浅谈php中include文件变量作用域
2015/06/18 PHP
使用xampp搭建运行php虚拟主机的详细步骤
2015/10/21 PHP
PHP文件操作实例总结
2016/09/27 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
Javascript中Eval函数的使用
2010/03/23 Javascript
Javascript之旅 对象的原型链之由来
2010/08/25 Javascript
jquery 中多条件选择器,相对选择器,层次选择器的区别
2012/07/03 Javascript
JQuery在页面中添加和除移DOM示例代码
2013/06/24 Javascript
jquery数组过滤筛选方法grep()简介
2014/06/06 Javascript
Javascript中innerHTML用法实例分析
2015/01/12 Javascript
DOM基础教程之使用DOM控制表格
2015/01/20 Javascript
js控制元素显示在屏幕固定位置及监听屏幕高度变化的方法
2015/08/11 Javascript
JS实现按比例缩放图片的方法(附C#版代码)
2015/12/08 Javascript
基于JS代码实现图片在页面中旋转效果
2016/06/16 Javascript
ReactJs设置css样式的方法
2017/06/08 Javascript
在vue项目中引入高德地图及其UI组件的方法
2018/09/04 Javascript
详解在网页上通过JS实现文本的语音朗读
2019/03/28 Javascript
使用layer.msg 时间设置不起作用的解决方法
2019/09/12 Javascript
基于JavaScript伪随机正态分布代码实例
2019/11/07 Javascript
详解JavaScript执行模型
2020/11/16 Javascript
[02:32]DOTA2英雄基础教程 祸乱之源
2013/12/23 DOTA
Python群发邮件实例代码
2014/01/03 Python
paramiko模块安装和使用(远程登录服务器)
2014/01/27 Python
跟老齐学Python之永远强大的函数
2014/09/14 Python
python发送邮件功能实现代码
2016/07/15 Python
Python脚本实现自动将数据库备份到 Dropbox
2017/02/06 Python
Python3 适合初学者学习的银行账户登录系统实例
2017/08/08 Python
使用keras框架cnn+ctc_loss识别不定长字符图片操作
2020/06/29 Python
详解python内置模块urllib
2020/09/09 Python
决定成败的关键——创业计划书
2014/01/24 职场文书
个人收入证明模板
2014/09/18 职场文书
初中政治教学工作总结
2015/08/13 职场文书
golang生成并解析JSON
2022/04/14 Golang