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

时间: 2024-11-17 22:29:22

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

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

RDIFramework.NET ━ Web中打印的各种方案参考-欢迎补充 做Web开发的同志应该都深有体会,在web程序中打印不再象应用程序中那样便于控制了,web程序天生的一些特性造成了这个缺点,如:打印机在本地,而文件确可能在服务器上:格式如何控制和定制等等,都给我们开发中带来了很多问题,当然有了问题就会有人来研究解决,这里我先对目前流行的几种方式做个简单介绍: 一.IE直接打印 这个不用多说,直接调用window.print或者webrower控件的ExecWB方法来打印.方便快捷,客户

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

RDIFramework.NET ━ Web中打印的各种方案参考-欢迎补充 做Web开发的同志应该都深有体会,在web程序中打印不再象应用程序中那样便于控制了,web程序天生的一些特性造成了这个缺点,如:打印机在本地,而文件确可能在服务器上:格式如何控制和定制等等,都给我们开发中带来了很多问题,当然有了问题就会有人来研究解决,这里我先对目前流行的几种方式做个简单介绍: 一.IE直接打印 这个不用多说,直接调用window.print或者webrower控件的ExecWB方法来打印.方便快捷,客户

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

Atitit.office word  excel  ppt pdf 的web在线预览方案与html转换方案 attilax 总结 1. office word  excel pdf 的web预览要求1 1.1. 显示效果要好1 1.2. 可以自定义显示界面1 1.3. 不需要控件,兼容性好1 1.4. 支持编辑操作1 2. 纯html预览解决之道(自由的格式)1 3. 转换swf flash方案2 4. 转换pdf方式..更多的浏览器已经直接支持pdf格式查看2 5. 控件方式2 6. Hyb

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

在很多业务系统里面,越来越多涉及到条形码.二维码的应用了,不管在Web界面还是WInform界面都需要处理很多物料相关的操作,甚至很多企业为了减少录入错误操作,为每个设备进行条形码.二维码的标签,直接在流程中进行扫描处理,仅仅在界面勾选一些处理选项即可,极大提高工作效率,降低出错的几率.本篇随笔介绍如何在基于WInform的DevExpress程序中对条形码.二维码的处理,包括界面展示,报表打印等常规的处理. 1.DevExpress的条形码操作及报表打印 在15.1以上的DevEpxress版

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

atitit.web 推送实现方案集合(2)---百度云,jpush 极光推送 ,个推的选型比较.o99 1.1. 云推送有推送次数或频率的限制吗? 1 1.2. 推送的消息长度 1 1.3. 离线消息的支持 2 1.4. 是否支持转义字符 2 2. 客户端身份识别机制 2 3. 绑定客户端的区别流程::jpush胜出 2 4. 文档风格比较::百度,jpush胜出 3 5. 编程sdk框架比较..个推,百度胜出 3 6. 编程风格的比较 3 6.1. 个推 3 6.2. 百度 4 6.3. J

IReport+JasperReport+Applet报表打印

实现思路: [准备]使用IReport设计并编译报表模版. [服务端]使用JSP完成报表内容填充并获得打印对象. [客户端]使用Applet完成报表打印过程. 这种实现方式需要客户端安装JRE,及打印机驱动. 下面逐步分解: 1.[准备]使用IReport设计并编译报表模版. IReport的安装过程略--. 创建1个简单的报表并编译: 2.[服务端]使用JSP完成报表内容填充并获得打印对象. a.在工程中引入依赖的JAR包,根据报表的组件可能有变化,此处只根据样例报表,引用少数几个. b.编写

atitit.web 推送实现方案集合

atitit.web 推送实现方案集合 1. 俩中模式 Push/Pull 1 2. 须要实现的特性 2 2.1. 推送消息广播. 2 2.2. 推送定向消息. 2 2.3. 提供连接上线前.上线.下线前.下线.发送消息等多种可处理事件. 2 2.4. 消息缓存机制.确保长轮询工作模式下不丢失消息. 2 2.5. client正常下线,服务端可马上感知. 2 2.6. client异常停止工作,服务端可定时检查并感知. 2 2.7. 以注冊通道应用的方式.让开发人员对框架功能进行扩展.实现自己的

VS2013自带报表+打印功能

经过了VB版机房收费系统的学习,相信现在说起报表,我们已经不再觉得陌生.VB打印报表的功能是通过引用第三方控件来实现的,而相对的VS就在VB的基础上完善了这一功能,VS自带报表控件和打印功能,这样就给我们这些编程者带来了很大的方便.下面就将我做程序的一些小经历来跟大家一起分享一下. 1,我们右击U层所在文件夹添加"新建项". 2,在弹出的的添加新建项窗口中找到"reporting",在右面的内容窗口中选中"报表"选项,设置报表的名称. 3,点击确

水晶报表打印

水晶报表打印问题: ReportDocument aReportDocument = new ReportDocument(); //加载报表 aReportDocument.Load(@Application.StartupPath + Properties.Settings.Default.MainReportPath); //子报表数据源 aReportDocument.Subreports["SonRpt.rpt"].SetDataSource(sonDs); //传递参数 a