angular实现页面打印局部功能的思考与方法


Posted in Javascript onApril 13, 2018

前言

本文主要介绍了关于angular实现页面打印局部功能的相关内容,分享出来供大家参考,下面话不多说了,来一起看看详细的介绍吧。

场景

在页面显示的时候是分页现实的,当前页面只有10条数据,但是打印需要打印完整的100条数据。

并且在当前页面包含了表格之外的标题,菜单等其他元素。

后天api请求都需要带上token信息

前台页面跳转到打印页面后再跳回

1、通过缓存传递数据,

2、路由跳转到打印页面,

3、页面获取缓存数据,

4、调用浏览器打印方法,

5、操作完毕页面后退一步

调用打印页面

this.cach.setBylocal({key: key, value: data}); // 写入缓存
 this.router.navigate([url, key]); // 路由跳转,缓存key值传递过去

打印页面

ngAfterViewInit() {
 const $qus = this.route.params.subscribe(q => {
  const key = q.key;
  if (key) {
  this._data = this.cach.getBylocal(key) ;
  this.cach.removeBylocal(key);
  setTimeout(() => {
   window.print();
   history.go(-1);
  }, '20');
  }
 });
 }

angular实现页面打印局部功能的思考与方法

在打印页面里自动处理了分页显示等问题。测试一页A4纸适合页面840px-1225px

打印文件里会自动添加页面标题和日期,下方会自动添加页面地址,不知道如何去掉

在后台生成pdf页面显示自带打印下载功能

1、后台生成PDF文件,返回二进制流。

2、在不需要token信息的情况下,并且支持get请求的,可以在浏览器中直接打开该地址。或者通过a标签来实现下载和页面显示。并实现打印功能。

3、需要token验证的情况下,使用blob类型来接收数据,并创建一个本地地址供浏览器访问,后面操作如第二步。

private down(url: string, body?: any) {
 return this.http.post(url, body || null, {
  responseType: 'blob'
 })
 }
 private downLoad(url: string, type: string, body?: any, fileName?: string) {
 return this.down(url, body).map(r => {
  const blob = new Blob([r], {type: type});
  const objectUrl = URL.createObjectURL(blob);
  const a = document.createElement('a');
  document.body.appendChild(a);
  a.setAttribute('style', 'display:none');
  a.setAttribute('href', objectUrl);
  if (fileName) {
  a.setAttribute('download', fileName);
  } else {
  a.setAttribute('target', '_blank');
  }
  a.click();
  URL.revokeObjectURL(objectUrl);
  return true;
 });
 }

 /**
 * 下载pdf, 如果不传入文件名会再浏览器中打开 实现打印功能
 * 传入文件名会直接下载
 * @param {string} url
 * @param body
 * @param {string} fileName
 * @returns {Observable<boolean>}
 */
 downLoadPdf(url: string, body?: any, fileName?: string) {
 return this.downLoad(url, 'application/pdf', body, fileName);
 }

angular实现页面打印局部功能的思考与方法

在iframe页面里调用打印

这个方法可以结合前两个方法使用,把前两个页面放在在iframe页面里。

略。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
js与jQuery 获取父窗、子窗的iframe
Dec 20 Javascript
js使用for循环与innerHTML获取选中tr下td值
Sep 26 Javascript
jQuery表格行上移下移和置顶的实现方法
Oct 08 Javascript
iscroll.js的上拉下拉刷新时无法回弹的解决方法
Feb 18 Javascript
require.js配合插件text.js实现最简单的单页应用程序
Jul 12 Javascript
ionic cordova一次上传多张图片(类似input file提交表单)的实现方法
Dec 16 Javascript
JS实现数组去重复值的方法示例
Feb 18 Javascript
Angular2实现自定义双向绑定属性
Mar 22 Javascript
页面点击小红心js实现代码
May 26 Javascript
详解vue-cli下ESlint 配置说明
Sep 03 Javascript
jQuery实现回到顶部效果
Oct 19 jQuery
React forwardRef的使用方法及注意点
Jun 13 Javascript
vuex中的 mapState,mapGetters,mapActions,mapMutations 的使用
Apr 13 #Javascript
js捆绑TypeScript声明文件的方法教程
Apr 13 #Javascript
详解vuex中mapState,mapGetters,mapMutations,mapActions的作用
Apr 13 #Javascript
使用sessionStorage解决vuex在页面刷新后数据被清除的问题
Apr 13 #Javascript
如何编写一个d.ts文件的步骤详解
Apr 13 #Javascript
VSCode中如何利用d.ts文件进行js智能提示
Apr 13 #Javascript
Vue2.0 实现单选互斥的方法
Apr 13 #Javascript
You might like
PHP数据类型之布尔型的介绍
2013/04/28 PHP
多个PHP中文字符串截取函数
2013/11/12 PHP
php smarty truncate UTF8乱码问题解决办法
2014/06/13 PHP
PHP编写的图片验证码类文件分享
2016/06/06 PHP
php tpl模板引擎定义与使用示例
2019/08/09 PHP
php设计模式之单例模式用法经典示例分析
2019/09/20 PHP
xml转json的js代码
2012/08/28 Javascript
jQuery中 noConflict() 方法使用
2013/04/25 Javascript
js获取页面传来参数的方法
2014/09/06 Javascript
浅谈 javascript 事件处理
2015/01/04 Javascript
jquery动态增加删减表格行特效
2015/11/20 Javascript
JavaScript测试工具之Karma-Jasmine的安装和使用详解
2015/12/03 Javascript
js字符串引用的两种方式(必看)
2016/09/18 Javascript
深入理解JS继承和原型链的问题
2016/12/17 Javascript
通过AngularJS实现图片上传及缩略图展示示例
2017/01/03 Javascript
Vue使用vue-cli创建项目
2017/09/01 Javascript
JavaScript格式化json和xml的方法示例
2019/01/22 Javascript
性能优化篇之Webpack构建速度优化的建议
2019/04/03 Javascript
vue+element实现表格新增、编辑、删除功能
2019/05/28 Javascript
layui 实现表格某一列显示图标
2019/09/19 Javascript
如何利用JavaScript编写更好的条件语句详解
2020/08/10 Javascript
python遍历文件夹并删除特定格式文件的示例
2014/03/05 Python
深入解析Python中的上下文管理器
2016/06/28 Python
python pygame模块编写飞机大战
2018/11/20 Python
pyqt5实现按钮添加背景图片以及背景图片的切换方法
2019/06/13 Python
Python3 合并二叉树的实现
2019/09/30 Python
python3实现用turtle模块画一棵随机樱花树
2019/11/21 Python
Python通过两个dataframe用for循环求笛卡尔积
2020/04/29 Python
美国一家著名的儿童鞋制造商:Stride Rite
2017/01/02 全球购物
福克斯租车:Fox Rent A Car
2017/04/13 全球购物
英国定做窗帘和纺织品面料一站式商店:Dekoria
2018/08/29 全球购物
PHP如何调用MYSQL存储过程
2014/05/30 面试题
考核评语大全
2014/04/29 职场文书
大学生村官考核材料
2014/05/23 职场文书
对外汉语专业大学生职业生涯规划范文
2014/09/13 职场文书
客房部经理岗位职责
2015/02/02 职场文书