繁芜的套打可以选第三方插件。jQuery插件是封装的print方法,我前几年给银行网点做了个小系统须要局部打印,选了插件,实在没有很空想,须要自己做一些调度才行。大部分情形用print就能办理。
局部打印页面上显示的内容与终极须要打印的内容之间总是存在差异的,从两个方向办理这个问题,一个是打印时只显示须要打印的部分,另一个是打印前调度页面的内容,只保留须要打印的部分。可以用到下面几个方法:
css media query 可以写一些只在打印时有效的样式,例如掌握页面某个按钮打印时隐蔽
@media print{ .no-print{ display:none }}
可以用onbeforeprint和onafterprint在打印前重新编辑内容,专门送去打印,打印后又处理回来。
function window.onbeforeprint(){ //将一些不须要打印的隐蔽 }function window.onafterprint(){ //放开隐蔽的元素 }
// polyfill// 对付基于Webkit的浏览器,您可以创建一个等效的结果window.matchMedia('print')。// var mediaQueryList = window.matchMedia('print');// mediaQueryList.addListener('change', function(mql) {// if(mql.matches) {// console.log('webkit equivalent of onbeforeprint');// }// });
onbeforeprint 在设置页面打印之后但是在打印对话框涌现之前实行 JavaScript
onafterprint 定义为在设置页面打印且打印对话框已涌现之后,实行一段 JavaScript。只有 Internet Explorer 和 Firefox 支持 onafterprint 事宜属性。但是:在 IE 中,onafterprint=属性在打印对话框涌现之前而不是之后发生。
onbeforeprint fired before dialog appears and allows one to change html and so on.onafterprint is fired just before dialog appears. It is not even possible to know, whether document was actually printed or user canceled it. Needless to say about when printing finished (if started at all).Again: no event is available to track anything happened in print dialog, i.e. answer to your question is no.Moreover, I hope what your need will never be implemented, cause this allows to frustrate user. He/she asks to print one document, but got something different.
改变页面内容的办法体验比较糟糕,个人不推举,jq插件默认是用iframe,实在还可以window.open一个单独的打印页面,预览和打印都好办理,两种办法都须要把稳样式表是在原来的页面,须要轻微把稳下样式是否有缺失落。
分页
page-break-before:always;page-break-after:always;page-break-inside:avoid;
用样式可以掌握主动利用分页符,没用过的可以看下这里
http://www.w3school.com.cn/cssref/pr_print_page-break-after.asp
不讯问直接打印有3种办法,但都有限定
利用插件实现网高下载ScriptX.cab文件下载成功后将文件放在项目某个目录下,然后在页面body中写上:
<object id="factory" name="factory" style="display: none" classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814" codebase="ScriptX.cab" viewastext></object>
codebase属性为ScriptX.cab文件的放置路径(绝对路径)调用:factory.printing.Print(false)即可
webbrowser实现须要修正IE浏览器安全设置,否则还是会弹出对话框
安全 -> 本地Intranet -> 自定义级别 - 找到ActiveX控件和插件项,选择对未标记为可安全实行的ActiveX控件初始化并实行脚本,再选择启用安全 -> 受信赖的站点 -> 自定义级别 - 找到ActiveX控件和插件项,选择对未标记为可安全实行的ActiveX控件初始化并实行脚本,再选择启用安全 -> 受信赖的站点 -> 站点 -> 添加受信赖访问站点(如果是访问远程那么是对方IP地址,如果是本地则是本机IP.例如http://192.168.172.1)然后实行
document.getElementById('WebBrowser').ExecWB(6,2,3)
vb实现结合webbrowser实现可以利用vb,但是IE11开始已经被微软废弃,无法实行vb代码了。
execScript('document.getElementById("WebBrowser").ExecWB 6, 2, 3','vbscript');
无边距打印无边距打印是打印机的一种功能,即全幅打印,打印纸不留空缺。适用于照片打印,广告打印,海报打印等。目前的主流打印机都有支持该功能的型号。当在运用程序中创建用于打印的数据时,须要调度数据到打印纸的尺寸。如果运用程序中有边距设置,应确保在打印前将它们设为零。把稳:利用此功能进行打印将比普通打印要花更永劫光。利用此功能打印输出的顶部和底部区域的打印质量可能会低落,或者在上面未列出的介质上打印时该区域可能会污损。在打印大量的作业之前先打印一页以检讨打印质量。
自定义页码碰着的一个需求,只打印条约中须要填写数据的几页,不能利用自带的页码,以是把自带的页码去掉,然后写个div定位到原来页码的位置,里面的内容就可以自己掌握了。须要把稳:1. 页面打印区域的缘故原由,不是在任意打印机上都可以把页码打印在纸张的边缘,须要根据打印机的可打印区域调度。2. 页码须要利用到绝对定位,以是哀求打印的内容是确定的,目前碰着有这个需求的,打印内容也都是固定的。
横向打印chrome 支持 @page 规则
@page{size : A4 lanscape;}
双面打印须要在打印首选项中设置。
把稳:有时候须要通过加个空缺页来让后面的内容重新的一张纸开始打印。
打印份数打印设置里可以修正,不过很难用程序掌握打印份数。可以曲线实现,在打印的时候,直接把内容重复N遍再打印一份出来的便是N份了。
时期变得真快,现在的IE都已经退出了历史舞台。新框架一个接一个冒出来,老系统里的这些老代码,不知道什么时候会消逝。