看了一位仁兄关于web打印的总结后很有感触,也把自己web打印的经历晒出来和大家分享一下。
随着bs系统的日趋流行,客户习惯性的思维是希望在cs系统里比较熟悉,灵活的功能出现在bs系统里。我们在开发bs系统的时候从需求到设计到开发时刻考虑客户的使用习惯和感受,打印部分也不例外。
1.使用IE自带的打印功能
如果客户对系统的打印要求不高的时候客户建议客户使用IE自带的打印可以设置打印纸张,尺寸边距等。
由于使用IE自带的打印功能时客户需要手动设置打印纸张等参数,系统不能将打印页面的IE菜单隐藏起来。很多的B/S系统也了方便控制业务流程和解决访问权限的问题会把IE的菜单栏地址栏都隐藏起来,这个时候如果想使用IE的打印功能最好的解决办法就是在原来系统的IE页面的基础上打开一个可是手动设置打印参数的IE的打印模态框。
使用这种方式来打印报表单据只有手写HTML代码,当然有人有过这种经历:把word文档用IE打开再另存为*.html文件的时候相应的文档已经有了HTML代码,然后拿着这些代码再去开发我们自己的东西不是容易很多了。是现在office的功能越来越强大,这也是一个办法,尤其是在现在的office盛行的世界里,客户在上系统前基本上都会使用word,excel等来记录文档。但是我们的系统里如果用来这样的代码,当时是省事了,但是会给后期的调整显示格式带来很大的麻烦,因为这样生成的HTML文档有很多的冗余代码,所以请在使用前做一个考虑。
优点:无需自己写代码,操作方便,免费
缺点:打印功能简单,遇到复杂的打印难以应付(如表头斜线,图表等)。
2.使用crystal report
优点:功能强大同时支持C/S和B/S系统,能够支持复杂的报表,图表等。
缺点:部署和版权都是问题。
3.SQL自带的Report Sevice
优点:由于是微软自己的产品好处多多,首先是费用问题,如果买了SQL就无需再多花银子就可以免费使用此软件。使用模式和微软的软件相同,易学易用。.net framework有相应的类库支持,能方便的和系统结合,也能很好的和其他微软产品整合。在报表的权限方面和windows的域用户结合。打印功能相对来讲算比较强大的。
缺点:报表必须导出后才能打印。
4.IE内置打印组件WebBrowser
不需下载,限制IE6.2600以上
示例
<OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WebBrowser width=0></OBJECT>
<input name=Button onClick=document.all.WebBrowser.ExecWB(1,1) type=button value=打开>
<input name=Button onClick=document.all.WebBrowser.ExecWB(2,1) type=button value=关闭所有>
<input name=Button onClick=document.all.WebBrowser.ExecWB(4,1) type=button value=另存为>
<input name=Button onClick=document.all.WebBrowser.ExecWB(6,1) type=button value=打印>
<input name=Button onClick=document.all.WebBrowser.ExecWB(6,6) type=button value=直接打印>
<input name=Button onClick=document.all.WebBrowser.ExecWB(7,1) type=button value=打印预览>
<input name=Button onClick=document.all.WebBrowser.ExecWB(8,1) type=button value=页面设置>
<input name=Button onClick=document.all.WebBrowser.ExecWB(10,1) type=button value=属性>
<input name=Button onClick=document.all.WebBrowser.ExecWB(17,1) type=button value=全选>
<input name=Button onClick=document.all.WebBrowser.ExecWB(22,1) type=button value=刷新>
<input name=Button onClick=document.all.WebBrowser.ExecWB(45,1) type=button value=关闭>
页面控制功能:页面设置,比如页边距、页眉、页脚等几乎没有,需要用IE自带的,但是如果想设置还是有办法的就是修改注册表,请参看下面的内容
下面是 Microsoft Internet Explorer 访问打印设置的方式:
对于页边距,Microsoft Internet Explorer 首先尝试从以下注册表项中获取值:
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\PageSetup
如果没有此项,Internet Explorer 将通过从以下注册表项中复制值来创建此项:
HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\PageSetup
如果没有此项,将提供默认值。
对于页眉和页脚,将从以下项中获取值:
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\PageSetup
如果没有此项,将提供默认值。
页边距的默认值是 0.75,
对于 Internet Explorer 默认打印机,默认值将从以下项提供:
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\PageSetup\printer
开发人员可以相应地更改用于打印设置的上述注册表项。
请注意,这些值作用于整个系统,影响着当前用户的 WebBrowser 控件和 Internet Explorer 的所有实例。
.NET Framework 2.0 版中是新增的WebBrowser 类
新的WebBrowser 控件,可以在 Windows 窗体应用程序中承载网页。可以使用 WebBrowser 控件来在应用程序中提供基于 HTML 的集成化帮助或 Web 浏览功能。另外,可以使用 WebBrowser 控件将现有的 Web 应用
程序转换为将 DHTML 代码与 Windows 窗体的用户界面功能无缝集成在一起的客户端应用程序
5.ScriptX打印控件
ScriptX.cab:需要下载,免费版本限制IE5.5以上
下载ScriptX.cab控件,修改codebase的值,默认下面的设置也可以。
页面加载控件:
<object id="factory" style="display:none" classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814" codebase="../ScriptX.cab#Version=6,1,432,1"></object>
控件使用教本:
<script defer>
function SetPrintSettings() {
// -- advanced features ,未曾使用过,有待确认。
factory.printing.SetMarginMeasure(2) // measure margins in inches
factory.SetPageRange(false, 1, 3) // need pages from 1 to 3
factory.printing.printer = ""
factory.printing.copies = 2
factory.printing.collate = true
factory.printing.paperSize = "A4"
factory.printing.paperSource = "Manual feed"
// -- basic features 使用过
factory.printing.header = ""
factory.printing.footer = ""
factory.printing.portrait = false //方向,true为竖向
factory.printing.leftMargin = 1.0
factory.printing.topMargin = 1.0
factory.printing.rightMargin = 1.0
factory.printing.bottomMargin = 1.0
factory.printing.Print(false) //直接打印,true ,好像不起作用,总是弹出选择打印机窗口
factory.printing.PageSetup() //打印设置
factory.printing.Preview() //打印预览
}
</script>
总体说来使用方便,但是需要在使用这个控件的机器作设置,并且免费的版本功能不是很多,只能满足一般需求。