做过许多 的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

Web打印的处理 方案之普通报表打印的更多相关文章

  1. RDIFramework.NET ━ Web中打印的各种方案参考-欢迎补充

    RDIFramework.NET ━ Web中打印的各种方案参考-欢迎补充 做Web开发的同志应该都深有体会,在web程序中打印不再象应用程序中那样便于控制了,web程序天生的一些特性造成了这个缺点, ...

  2. 大数据量报表APPLET打印分页传输方案

     1 . 问题概述 当报表运算完成时,客户端经常需要调用润乾自带的runqianReport4Applet.jar来完成打印操作, 然而数据量比较大的时候,会导致无法加载完成,直至applet内存 ...

  3. 在DevExpress程序中使用条形码二维码控件,以及进行报表打印处理

    在很多业务系统里面,越来越多涉及到条形码.二维码的应用了,不管在Web界面还是WInform界面都需要处理很多物料相关的操作,甚至很多企业为了减少录入错误操作,为每个设备进行条形码.二维码的标签,直接 ...

  4. Atitit.office word  excel  ppt pdf 的web在线预览方案与html转换方案 attilax 总结

    Atitit.office word  excel  ppt pdf 的web在线预览方案与html转换方案 attilax 总结 1. office word  excel pdf 的web预览要求 ...

  5. openerp模块收藏 基于Lodop的报表打印模块(转载)

    基于Lodop的报表打印模块 原文:http://shine-it.net/index.php/topic,7397.0.html 前段时间写了个小模块,来解决OE中报表打印不方便的问题.借鉴了 @b ...

  6. 使用POI实现报表打印功能

    [版权申明:本文系作者原创,转载请注明出处] 文章出处:http://blog.csdn.net/sdksdk0/article/details/53393453 作者:朱培 ID:sdksdk0 这 ...

  7. 关闭rdlc报表打印预览后,关闭客户端,抛出异常“发生了应用程序级的异常 将退出”

    问题:关闭rdlc报表打印预览后,关闭客户端,抛出异常“发生了应用程序级的异常 将退出” 办法:在容纳ReportViewer的窗体后台代码中,添加如下代码即可 protected override ...

  8. JS调用水晶报表打印翻页按钮事件

    默认的水晶报表打印按钮.翻页按钮太小,并且样式不好调整,考虑自己做一个按钮,然后调用水晶报表的按钮事件. 在实际操作中发现可以在.net按钮的服务器端事件中调用翻页方法: CrystalReportV ...

  9. atitit.web 推送实现方案集合(2)---百度云,jpush 极光推送 ,个推的选型比较.o99

    atitit.web 推送实现方案集合(2)---百度云,jpush 极光推送 ,个推的选型比较.o99 1.1. 云推送有推送次数或频率的限制吗? 1 1.2. 推送的消息长度 1 1.3. 离线消 ...

随机推荐

  1. TIJ读书笔记01-操作符

      TIJ读书笔记01-操作符 概述 关系操作符和逻辑操作符 位操作符 类型转换 概述 操作符 操作符接受一个或多个参数,并生成一个新值. 换句话说操作符作用于操作数,生成一个新值.有些操作符会改变操 ...

  2. 【HackerRank】The Love-Letter Mystery

    James找到了他的朋友Harry要给女朋友的情书.James很爱恶作剧,所以他决定要胡搞一下.他把信中的每个单字都变成了回文.对任何给定的字符串,他可以减少其中任何一个字符的值,例如'd'可以变成' ...

  3. 把Android原生的View渲染到OpenGL Texture

    http://blog.csdn.net/u010949962/article/details/41865777 最近要把Android 原生的View渲染到OpenGL GLSurfaceView中 ...

  4. Python绿色版

    Python 安装的时候,有个选项,是问你要安装给所有用户还是只安装给当前用户,你只要选择当前用户,就会把那些需要的 dll ,包括 msvcr90.dll 都给装到 Python 目录下,你只要把 ...

  5. 恢复性训练day1

    DP: 0/1背包一个常见的错误是没有cmax(f[i][j],f[i-1][j]) 0/1背包的拓展中有转移式的变形,以及无限数量背包,分组背包等. 可化为背包问题的一般不会太难. 数组开小,出现大 ...

  6. PHP的异常处理、错误的抛出及错误回调函数

    一.错误.异常和等级常量表 error:不能再编译期发现运行期的错误,不如试图echo输出一个未赋值的变量,这类问题往往导致程序或逻辑无法继续下去而需要中断. exception:程序执行过程中出现意 ...

  7. block(data block,directory block)、inode、块位图、inode位图和super block概念详解【转】

    本文转载自:https://blog.csdn.net/jhndiuowehu/article/details/50788287 一.基本概念:      1.block:文件系统中存储数据的最小单元 ...

  8. div css 练习2

    index.html <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-eq ...

  9. Apache虚拟主机配置模板

    /////////////////////////////////写在前头////////////////////////////////////////1.Apache HTTP 服务器2.4文档: ...

  10. Codeforces 893E Counting Arrays:dp + 线性筛 + 分解质因数 + 组合数结论

    题目链接:http://codeforces.com/problemset/problem/893/E 题意: 共q组数据(q <= 10^5),每组数据给定x,y(x,y <= 10^6 ...