zoukankan      html  css  js  c++  java
  • 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";
  • 相关阅读:
    一致性哈希算法
    Discourse 的标签(Tag)只能是小写的原因
    JIRA 链接 bitbucket 提示错误 Invalid OAuth credentials
    JIRA 如何连接到云平台的 bitbucket
    Apache Druid 能够支持即席查询
    如何在 Discourse 中配置使用 GitHub 登录和创建用户
    Apache Druid 是什么
    Xshell 如何导入 PuTTYgen 生成的 key
    windows下配置Nginx支持php
    laravel连接数据库提示mysql_connect() :Connection refused...
  • 原文地址:https://www.cnblogs.com/witer666/p/920192.html
Copyright © 2011-2022 走看看