如何在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 相关文章推荐
js escape,unescape解决中文乱码问题的方法
May 26 Javascript
javascript中运用闭包和自执行函数解决大量的全局变量问题
Dec 30 Javascript
jquery如何把参数列严格转换成数组实现思路
Apr 01 Javascript
JS 实现图片直接下载示例代码
Jul 22 Javascript
客户端js判断文件类型和文件大小即限制上传大小
Nov 20 Javascript
jquery实现checkbox 全选/全不选的通用写法
Feb 22 Javascript
JavaScript继承模式粗探
Jan 12 Javascript
JS动态插入并立即执行回调函数的方法
Apr 21 Javascript
AngularJS中filter的使用实例详解
Aug 25 Javascript
自制简易打赏功能的实例
Sep 02 Javascript
vue-cli 3.0 自定义vue.config.js文件,多页构建的方法
Sep 19 Javascript
puppeteer库入门初探
Jan 09 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源码加密 仿微盾PHP加密专家(PHPCodeLock)
2010/05/06 PHP
PHP开启opcache提升代码性能
2015/04/26 PHP
PHP设计模式之观察者模式实例
2016/02/22 PHP
php数组函数array_push()、array_pop()及array_shift()简单用法示例
2020/01/26 PHP
基于PHP实现堆排序原理及实例详解
2020/06/19 PHP
Add a Formatted Table to a Word Document
2007/06/15 Javascript
IE8提示Invalid procedure call or argument 异常的解决方法
2012/09/30 Javascript
ajax不执行success回调而是执行了error回调
2012/12/10 Javascript
在js文件中写el表达式取不到值的原因及解决方法
2013/12/23 Javascript
JQuery插件fancybox无法在弹出层使用左右键的解决办法
2013/12/25 Javascript
javascript实现根据身份证号读取相关信息
2014/12/17 Javascript
深入理解JavaScript系列(41):设计模式之模板方法详解
2015/03/04 Javascript
jquery简单实现网页层的展开与收缩效果
2015/08/07 Javascript
拥有一个属于自己的javascript表单验证插件
2016/03/24 Javascript
有关文件上传 非ajax提交 得到后台数据问题
2016/10/12 Javascript
原生js实现倒计时功能(多种格式调用)
2017/01/12 Javascript
bootstrap datetimepicker日期插件使用方法
2017/01/13 Javascript
javascript阻止事件冒泡和浏览器的默认行为
2017/01/21 Javascript
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
2017/03/25 jQuery
微信小程序如何实现点击图片放大功能
2020/01/21 Javascript
jQuery+ThinkPHP实现图片上传
2020/07/23 jQuery
详解Python开发中如何使用Hook技巧
2017/11/01 Python
python用户评论标签匹配的解决方法
2018/05/31 Python
idea创建springMVC框架和配置小文件的教程图解
2018/09/18 Python
Python分支语句与循环语句应用实例分析
2019/05/07 Python
ubuntu上安装python的实例方法
2019/09/30 Python
用python解压分析jar包实例
2020/01/16 Python
Python实现http接口自动化测试的示例代码
2020/10/09 Python
tensorflow与numpy的版本兼容性问题的解决
2021/01/08 Python
20行代码教你用python给证件照换底色的方法示例
2021/02/05 Python
HTML5 canvas基本绘图之图形组合
2016/06/27 HTML / CSS
税务干部鉴定材料
2014/02/11 职场文书
桥梁工程专业求职信
2014/04/21 职场文书
党风廉政建设个人总结
2015/03/06 职场文书
婚礼家长致辞
2015/07/27 职场文书
廉洁自律心得体会2016
2016/01/13 职场文书