zoukankan      html  css  js  c++  java
  • 2013第39周一Web打印

    2013第39周一Web打印
    项目中遇到了Java Web打印问题,简单调用IE浏览器的打印不能完全满足要求,于是就搜集了Web打印相关的主题,简单汇总一下。web打印难点在分页、页面纸张设置,页眉页脚设置等,感觉ie9本身自带的打印及打印预览功能已基本够用,但低版本ie6下会存在问题;只能调用相关组件来实现,网上有几篇也谈Web打印的文章感觉写的很好,具体做时还可参考。
    常见web打印方案实现如下:

    1、使用Crystal Report等通用报表组件来完成。

    优点:功能强大,对于CS/BS都可以通用,Crystal Report等甚至与还有Report Service等功能,对于业务流程非常复杂的大项目应该是很适合的了。这种项目人手充足,时间充足,资金也充足,老板也重视。(这是个人猜测,因为我没做过大项目^_^)。

    缺点:工作量大,对每一个报表都需要设计模板,这个需要花费不少的时间和精力。我们这种小项目,流程不复杂,Report Service等功能用不上,也不用CS/BS通用,也许将来某个时候需要需要在C/S下用,但还不知道那是什么时候。就是需要控制页边距、纸张大小等,然后把当前界面或者某个报表(很少的情况)打印出来就可以了。另外,我们因为项目小,所以项目成员也少,也就5~6个人,项目的开发周期也短,也就2~3个月,如果还需要抽出人手来专门做报表模板,还真有点紧张。看着兄弟们加班加点,还真不忍心再加大工作量。还有一个最要命的是,这些东西真的贵。资金本来就少,还需要买这些服务,一谈起这个事情,老板总是摇头。

    2、使用IE自带的打印功能,加上CSS的支持。

    优点:不用专人花时间来写打印模板,节省时间,也不要另外花钱,老板很高兴。似乎是一个好的方案。

    缺点:功能太弱小了。不能控制页边距、纸张大小等,更不用说不打印当前界面而是打印另外一个报表了。这样,客户就不高兴了,干嘛非得每次让我自己设置页边距、设置纸张大小、设置页眉页脚等,或者是有些报表根本就没有提供。

    3、使用meadroid等提供的免费客户端打印组件。

    优点:同2

    缺点:meadroid的这个东西很好,可惜只能使用半年。半年之后你必须重新下载,并更改该组件的GUID,真麻烦。如果用户这个时候正好需要打印,那真是臭大了。而且,如果你想避免这种情况的发生,那就请交钱吧,即使是1年的费用好像也不便宜。这样的话,我们似乎又回到了第一个解决方案。当然还有许多其他公司提供的免费组件,但是性质和meadroid公司提供的都差不多,费用有便宜的,也有贵的,总的说来,老板都总是摇头。

    4、使用服务器端生成PDF等文件的方式。

    优点:现在生成PDF文件的免费组件很多,不用另外花钱。效果也很好。

    缺点:学习困难。代码量也非常大。而且,对于我们这种需求多变的小项目,一旦客户的要求变了,那么就必须相应的更改代码。维护的代价真的高。

    常用免费控件如下: 

    1、 DLPrinter

    这个打印控件完全免费,界面还不错,使用也较为简单,支持打印预览、直接打印、可设置页眉、页脚、页边距、打印份数、纸张大小等信息,悲剧的是这大哥在07年做了第二次更新后就没有后续了,导致在我在ie8下测试的时候,bug不断,更不要说现在流行的ie10,可惜了。

    他的博客地址:http://www.cnblogs.com/Yahong111/ 里面有几篇“也谈Web打印”文章写的非常棒,大家可以去学习下。
    2墙外打印控件

    墙外打印控件(QWPrint)是一款小巧的打印辅助软件,能够帮助众多制作B/S类程序的程序员更加灵活的控制客户端打印。

    注意的是这个控件的2.0是收费版【无视】,以它免费版1.3.8.2为例做了测试。有如下功能:

    .小巧轻便,客户端在第一次使用时只要下载一个ActiveX控件即可使用。因为这个控件没有微软的签名,所以做好调整ie安全设置的准备。

    .控制多种打印设置。程序员可以通过控件进行多项设置,包括设置打纸的页边距,页眉页脚,纸张大小等参数。

    .精确控制打印。可以方便实现web下的套打操作。

    .可是它有一个缺点就是无法选择默认打印机,有三、四台打印机的情况下,用户每次打印时必须不断的去选择打印机...这对客户来说是没有办法接受的,所以只好放弃。

    3、楚琳Web打印控件
      楚琳Web打印控件是以C/S架构的报表工具进行B/S架构的报表设计,有如下功能:

      .报表功能强大,报表设计采用FastReport,可以和水晶报表媲美,支持自定义纸张大小,支持直接打印。
      .报表设计高效而简单,和C/S架构下的报表设计效率差不多。
      .方便的中国式报表的设计,可以快速而准确设计出报表中的表格线。
      .支持ASP, ASP.NET, PHP, JSP等多开发语言。
      .支持简体中文、英文、繁体中文等多国语言。
      .免费使用,免费版无功能和时间限制。
    .这个打印控件偏重于报表打印。

    4、 jatoolsPrinter 免费版(强烈推荐):似乎免费版不能商用,没再做具体研究
    国内最早的web打印控件,以前有所谓的破解版,jatoolsP.cab,这个免费版,算是这个版本的升级版,可以完美解决原版本jatoolsP.cab中不支持ie9,ie10的问题,有如下功能:

    .真正免费,不加水印,没有ip或域名限制,不限时间,带微软数字签名,无限发行,兼容ie6+及ie为内核的浏览器。
    .无须注册,下载即用
    .设置纸张类型,如A4、A3等
    .设置纸张方向(横向、纵向)
    .设置页边距
    .设置输出打印机
    .支持手动分页(按div分页);
    .支持直接打印(不显示打印机选择对话框)
    .支持打印份数控制
    来源: <分享几款免费的web打印控件 - 免费web打印控件 - web - ITeye论坛>

    基于web的套打,难度在于要将浏览器中呈现的html,精确地打印到票据中,而且能够实现对分页位置的控制。下面就ie浏览器所能采用的套打解决方案,来个汇总分析,希望对大家有所帮助。

    jatoolsPrinter 是一款实现网页套打的免费工具。该工具的特点是可以直接对web页面进行精确的分页打印,这不仅使“会设计网页就会做网页套打”成为可能,也使项目经理们摆脱了预算紧张的压力。jatoolsPrinter通过在网页中嵌入控件,解决了web客户端精确打印,批量打印,打印配置自动保留等问题。jatoolsPrinter 官方正式免费版,支持ie6+,http://printfree.jatools.com

    功能特点:
    真正免费,不加水印,没有ip或域名限制,不限时间,兼容ie6+
    无须注册,下载即用
    提供经过微软数字签名的cab自动安装包,安装更方便
    长期升级保障,免费论坛支持,让你无后顾之忧
    稳定可靠,启动速度远胜同类产品
    常用功能集于一身,简约而不简单,软件大小只有84k

    本文主要介绍jatoolsPrinter打印控件来完成web的打印功能,这个控件已经把打印功能封装的非常好,主要是把这个控件引入,之后写一些简单的js代码就能完成相应的打印功能。

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title> <!-- 插入打印控件 --> <object id="jatoolsPrinter" classid="CLSID:B43D3361-D075-4BE2-87FE-057188254255" codebase="jatoolsPrinter.cab#version=5,7,0,0"> </object> <script type="text/javascript"> function
    doPrint(how) {
     
     
    //打印文档对象 var
    myDoc = {
                    documents: document,   
    // 打印页面(div)们在本文档中                copyrights: '杰创软件拥有版权  www.jatools.com' // 版权声明必须
                };
     
     
    // 调用打印方法 if (how == '打印预览...'
    )
                    jatoolsPrinter.printPreview(myDoc);  
    // 打印预览
     
     
    else if (how == '打印...'
    )
                    jatoolsPrinter.print(myDoc,
    true);   // 打印前弹出打印设置对话框
     
     
    else                jatoolsPrinter.print(myDoc, false);       // 不弹出对话框打印
            }
     
    </script></head><body> <form id="form1" runat="server"> <div id='page1' style='300px;height:300px;'>
        test
     
    </div> <input type="button" value="打印预览..." onclick="doPrint('打印预览...')"/> <input type="button" value="打印..." onclick="doPrint('打印...')"/> <input type="button" value="打印" onclick="doPrint('打印')"/> </form></body></html>

    主要分几个步骤:

    一、引入打印控件jatoolsPrinter

    <!-- 插入打印控件 --> <object id="jatoolsPrinter" classid="CLSID:B43D3361-D075-4BE2-87FE-057188254255" codebase="jatoolsPrinter.cab#version=5,7,0,0"> </object>

    二、给要打印的div取id名

    image

    三、编写js代码实现打印div的功能

    (注意:在同一页面中,有多个可打印文档,他们可以用page_div_prefix属性来区别page_div_prefix前缀+page+页序号 构成可打印div的id,如前缀为 'report1' ,则找到以 'report1page1'为id的div作为文档首页该属性,默认值为空)

    注意事项:

    1. 控件在打印指定div对象时,如果纸张太小不够打印时,超出部分将被截掉(clip)。
    2. 被指定的div中的内容,可以是html任何可见对象,图片,flash,或文本等等。
    3. 控件打印时,边距可设,不设则取打印机默认值。
    4. div的id必须连续,如果你的div,存在 'page1'、'page2'、'page4',而不存在'page3',则控件只打印前两页,'page4'不会被打印。
    5. div对象在页面中的位置,可以是随意的,比如,page1显示在page2后面,也是合法的。
    6. 指定的div会被打印,没被指定的html元素将不会被打印,比如,本示例中的‘打印’按钮,不会被打印。
    7. copyrights属性是版权信息,必须写。

     

     





  • 相关阅读:
    测试用例设计方法——等价类划分法
    软件测试方法--错误推测法
    测试用例设计方法--因果图法
    测试用例设计方法--判定表法
    测试用例设计方法--边界值分析法
    测试用例设计方法--场景法
    软件测试分类介绍
    软件测试模型
    软件开发过程模型
    m3u8视频流下载方案
  • 原文地址:https://www.cnblogs.com/doit8791/p/3335588.html
Copyright © 2011-2022 走看看