• WEB打印:目前的几种方式及我们的任务[转]


           B/S平台下的MIS软件,打印是不可缺少的功能,好的报表输出,能让你的产品在用户的心中增加不少的分量。但是打印模块所花的时间也是非常的多的。其实现方式有如下几种:
      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文件的免费组件很多,不用另外花钱。效果也很好。

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

      看了这么几种方案,都不适合我们使用。还是毛主席老人家讲得好,“自己动手,丰衣足食”,看来得自己动手写一个IE客户端打印组件了,他实现如下功能:

      1、 可以用js控制页边距、纸张大小、页眉页脚、横向纵向等。
      2、 可以用js控制打印内容。

      找了几天的资料,终于找到了2篇好文:《Beyond Print Preview: Print Customization for Internet Explorer 5.5》、《Print Preview 2: The Continuing Adventures of Internet Explorer 5.5 Print Customization》。看了半天,终于摸出了一点头绪,在那个Sample的基础上改了改,做了个ActiveX,现供朋友们使用。可以用js控制页边距,设置当前打印的URL,至于纸张大小,页眉页脚等功能,容我实现后再提供给朋友们使用。至于源码,因涉及公司机密,所以……请朋友们见谅。

      使用方法:
      1、首先在被打印页面中包含如下语句:

    <OBJECT ID="DLPrinter" CLASSID="CLSID:5C230622-45E5-4e3c-893C-3BFDDC4DB5E4" height="0" width="0" codebase="DLPrinter.CAB" ></OBJECT>

      2、打印预览:<input type="button" id="btnPrint" value="Print Preview" onclick="DLPrinter.PrintPreview()" />

      3、设置页边距:

      DLPrinter.MarginLeft=20; //这是毫米制的
      DLPrinter.MarginRight=20;
      DLPrinter.MarginTop=20;
      DLPrinter.MarginBottom=20;

      4、不打印当前页面而是另外一个页面:
    DLPrinter.ContentURL="http://www.cnblogs.com/Yahong111/archive/2007/09/19/898326.html";
  • 相关阅读:
    Java实现OPC通信
    OPCServer:使用KEPServer
    OPCServer:使用Matrikon OPC Server Simulation
    OPC和DCOM配置
    jquery中attr和prop的区别
    jquery 操作checkbox是否选中的正确方法
    GPRS RTU设备OPC Server接口C# 实现
    Raspberry Pi 中安装Mono
    C#中DllImport用法汇总
    HTML <form> 标签的 method 属性
  • 原文地址:https://www.cnblogs.com/witer666/p/920192.html
Copyright © 2020-2023  润新知