• Web打印的处理 方案之普通报表打印


    做过许多 的Web项目,大多数在打印页面内容的时刻 ,采用的都是议决 Javascript调用系统内置的打印要领 执行 打印,也就是调用 PrintControl.ExecWB(?,?)实现直接打印和打印预览功能。打印的成效 及控制性虽然不是很好,但是也可以 勉强运用 ,应付通常 的打印仍旧 能够 的了。
      代码如下所示:

    //调用PrintControl.ExecWB(?,?)实现直接打印和打印预览功能。(直接用系统提供的print()要领 打印不能 潜藏 某些区域)
    //preview:能不能 显示预览。null/false:不显示,true:显示
    function printPage(preview)
    {
       try
       {
           var content=window.document.body.innerHTML;
           var oricontent=content;
           while(content.indexOf("{$printhide}")>=0) content=content.replace("{$printhide}","style='display:none'");
           if(content.indexOf("ID="PrintControl"")<0) content=content+"<OBJECT ID="PrintControl" WIDTH=0 HEIGHT=0 CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></OBJECT>";
           window.document.body.innerHTML=content;
           //PrintControl.ExecWB(7,1)打印预览,(1,1)打开,(4,1)另存为,(17,1)全选,(10,1)属性,(6,1)打印,(6,6)直接打印,(8,1)页面配置 
           if(preview==nullpreview==false) PrintControl.ExecWB(6,1);
           else PrintControl.ExecWB(7,1); //OLECMDID_PRINT=7; OLECMDEXECOPT_DONTPROMPTUSER=6/OLECMDEXECOPT_PROMPTUSER=1
           window.document.body.innerHTML=oricontent;
       }
       catch(ex){ alert("执行Javascript脚本出错。"); }
    }
    function printConten(preview, html)
    {
       try
       {
           var content=html;
           var oricontent=window.document.body.innerHTML;
           while(content.indexOf("{$printhide}")>=0) content=content.replace("{$printhide}","style='display:none'");
           if(content.indexOf("ID="PrintControl"")<0) content=content+"<OBJECT ID="PrintControl" WIDTH=0 HEIGHT=0 CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></OBJECT>";
           
           window.document.body.innerHTML=content;
           //PrintControl.ExecWB(7,1)打印预览,(1,1)打开,(4,1)另存为,(17,1)全选,(10,1)属性,(6,1)打印,(6,6)直接打印,(8,1)页面配置 
           if(preview==nullpreview==false) PrintControl.ExecWB(6,1);
           else PrintControl.ExecWB(7,1); //OLECMDID_PRINT=7; OLECMDEXECOPT_DONTPROMPTUSER=6/OLECMDEXECOPT_PROMPTUSER=1
           window.document.body.innerHTML=oricontent;
       }
       catch(ex){ alert("执行Javascript脚本出错。"); }
    } 

    上面两个函数放在一个Js文件中,在页面内容中议决 运用 该脚本文件并调用进一步封装的函数即可打印指定部分的内容:

     <script language="javascript">
            function Print(preview)
            {
                var text = document.getElementById("content").innerHTML;
                printConten(preview, text);
            }

    打印的成效 大致如下图所示,假如 打印的页面在框架页面中,那么须要 选定“仅打印选定框架”的选项。

    采用此种要领 ,不须要 安装任何控件,具有很好的兼容优势,不过出来的报表内容,好像控制起来会比较麻烦一些,特别对于一些报表方面的打印,须要 输出庞杂 的内容是,也有必须 的缺陷,但总体来说,也是一个较好的挑选 。
      后来在须要 做一些证件套打方面的工作,这个控件就做不到了,因此须要 一种要领 或者控件,能够较优点 理套打方面的事情。
      无意间,发觉 一个比较好的打印控件,支撑 各种格式的打印,还有我关心的证件套打功能,功能强悍 ,运用 也很基本 的,特别值得推选 。
      控件的相关 地址:
      控件下载主页:
      控件blog 推选 :
      运用 这个控件,普通报表的打印成效 如下所示:

    上面两个报表的打印本来 都差不多,都是打印部分的HTML内容,不过后者看起来要好一点,并且 提供很完备 的报表功能配置 。
      代码大致如下所示。

    <script language="javascript">
            function Print(preview) {
                var text = document.getElementById("content").innerHTML;
                printConten(preview, text);
            }
        </script>
        
        <script language="javascript" src=""></script>
        <object id="LODOP" classid="clsid:2105C259-1E0C-4534-8141-A753534CB4CA" width=0 height=0> </object> 
        <script language="javascript">
            var LODOP = document.getElementById("LODOP"); //这行语句是为了契合 DTD规范
            CheckLodop();
        </script>
        <script language="javascript" type="text/javascript">
            function Preview() {//打印预览
                CreateLicenseData();
                LODOP.SET_SHOW_MODE("PREVIEW_IN_BROWSE", 1);
                LODOP.PREVIEW();
            };
            function Setup() {//打印维护 给用户调整位置
                CreateLicenseData();
                LODOP.PRINT_SETUP();
            };
            function Design() {//打印设计 开发人员配置 内容和位置
                CreateLicenseData();
                LODOP.PRINT_DESIGN();
            };
            function CreateLicenseData() {
                LODOP.PRINT_INIT("查询报表");
                LODOP.ADD_PRINT_HTM(20, 40, 610, 900, document.all("content").innerHTML);
                LODOP.PREVIEW();
            }
        </script>  

    许多 时刻 ,咱们 也没的内容,都是议决 CSS来控制美观的,所以有时刻 ,咱们 打印部分HTML,没有这些样式的话,那么出来的Table格式和字体,可能都会发生改动 ,不太好看。那么就须要 执行 HTML的样式配置 。

    假如 给打印内容配置 了样式,那么出来的界面成效 就好许多 了。

    配置 样式的代码如下所示。

    <script language="javascript" type="text/javascript">
            function Preview() {//打印预览
                CreateLicenseData();
                LODOP.SET_SHOW_MODE("PREVIEW_IN_BROWSE", 1);
                LODOP.PREVIEW();
            };
            function CreateLicenseData() {
                LODOP.PRINT_INIT("申请处理单");
                var strBodyStyle = "<link type='text/css' rel='stylesheet'  /><style><!--table { border:1;background-color: #CBCBCC } td {background-color:#FFFFFE;border: 1; } th { background-color:#F1F1F3;padding-left:5px;border:1}--></style>";
                var strFormHtml = strBodyStyle + "<body>" + document.getElementById("content").innerHTML + "</body>";
                LODOP.ADD_PRINT_HTM(20, 40, 610, 900, strFormHtml);
                LODOP.PREVIEW();
            }
        </script> 

    下一篇继续推选下证件套打的打印功能。

    出处:http://www.educity.cn/develop/1678911.html

  • 相关阅读:
    LINQ to SQL活学活用(2):躲起来别让我看见
    UTF8的問題
    简单的appendChild示例
    LINQ to SQL活学活用(4):监视你的一举一动
    LinQ中的SortBy+sum+count的用法
    ajax的问题
    [综] Canny Edge Detection 代码
    [转] 图像处理中的拉普拉斯算子
    [ZZ] SCI 投稿全过程信件模板一览
    [转] MATLAB图像实用源代码
  • 原文地址:https://www.cnblogs.com/mq0036/p/4587007.html
Copyright © 2020-2023  润新知