如何在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 相关文章推荐
document.body.scrollTop 值总为0的解决方法 比较常见的标准问题
Nov 30 Javascript
使用js操作cookie的一点小收获分享
Sep 03 Javascript
jquery如何判断某元素是否具备指定的样式
Nov 05 Javascript
SeaJS入门教程系列之SeaJS介绍(一)
Mar 03 Javascript
jQuery实现3D文字特效的方法
Mar 10 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
Oct 27 Javascript
微信小程序 网络请求(post请求,get请求)
Jan 17 Javascript
javascript 面向对象function详解及实例代码
Feb 28 Javascript
Bootstrap栅格系统简单实现代码
Mar 06 Javascript
vue-test-utils初使用详解
May 23 Javascript
layui的数据表格+springmvc实现搜索功能的例子
Sep 28 Javascript
js实现计时器秒表功能
Dec 16 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
espresso double下 咖啡粉超细时 饼压力对咖啡的影响
2021/03/03 冲泡冲煮
php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
2011/11/10 PHP
php常用表单验证类用法实例
2015/06/18 PHP
js里怎么取select标签里的值并修改
2012/12/10 Javascript
js动态设置鼠标事件示例代码
2013/10/30 Javascript
jQuery通过点击行来删除HTML表格行的实现示例
2014/09/10 Javascript
一个css与js结合的下拉菜单支持主流浏览器
2014/10/08 Javascript
jQuery背景插件backstretch使用指南
2015/04/21 Javascript
jquery实现的美女拼图游戏实例
2015/05/04 Javascript
浅析JavaScript中break、continue和return的区别
2016/11/30 Javascript
详解使用nodeJs安装Vue-cli
2017/05/17 NodeJs
bootstrap多层模态框滚动条消失的问题
2017/07/21 Javascript
js动态设置select下拉菜单的默认选中项实例
2018/08/21 Javascript
详解js中Array的方法及技巧
2018/09/12 Javascript
[03:28]2014DOTA2国际邀请赛 走近EG战队天才中单Arteezy
2014/07/12 DOTA
简述Python中的进程、线程、协程
2016/03/18 Python
详解python之简单主机批量管理工具
2017/01/27 Python
python的dataframe和matrix的互换方法
2018/04/11 Python
详解如何将python3.6软件的py文件打包成exe程序
2018/10/09 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
2018/10/11 Python
Python发送邮件测试报告操作实例详解
2018/12/08 Python
python+rsync精确同步指定格式文件
2019/08/29 Python
python读取多层嵌套文件夹中的文件实例
2020/02/27 Python
pandas统计重复值次数的方法实现
2021/02/20 Python
仿CSDN Blog返回页面顶部功能实现原理及代码
2013/06/30 HTML / CSS
夏威夷灵感服装及配饰:Reyn Spooner
2018/09/18 全球购物
耐克中国官方商城:Nike中国
2018/10/18 全球购物
大学生求职自我评价
2014/01/16 职场文书
电厂职工自我鉴定
2014/02/20 职场文书
搞笑创意广告语
2014/03/17 职场文书
员工保密承诺书
2014/05/28 职场文书
房地产经营管理专业自荐信
2014/09/02 职场文书
临时租车协议范本
2014/09/23 职场文书
土木工程专业本科生求职信
2014/10/01 职场文书
2014年档案管理员工作总结
2014/12/01 职场文书
MySQL修炼之联结与集合浅析
2021/10/05 MySQL