如何在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实现table单双行不同显示并能单行选中
Jul 25 Javascript
javascript 不间断的图片滚动并可点击
Jan 15 Javascript
javascript json2 使用方法
Mar 16 Javascript
初识JQuery 实例一(first)
Mar 16 Javascript
IE6/IE7中JavaScript json提示缺少标识符、字符串或数字问题处理
Dec 16 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
Jan 08 Javascript
jQuery插件imgPreviewQs实现上传图片预览
Jan 15 Javascript
学习javascript文件加载优化
Feb 19 Javascript
js时间戳与日期格式之间相互转换
Dec 11 Javascript
使用react实现手机号的数据同步显示功能的示例代码
Apr 03 Javascript
JS实现的图片选择顺序切换和循环切换功能示例【测试可用】
Dec 28 Javascript
js实现html滑动图片拼图验证
Jun 24 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
超强分页类2.0发布,支持自定义风格,默认4种显示模式
2007/01/02 PHP
php 计算两个时间戳相隔的时间的函数(小时)
2009/12/18 PHP
测试php连接mysql是否成功的代码分享
2014/01/24 PHP
php使用function_exists判断函数可用的方法
2014/11/19 PHP
php判断文件上传图片格式的实例详解
2017/09/30 PHP
判断浏览器的javascript版本的代码
2010/09/03 Javascript
jquery 学习之二 属性(html()与html(val))
2010/11/25 Javascript
js constructor的实际作用分析
2011/11/15 Javascript
浅析hasOwnProperty方法的应用
2013/11/20 Javascript
jquery scroll()区分横向纵向滚动条的方法
2014/04/04 Javascript
jQuery中removeAttr()方法用法实例
2015/01/05 Javascript
jQuery使用CSS()方法给指定元素同时设置多个样式
2015/03/26 Javascript
js实现缓冲运动效果的方法
2015/04/10 Javascript
javascript文本模板用法实例
2015/07/31 Javascript
javascript封装 Cookie 应用接口
2015/08/07 Javascript
情人节单身的我是如何在敲完代码之后收到12束玫瑰的(javascript)
2015/08/21 Javascript
JavaScript开发Chrome浏览器扩展程序UI的教程
2016/05/16 Javascript
js实现五星评价功能
2017/03/08 Javascript
详解在React.js中使用PureComponent的重要性和使用方式
2018/07/10 Javascript
VUE DOM加载后执行自定义事件的方法
2018/09/07 Javascript
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
2018/11/21 Javascript
利用百度echarts实现图表功能简单入门示例【附源码下载】
2019/06/10 Javascript
微信小程序前端promise封装代码实例
2019/08/24 Javascript
vue实现自定义多选按钮
2020/07/16 Javascript
[51:26]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第二局
2016/03/03 DOTA
python实现DES加密解密方法实例详解
2015/06/30 Python
PyTorch使用cpu加载模型运算方式
2020/01/13 Python
VScode连接远程服务器上的jupyter notebook的实现
2020/04/23 Python
Python批量修改xml的坐标值全部转为整数的实例代码
2020/11/26 Python
关于HTML5 Placeholder新标签低版本浏览器下不兼容的问题分析及解决办法
2016/01/27 HTML / CSS
Lou & Grey美国官网:主打舒适性面料服饰
2017/12/21 全球购物
彪马俄罗斯官网:PUMA俄罗斯
2019/07/13 全球购物
电子商务专业求职信
2014/07/10 职场文书
反四风对照检查材料
2014/09/22 职场文书
2016中考冲刺决心书
2015/09/22 职场文书
导游词之重庆钓鱼城
2019/09/19 职场文书