asp.net 打印控件使用方法_weixin_34064653的博客-程序员宅基地

技术标签: ViewUI  测试  javascript  

打印的效果及控制性虽然不是很好,但是也能勉强使用,应付一般的打印还是 可以的了。
代码如下所示: 
代码 

  复制代码 代码如下:

//调用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==null||preview==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==null||preview==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); 
} 

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

采用此种方法,不需要安装任何控件,具有很好的兼容优势,不过出来的报表内容,好像控制起来会比较麻烦一些,特别对于一些报表方面的打印,需要输出复杂的内容是,也有一定的缺陷,但总体来说,也是一个较好的选择。

  后来在需要做一些证件套打方面的工作,这个控件就做不到了,因此需要一种方法或者控件,能够较好处理套打方面的事情。

  无意间,发现一个比较好的打印控件,支持各种格式的打印,还有我关心的证件套打功能,功能强大,使用也很简单的,非常值得推荐。

  控件的相关地址:

  控件下载

  控件博客介绍:

  应用这个控件,普通报表的打印效果如下所示:

上面两个报表的打印其实都差不多,都是打印部分的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/687480.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34064653/article/details/85731577

智能推荐

【Node.js】 简介,入门案例,启动服务器、操作数据库功能的实现_Zhou_LC的博客-程序员宅基地

什么是Node.js介绍简单的说 Node.js 就是运行在服务端的 JavaScript。Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。Node.js是一个事件驱动I/O服务端 JavaScript 环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。两部分使用者【前端程序员】:不懂得像PHP、Python或Ruby等动态编程语言,但又想创建自己的服务,那么可用 Node.js 。由于 Node.

如何在 PyFlink 1.10 中自定义 Python UDF?_阿里云云栖号的博客-程序员宅基地

我们知道 PyFlink 是在 Apache Flink 1.9 版新增的,那么在 Apache Flink 1.10 中 Python UDF 功能支持的速度是否能够满足用户的急切需求呢?Python UDF 的发展趋势直观的判断,PyFlink Python UDF 的功能也可以如上图一样能够迅速从幼苗变成大树,为啥有此判断,请继续往下看…Flink on Beam我们都知...

android 监听 自身卸载,Android Monitor Package uninstall Event 监听卸载事件_小小甜饼的博客-程序员宅基地

两种方法1、代码1, Define a class extends BroadcastReceiver;2, Register broadcast receiver;UninstallApp receiver = new UninstallApp();IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_INSTALL);filt...

中国非正常死亡最高的行业 TOP 10_weixin_34342578的博客-程序员宅基地

1月2日晚,佟大为等艺人、业内人士及小马奔腾集团员工纷纷在朋友圈或微博上发布消息,小马奔腾集团董事长李明因心肌梗塞于当晚去世,年仅47岁。 这再次将创业者和职场人士健康问题推到了公众面前,而就在去年中奥美24岁员工猝死,死因和加班直接相关;搜狐公司17173一员工猝死……常语“生死有 命,富贵在天”,但如果他们的工作不那么紧张……可惜没有如果。i黑马总...

详解html标签meta的用法_Panda_Joy的博客-程序员宅基地

meta  meta是html语言head区的一个辅助性标签。几乎所有的网页里,我们可以看到类似下面这段的html代码:  <head>  <meta http-equiv="content-Type" content="text/html; charset=gb2312">  </head>  也许你认为这些代码可有可无。其实如果你能够用好meta标签,会给你带来意想不到的效

spring-集成Junit测试_残忍恶汉!的博客-程序员宅基地

//继承Junit测试,在当前类开启注解功能@RunWith(SpringJUnit4ClassRunner.class)//构建spring工厂@ContextConfiguration(locations = "classpath:applicationContext.xml")public class SpringTest { @Autowired @Qualifi...

随便推点

Go语言中slice在函数传递中的问题_nohysiwe的博客-程序员宅基地_golang slice引用传递

问题描述最初想这个问题是因为官方称 slice, map, 函数, 结构体为引用类型…当时就在想 引用类型 是指C++中 变量引用 一样的意思么,如果一样, 那不就是slice作为函数参数传递时就是像C++中的引用传递一样么, 和Python 也是一样的传递概念么。结果,经过试验,搜索相关的信息, 我发现, 官方的说什么引用类型简直就是坑知道C++的人, 而且我想吐槽下 Go 的设计者在设计这门语言时是不是满脑子想着我一定要与C/C++与众不同!!!!ε=(´ο`*)))唉, 学Go给我一种奇怪的感觉

Win10微信的小意外暴露了年龄_丁劲犇的博客-程序员宅基地

从windows10 的软件商店,安装了微信APP。打开一部鸡汤文,竟然假死了。使劲右键单击任务栏的微信图标,竟然在任务栏首先弹出了这个:没猜错的话,这应该是国内比较流行的 duilib。带有鲜明Windows和Afx风格的命名法,一路从Afx、MFC走来的蒸汽朋克哈!对我这种老猿亲切极了。饶有兴趣的看看,开源中国中给了个例子https://www.oschina.net/code/snip...

GraphicsMagick+im4java 图片处理_luoxuefeihualzq的博客-程序员宅基地

package com.tutu.social.app.action;import java.io.IOException;import org.im4java.core.ConvertCmd;import org.im4java.core.IM4JavaException;import org.im4java.core.IMOperation;import o

SpringBoot+Mybatis+Maven项目搭建详解_回憶是如此忧伤的博客-程序员宅基地

为实现项目的快速高效地开发,采取合适的框架尤为重要。利用SpringBoot+Mybatis框架可以达到快速高效开发的目的。那么如何建立一个这样的项目呢?现在就来看一下实际操作流程:开发工具:Eclipse2018框架:Spring Boot 、Mybatis 、Maven数据库:Mysql5.1项目demo地址:https://download.csdn.net...

《Excel大神上分攻略》学习笔记3——函数求和及常见函数_Oath丶forever的博客-程序员宅基地

前言:本文为本人学习B站向天歌出品系列视频——《Excel大神上分攻略》时的学习笔记,希望通过记录的方式强制自己将内容学会并为了方便将来遗忘而创作函数输入函数名的前几个字母后若要选择Excel联想的函数需使用小键盘的箭头,然后使用TAB键来选择联想的函数相对引用与绝对引用使用可进行绝对引用,可进行绝对引用,可进行绝对引用,位于列前则将列进行绝对引用,行前将行绝对引用例:$A2表示只使用A2这个单元格,2表示只使用A2这个单元格,2表示只使用A2这个单元格,A2表示使用A列,但对应的行则使用.

微信支付遇到的问题_weixin_30407099的博客-程序员宅基地

微信的刷卡支付(反扫码),跟统一下单支付好像不太一样。。微信的统一下单可以成功出来二维码并支付成功回调跳转。但是刷卡支付要提交的参数里没有notity_url,在访问成功后,返回success。但是微信没有扣款,也没有跳转。。先记录。。 还没找到答案。。。------------------------------------------------------...

推荐文章

热门文章

相关标签