在常见的windows下我们可以找到很多打印服表工具,像Grid++等(新版本的可能也已支持web打印),这些工具在winForm程序下可以正常的运行,在B/S下就会出现这样或者那样的问题。我从网上搜了很多B/S架构下打印的方法,比如 startx,jatoolsprinter等控件,这些控件对于我们一般的打印也就够了,但是对于程序自动设置特殊纸张,程序自动设置页眉页脚等功能,我们还是无能无力。
学6Gz网58v页w7f6U网(http://www.xwangye.com)
于是促使我想研究一下关于浏览器打印的机制问题,并开发一个合适的打印dll控件。
学6Gz网58v页w7f6U网(http://www.xwangye.com)
首先咱们先说一下我们常见的打印方法。
学6Gz网58v页w7f6U网(http://www.xwangye.com)
1.直接使用window.print()方法
学6Gz网58v页w7f6U网(http://www.xwangye.com)
此种方法简单异常,直接把网页打印出来。但是对于一些打印控制等内容制作的不太好。
学6Gz网58v页w7f6U网(http://www.xwangye.com)
2.使用WebBrowser控件实现打印
学6Gz网58v页w7f6U网(http://www.xwangye.com)
此种方法相对于第一种来说,我们可控制的功能更多,灵活性要比第一种好;并且该控件是IE内置,不需要下载(但是要使用好像还是要修改一个IE的安全属性的)。但是与我们特殊的要求还是有一定的差距。
学6Gz网58v页w7f6U网(http://www.xwangye.com)
关于这个打印控件的使用方法如下:
学6Gz网58v页w7f6U网(http://www.xwangye.com)
(1)引用到页面:
| 以下是示例代码: <object id="WebBrowser" classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height="0" width="0"></object> |
学6Gz网58v页w7f6U网(http://www.xwangye.com)
(2)打印方法的调用
学6Gz网58v页w7f6U网(http://www.xwangye.com)
document.all.WebBrowser.ExecWB(6,6) 直接打印
document.all.WebBrowser.ExecWB(8,1) 页面设置
document.all.WebBrowser.ExecWB(7,1) 打印预览
学6Gz网58v页w7f6U网(http://www.xwangye.com)
(3)关于页面内容的隐藏
学6Gz网58v页w7f6U网(http://www.xwangye.com)
CSS 有个Media 属性,可以分开设置打印和显示的格式。
如 <style media="print" type="text/css"> …</style> 中间的格式将只在打印时起作用,不会影响显示界面。
所以可以设定以下代码
| 以下是示例代码: <style media="print" type="text/css"> .Noprint{display:none;} .PageNext{page-break-after: always;} </style> |
学6Gz网58v页w7f6U网(http://www.xwangye.com)
此种代码也无法通过程序设置纸张的大小,只能通过手动在页面设置里修改。
学6Gz网58v页w7f6U网(http://www.xwangye.com)
3.使用第三方控件
学6Gz网58v页w7f6U网(http://www.xwangye.com)
这类代码使用起来对我们相对要自由的很多,但是对于我来说还是有些不适合的,呵呵。
学6Gz网58v页w7f6U网(http://www.xwangye.com)
这类控件我没有怎么研究过,于是我也不再此介绍啦。以后的文章我将主要介绍关于IE打印机制的问题。
学6Gz网58v页w7f6U网(http://www.xwangye.com)

当前 位置: 
