zoukankan      html  css  js  c++  java
  • web打印总结

    看了一位仁兄关于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>

    总体说来使用方便,但是需要在使用这个控件的机器作设置,并且免费的版本功能不是很多,只能满足一般需求。


  • 相关阅读:
    ExtJS面向对象
    简单理解Ext.DomQuery操作CSS3选择器
    简单理解Ext.extend
    Pycharm去掉项目所有 # 注释
    windows 杀死进程
    mongo官方企业版安装及数据库授权使用
    python中赋值,深拷贝,浅拷贝区别
    测试驱动开发简单理解
    Flask与WSGI
    Python直接改变实例化对象的列表属性的值 导致在flask中接口多次请求报错
  • 原文地址:https://www.cnblogs.com/happlyonline/p/919613.html
Copyright © 2011-2022 走看看