网页pdf打印——window.print()
浏览器内核是提供了打印功能的,只要在控制台调用window.print()方法就可以将网页打印成pdf文件到我们选择的路径,但是打印的内容和格式可能不是我们想要的。所以写这篇博客介绍一种通用的方法:
下面是整个demo的代码:
<html>
<head><script src="./js/jquery-1.7.2.min.js"></script>
</head>
<script>//页面打开时就初始化第一页$(function (){$("body").append("<div class='page'; style='page-break-after:always; background-color:red; width:700px'></div>"); });//打开新页面的方法,在body中插入新的div,并且设置属性 page-break-after:alwaysfunction newPage(){$("body").append("<br><div class='page'; style='page-break-after:always; background-color:red; width:700px'></div>"); }//向页面中插入内容,如果页面高度大于200,就换新的一页function insert(){if( $(".page:last").outerHeight()>200){newPage()}else{$(".page:last").append("<p>ertyuiopgehrtasbsdfghsfadhfdjadsfgh</p>");}}//点击打印时,替换innerHTML内容并调用浏览器打印方法function printPage(){$("body").append("<!--endprint-->");//打印之前添加结尾标志bdhtml=window.document.body.innerHTML; //获取到页面htmlsprnstr="<!--startprint-->";eprnstr="<!--endprint-->"; //找到两个标签prnhtml=bdhtml.substr(bdhtml.indexOf(sprnstr)+17);prnhtml=prnhtml.substring(0,prnhtml.indexOf(eprnstr)); //切除标签以外的东西window.document.body.innerHTML=prnhtml;window.print();window.document.body.innerHTML=bdhtml;//将页面重新改回原始样式window.location.href=window.location.href; //此处是业务需要 由于有动态生成数据 直接返回样式会乱 所以手动刷新了一下}</script>
<body>
<input type="button" onclick="printPage()" value="打印"/>
<input type="button" onclick="insert()" value="插入"/>
<input type="button" onclick="newPage()" value="下一页"/><!--startprint--></body>
</html>
这里有几个比较重要的地方
- page-break-after:always
- window.print();
- sprnstr=”
<!--startprint-->
“;
eprnstr="<!--endprint-->
“;
1、page-break-after:always
如果只是单纯调用window.print();这个方法的话,浏览器会把整个网页拿下来,从上到下渲染到pdf上面,如果一页不够会主动再起一页。page-break-after:always这个属性的作用就是告诉浏览器,看到这个属性的标签后请直接给我再起一页,不管上一页有没有排满。这个属性有利于我们控制自己的页面的样式。
所以我们每一页的开始应该要加上这个属性,这样就能按照我们的意愿去分页了
2、window.print();
这个是核心方法,没什么好说的。调用它就会将浏览器中innerHTML中的内容打印。
3、sprnstr=”<!--startprint-->
“; eprnstr="<!--endprint-->
“;
这两个是我们人为设置的节点,这两个节点之间就是点击打印按钮后要打印的内容,其他部分会被忽略。相当于是将网页中我们不需要打印的地方截取掉了。比如我这个deno中的按钮就是我不需要的。我将它放在这两个标签外面就可以了。具体实现方式如下:
bdhtml=window.document.body.innerHTML; //获取到页面htmlsprnstr="<!--startprint-->";eprnstr="<!--endprint-->"; //找到两个标签prnhtml=bdhtml.substr(bdhtml.indexOf(sprnstr)+17);prnhtml=prnhtml.substring(0,prnhtml.indexOf(eprnstr)); //切除标签以外的东西window.document.body.innerHTML=prnhtml;
网页pdf打印——window.print()相关推荐
- 关于页面打印window.print()的样式问题
当我们打印网页的时候.有时候会发现.打印出来的.跟网页上看到的样式的差别有点大.这其中可能有的问题是.样式问题. 当调用打印(window.print())方法时.打印机会在网页的样式中查找 @med ...
- web打印window.print
这几天一直在研究通过web程序打印条形码到标签上,由于打印机和显示器不同,碰到了各种坑,现一一列出来,给各位参考. web打印有很多的方式,比如生成pdf打印.JQuery插件.window.prin ...
- js打印window.print()图片打印
1. 这里用的是A4纸,设置打印表格属性(width:100%,height:980px) 2.由于打印可能存在多页,所以heightt属性必须严格控制. 3.由于自己是先隐藏不需要打印的DIV,然后 ...
- js使用页面打印window.print() 记录,并进行缩放打印
//打印print:function(){//获取打印的页面内容let subOutputRankPrint = document.getElementById('print-div');let ne ...
- html打印页面设置缩放,js使用页面打印window.print() 记录,并进行缩放打印
//打印 print:function(){ //获取打印的页面内容 let subOutputRankPrint = document.getElementById('print-div'); le ...
- Microsoft Edge (92.0.902.55 ) 打印(window.print) 卡死/无响应
版本号: 92.0.902.55 ,如下图所示.(2021.07.28) 今天调试项目的时候发现一调用打印接口,浏览器就卡死,我还以为我代码又出啥问题了-,结果是浏览器的bug 不过微软嘛,懂得都懂 ...
- vue实现打印预览pdf(window.open)
打开接口地址,这个方法是后端已经写好打印window.print(); 前端就只需要打开这个网页地址即可,类型需要是html window.open(res.request.responseURL,& ...
- Jquery生成条形码到网页以及打印条形码
背景 最新一个项目上涉及到生成条形码,并打印出来,个人经常写java,但是用后端去处理这个反而挺麻烦的.使用js是比较方便的,这里就简单地介绍一下. 在网上查了很多关于生成条形码的内容,就属JsBar ...
- window.print() 前端页面打印与预览PDF
window.print()打印是浏览器自带的打印,实现原理是将html转换为pdf可以在线预览打印或者导出pdf,在任何网页上可通过Ctil+p快捷键调出浏览器打印程序,它可将整个网页打印出来,在我 ...
最新文章
- oracle00313 ora27037,ORA-00313, ORA-00312, ORA-27037 in Standby Database
- pycharm 格式化代码
- 我决定重新开始搞机器学习啦
- LeetCode 13. Roman to Integer
- 【转】visual studio 2012进行C语言开发[图文]
- JS----深拷贝和浅拷贝
- STM32-TFTLCD显示
- delphi services允许跨域访问
- 电脑常用音频剪辑软件_5款好用的音频剪辑软件推荐
- 亚马逊警用刷脸计划小小受阻,但原因并不是贝佐斯妥协
- hadoop开发步骤
- Hbase数据库介绍
- 卡诺模型(KANO Model)
- 【Python】openpyxl设置excel的表格边框内外边框不同处理
- qq互联代码 php,请教QQ互联的代码是如何写的?
- latex 表格居中
- win7没有显示wifi连接到服务器,Win7笔记本电脑搜不到无线网络(Wifi)怎么办?...
- 【Scapy】获取流量包【原创】
- mysql虚拟主机_虚拟主机有mysql吗
- 疲劳驾驶检测系统的研究
热门文章
- java编写安卓计算器_安卓实现简单计算器
- Selenium中的EC模块
- 单击屏幕亮屏流程分析
- 计算机科学人工智能的应用,计算机人工智能技术的应用与发展.pdf
- scikit-learn机器学习八 (数据预处理)
- 深入理解Java虚拟机到底是什么
- C语言自动预订飞机票问题
- 杭州php程序员工资一般多少,杭州Android基础一期大黑马强哥,完美收官~~欧巴,卡几嘛...
- 获取上传文件的后缀,.jpg,.png,.word,.xsl...使用方法split,lastindexOf,subtr
- 弧形银幕电影的成像原理