您的位置:首页 > 其它

自己开发基于Web的打印控件,真正免费不是共享

2009-09-02 14:08 323 查看
1.1.0.121 版的控件,更新如下

   SetPrintBackground 已被取消

SetMediaHeader 去掉了两个参数,见被划掉的文字部分

在做项目中发现要用到Web方面的打印,于是从网上搜索了一些相关的web打印控件,有scriptx,jatoolsPrinter等,不过都不是免费的,想想还是自己做的好,毕竟这不是太难的事情。

下载地址:

http://download.csdn.net/source/1625752(不要在这下)

注意:由于csdn上传的资源我自己无法删除,导致后续的控件更新无法及时更新,大家不要去csdn的下载频道下载了,已经有新的版本下载,这次是全开发,真正免费的。以下是链接

如果之前装有旧版的控件,请先卸载再安装新版控件。

用的话可以先装个虚拟打印机smartprint或其它的虚拟打印机

最新下载,以后的更新都在这了,csdn下载资源的停止更新

最新版下载地址,最新版本ver 1.1.0.121

http://www.vdisk.cn/down/index/4478770A2930

如果不能自动安装,请在ie->internet安全设置里设置"下载未签名的activex控件",选择"提示",如图





vWebPrint功能简单介绍如下

控件主要的特点是支持打印方案的保存和读取,批量url直接打印,所有方法属性可以混合组合使用,报表的设计就交给使用者自己了,网上关于css控制的资料不少,在这里我要说下如何设定每页打印固定的表头和表尾。

<TABLE width="100%" border="0">
<THEAD style="display:table-header-group;font-weight:bold">
<TR><TD colspan="5" align="center" >这是每页必打的表头</TD>
</TR>
<TR>
<TD>ID</TD>
<TD>学校</TD>
<TD>地址</TD>
<TD>创建时间</TD>
<TD>操作</TD>
</TR>
</THEAD>
<TR>
<TD>23111</TD>
<TD>南宁二中</TD>
<TD>新民路</TD>
<TD>2009-8-8</TD>
<TD>编辑</TD>
</TR>

<TR>
<TD>23111</TD>
<TD>南宁二中</TD>
<TD>新民路</TD>
<TD>2009-8-8</TD>
<TD>编辑</TD>
</TR>

<TFOOT style="display:table-footer-group;font-weight:bold">
<TR>
<TD colspan="5" align="left" >这里是每页必打的表尾</TD>
</TR>
</TFOOT>

</TABLE>

红色是固定表头,兰色是固定表尾。
有什么BUG及建议请留言。

vWebPrint控件使用手册 ver1.0.0
一 控件安装:vWebPrint是Activex控件, 服务端无运行环境要求,客户端运行环境要求浏览器最好是IE内核的。
由于采用了安全方式编码,IE的高级选项->安全标签中所有的安全级别设置不用变更,使用原来默认即可。
 
第一次浏览打印页面时,浏览器会提示



点击“运行”即可安装完成。
二 使用示例:其他种类的Web打印控件大多都有一个共同问题,就是如果有十张要打印的表单,就得做十个不同的打印页面,如果是30张呢,劳动强度还是蛮大。
本控件集成在Web页面中,通过指定要打印的URL进行打印,因此避免了其他web打印控件的所存在的共同问题,即打印页面只用写一个,URL可以作为参数进行传递到打印页面。。
同时用户可以保存多个打印方案,用户可以随意加载指定的打印方案,而不用每次打印时重新设定。
批量URL打印,用于大量数据打印,比如要打印1000页,可以分解成 http://www.test.com/print_action.do?start_num=1&end_num=100, http://www.test.com/print_action.do?start_num=101&end_num=200 .......等。
支持HTML格式的页眉(需要使用者指定每页打印数据的ID命名规范)等特性,下面是一些常用例子。
 
最简单打印 > 直接打印印
<HTML>
<script>
window.onresize = function(){
webPrn.ResizeWindow(document.body.clientWidth,document.body.clientHeight);
}
function init(){
webPrn.LoadUrl = "http://www.google.com";
webPrn.OpenUrl();
webPrn.PrintWebPage();
webPrn.ResizeWindow(document.body.clientWidth,document.body.clientHeight);
}
</script>
<BODY topmargin="0" leftmargin="0" onload="init();">
<OBJECT id="webPrn" width="100%" height="100%" classid="clsid:C204BA3C-EBEA-454B-BD4E-4F6A73E79CFD" CODEBASE="vWebPrint.CAB#version=1,1,0,31">
<param name="lUser" value="李四"></param>
<param name="lUserNumer" value="30"></param>
<param name="lUserEndDate" value="2008-02-09"></param>
<param name="showToolbar" value="true"></param>
<param name="userId" value="登陆用户的id"></param>
</OBJECT>
</BODY>
</HTML>
 

设置打印参数打印 > 直接打印

<HTML>
<script>
window.onresize = function(){
webPrn.ResizeWindow(document.body.clientWidth,document.body.clientHeight);
}}
function init(){
webPrn.LoadUrl = "http://www.google.com";
webPrn.OpenUrl();
webPrn.SetTopMargin("1.0"); //设置顶边距1.0cm
webPrn.SetOrientation(2); //设置横向打印 1,纵向,2,横向向
//.....等等
webPrn.PrintWebPage();
webPrn.ResizeWindow(document.body.clientWidth,document.body.clientHeight);
}}
</script>
<BODY topmargin="0" leftmargin="0" onload="init();">
<OBJECT id="webPrn" width="100%" height="100%" classid="clsid:C204BA3C-EBEA-454B-BD4E-4F6A73E79CFD" CODEBASE="vWebPrint.CAB#version=1,1,0,31">
<param name="lUser" value="李四"></param>
<param name="lUserNumer" value="30"></param>
<param name="lUserEndDate" value="2008-02-09"></param>
<param name="showToolbar" value="true"></param>
<param name="userId" value="登陆用户的id"></param>

</OBJECT>
</BODY>
</HTML>
批量页面直接打印

<HTML>
<script>
window.onresize = function(){
webPrn.ResizeWindow(document.body.clientWidth,document.body.clientHeight);
}
function init(){
//....可以设置打印机参数
webPrn.LoadBatchUrl = "http://www.baidu.com,http://www.google.com"; //多个url用逗号分开
webPrn.PrintBatchWebPage();
}
</script>
<BODY topmargin="0" leftmargin="0" onload="init();">
<OBJECT id="webPrn" width="100%" height="100%" classid="clsid:C204BA3C-EBEA-454B-BD4E-4F6A73E79CFD" CODEBASE="vWebPrint.CAB#version=1,1,0,31">>
<param name="lUser" value="李四"></param>
<param name="lUserNumer" value="30"></param>
<param name="lUserEndDate" value="2008-02-09"></param>
<param name="showToolbar" value="true"></param>
<param name="userId" value="登陆用户的id"></param>

</OBJECT>
</BODY>
</HTML>
指定要打印的页面对象(只能是Table或Div)

<HTML>
<script>
window.onresize = function(){
webPrn.ResizeWindow(document.body.clientWidth,document.body.clientHeight);
}}
function init(){
//....可以设置打印机参数
webPrn.LoadUrl = "c://TestPrintObjects.html";
webPrn.OpenUrl();
webPrn.SetPrintObjects("yesPrint1,yesPrint2"); //指定要打印的对象,id为yesPrint1和yesPrint2的表格或层,将被打印
//....可以直接打印印
}
</script>
<BODY topmargin="0" leftmargin="0" onload="init();">
<OBJECT id="webPrn" width="100%" height="100%" classid="clsid:C204BA3C-EBEA-454B-BD4E-4F6A73E79CFD" CODEBASE="vWebPrint.CAB#version=1,1,0,31">
<param name="lUser" value="李四"></param>
<param name="lUserNumer" value="30"></param>
<param name="lUserEndDate" value="2008-02-09"></param>
<param name="showToolbar" value="true"></param>
<param name="userId" value="登陆用户的id"></param>

</OBJECT>
</BODY>
</HTML>
指定是否打印底图(一般套打用)

<HTML>
<script>
window.onresize = function(){
webPrn.ResizeWindow(document.body.clientWidth,document.body.clientHeight);
}}
function init(){
//....可以设置打印机参数
webPrn.LoadUrl = "c://TestPrintObjects.html";
webPrn.OpenUrl();
webPrn.SetPrintObjects("yesPrint1,yesPrint2",0,0,"yesBodyObj"); //第三个参数0指定只能在预览时看到底图,打印时无底图,如果值为1,则在预览时无底图,打印时有底图,第四个参数指定底图的id名称
//....可以直接打印印
}
</script>
<BODY topmargin="0" leftmargin="0" onload="init();">
<OBJECT id="webPrn" width="100%" height="100%" classid="clsid:C204BA3C-EBEA-454B-BD4E-4F6A73E79CFD" CODEBASE="vWebPrint.CAB#version=1,1,0,31">
<param name="lUser" value="李四"></param>
<param name="lUserNumer" value="30"></param>
<param name="lUserEndDate" value="2008-02-09"></param>
<param name="showToolbar" value="true"></param>
<param name="userId" value="登陆用户的id"></param>
</OBJECT>
</BODY>
</HTML>
 
 
三 使用参考: 程序员开发参考。

页面控件声明:
<OBJECT id="webPrn" width="100%" height="100%" classid="clsid:C204BA3C-EBEA-454B-BD4E-4F6A73E79CFD" CODEBASE="vWebPrint.CAB#version=1,1,0,31">
<param name="lUser" value="注册人名称"></param>
<param name="lUserNumer" value="授权数,未用"></param>
<param name="lUserEndDate" value="授权结束日期,未用"></param>
<param name="showToolbar" value="是否显示工具条,true或false"></param>
<param name="userId" value="当前登陆者的ID,由业务系统指定"></param>
</OBJECT>

userId可以以以下方式加载,示例
<param name="userId" value="<%=userbean.getId()%>"></param>
以下例子,将以对象webPrn作为示例。
 
属性:名称
描述
Js脚本设置例子
备注
 LoadUrl指定要打开的Url链接。webPrn.LoadUrl = "http://www.google.com"; 
 ShowToolbar指定是否显示工具条,设置值为true或false。webPrn.ShowToolbar = true; 
 LoadBatchUrl指定要打批量打印的页面,多个页面要以逗号分隔。webPrn.LoadBatchUrl = "http://www.baidu.com,http://www.google.com" 
方法:
名称参数描述Js脚本设置例子备注
 OpenDocumentHTMLpHTML,
cssFilePath,
jsFilePath
打印指定的HTML代码
cssFilePath 指定要加载的css文件,要全路径 如 http://192.168.0.22:8088/abc/style.css jsFilePath 指定要加载的js文件,同上要全路径
因为这个方法只是对指定的页面打印innerHTML,一般没有附带css样式,所以增加css文件加载的参数。

 

webPrn.OpenDocumentHTML(document.body.innerHTML);提供了更为灵活的打印方式,可以打印页面任意对象的HTML源。
打印HTML源的另一种方式,不得与LoadUrl混用,LoadUrl属性不要设置,OpenUrl方法不要执行。

SetTopMarginpTop指定纸张上边距,单位cmwebPrn.SetTopMargin("1.0"); 
 SetLeftMarginpLeft指定纸张左边距,单位cmwebPrn.SetLeftMargin("1.0"); 
 SetRightMarginpRight指定纸张右边距,单位cmwebPrn.SetRightMargin("1.0"); 
 SetBottomMarginpBottom指定纸张下边距,单位cmwebPrn.SetBottomMargin("1.0") 
 SetOrientationpOrientation指定打印方向,1纵向,2横向webPrn.SetOrientation(1); 
 SetPaperSizepPaperSize,
[pW],
[pH]
指定纸张类型

当pPaperSize=256时,表明是自定义纸张,需要同时指定pW(纸张宽度cm),pH(纸张高度cm),如果不指定,自定义纸张的宽度默认为22cm,高度14cm。

当pPaperSize<>256时,表明是系统保留纸张,不用指定pW和pH参数。
pPaperSize的值如[附表一]。
webPrn.SetPaperSize(9); //9是A4

webPrn.SetPaperSize(256,15,18); //自定义纸张,宽15cm,高18cm,一般用于套张纸张定义
 
 SetCopiespCopies指定打印份数。webPrn.SetCopies(3); //打印三份 
 SetPaperInfo使所有的打印机设置生效,只有执行本方法,打印机的设置才会生效。webPrn.SetPaperInfo();  
 SetHeaderpHeaderText指定打印页眉,见[附表二]webPrn.SetHeader("我的页眉"); //设置打印页眉 
 SetFooterpFooterText指定打印页脚,见[附表二]webPrn.SetFooter("我的页脚"); //设置打印页脚 
 ResetDefaultPaperInfo恢复打印机设定,A4纸,纵向,系统默认页眉页脚,份数1张,但不恢复上下左右边距webPrn.ResetDefaultPaperInfo(); 
 OpenUrl在设定了LoadUrl属性后,执行本方法,打开一个待打印的页面webPrn.OpenUrl(); 
 SetMediaHeaderpHeaderText,
pHeaderAlign,
pPageId,
pPageType,
pHeaderHeight
指定带格式的页眉

pHeaderText,页眉文本

pHeaderAlign,页眉位置(left,center,right)

pPageId,打印页中,每页的ID命名规则,如
<div id='page_0'>第一页...</div><p 分页>
<div id='page_1'>第二页...</div><p 分页>
....
这里,pPageId="page",支持模糊匹配,最好命名特别一点,以和其他对象有所区分。

pPageType,打印页中,每页数据的容器对象类型,只能为"TABLE"或"DIV"
本例的 pPageType = "DIV";

pHeaderHeight,页眉的高度,单位px(像素)
webPrn.SetMediaHeader("<font color=red>红色页眉</font>","left","page","DIV","28px");

webPrn.SetMediaHeader("<font color=red>红色页眉</font>","left","28px");

 
 SaveUserPrinterSertupschemeName
返回true或false
以schemeName为名称保存当前用户的打印方案webPrn.SaveUserPrinterSertup("增值票打印方案A3");

webPrn.SaveUserPrinterSertup("一般票打印方案A5");
 
 
 LoadUserPrinterSetup[schemeName]
返回true或false
以schemeName为名称读取当前用户的打印方案webPrn.LoadUserPrinterSetup("增值票打印方案A3");

webPrn.LoadUserPrinterSetup("一般票打印方案A5");

方案名称可以直接指定也可以由控件界面选择
 
 PrintBatchWebPage在设定了LoadBatchUrl属行后,执行本方法,批量直接打印N个待打印的页面。webPrn.PrintBatchWebPage(); 
 PrintWebPage直接打印当前页面webPrn.PrintWebPage(); 
 PrintSetupWebPage打印前进行打印机设置,当然可以取消打印webPrn.PrintSetupWebPage(); 
 PrintView打印预览webPrn.PrintView(); 
 PrintSetup打印设置webPrn.PrintSetup(); 
 PrintStatus检测打印机是否安装webPrn.PrintStatus(); 
 SetPrintObjectspObjs,
[pQueryType],
指定打印的页面对象,只影响TABLE和DIV两种对象

pObjs,要打印对象的ID命名,多个对象用逗号分隔
pQueryType,对象查找方式,0模糊匹配,1精确匹配
 
webPrn.SetPrintObjects("page_0,page_2",1);
//精确匹配,只打印第一页和第三页的table或Div对象

webPrn.SetPrintObjects("page,tab",0);
//模糊匹配,只打印ID名称含有page和tab的table或Div对象
 
 
 SetPrintBackgroundpBgobject,
[pShowType]
套打时,指定页面的底图对象
对象的对应属性要为 background="images/abc.jpg",不能为css样式类,可以设置在body

pBgobject,底图对象ID命名
pShowType,0预览时保留底图,打印时去掉底图
1预览时去掉底图,打印时保留底图(要在IE设置打印时保留底图)
 
webPrn.SetPrintBackground("bodyObj",0);
//底图容器对象ID为,bodyObj,预览时可见底图,打印时去掉底图

webPrn.SetPrintBackground("bodyObj",1);
//底图容器对象ID为,bodyObj,预览时可见底图,打印时去掉底图

如 <body id="bodyObj" background="abc.jpg">

<div id="bodyObj" background="abc.jpg">

<table id="bodyObj" background="abc.jpg">
 
 
附表一:
纸张类型定义,具体支持类型根据当时打印机。
注意 对象此属性的效果依赖于打印机厂家提供的驱动程序。某些属性设置值可能不起作用,或者一些不同的属性设置值可能有相同的效果。接受范围之外的设置值可能产生也可能不产生错误。详细信息,请参阅厂家具体驱动程序的文档
 1 信笺, 8 1/2 x 11 英寸。
2 +A611 小型信笺, 8 1/2 x 11 英寸。
3 小型报, 11 x 17 英寸。
4 分类帐, 17 x 11 英寸。
5 法律文件, 8 1/2 x 14 英寸。
6 声明书,5 1/2 x 8 1/2 英寸。
7 行政文件,7 1/2 x 10 1/2 英寸。
8 A3, 297 x 420 毫米
9 A4, 210 x 297 毫米
10 A4小号, 210 x 297 毫米
11 A5, 148 x 210 毫米
12 B4, 250 x 354 毫米
13 B5, 182 x 257 毫米
14 对开本, 8 1/2 x 13 英寸。
15 四开本, 215 x 275 毫米。
16 10 x 14 英寸。
17 11 x 17 英寸。
18 便条,8 1/2 x 11 英寸。
19 #9 信封, 3 7/8 x 8 7/8 英寸。
20 #10 信封, 4 1/8 x 9 1/2 英寸。
21 #11 信封, 4 1/2 x 10 3/8 英寸。
22 #12 信封, 4 1/2 x 11 英寸。
23 #14 信封, 5 x 11 1/2 英寸。
24 C 尺寸工作单
25 D 尺寸工作单
26 E 尺寸工作单
27 DL 型信封, 110 x 220 毫米
29 C3 型信封, 324 x 458 毫米
30 C4 型信封, 229 x 324 毫米
28 C5 型信封, 162 x 229 毫米
31 C6 型信封, 114 x 162 毫米
32 C65 型信封,114 x 229 毫米
33 B4 型信封, 250 x 353 毫米
34 B5 型信封,176 x 250 毫米
35 B6 型信封, 176 x 125 毫米
36 信封, 110 x 230 毫米
37 信封大王, 3 7/8 x 7 1/2 英寸。
38 信封, 3 5/8 x 6 1/2 英寸。
39 U.S. 标准复写簿, 14 7/8 x 11 英寸。
40 德国标准复写簿, 8 1/2 x 12 英寸。
41 德国法律复写簿, 8 1/2 x 13 英寸。
256 用户定义
附表二:
页眉页脚系统保留定义及说明
 &w 窗口标题
&u 网页地址 (URL)
&d 短日期格式(由“控制面板”中的“区域设置”指定)
&D 长日期格式(由“控制面板”中的“区域设置”指定)
&t 由“控制面板”中的“区域设置”指定的时间格式
&T 24 小时时间格式
&p 当前页号
&P 网页总数
&& 单个 & 号 (&)
&b 紧跟在这些字符之后的文本居中打印。
&b&b 紧跟在第一个 "&b" 之后的文本居中打印,跟在第二个 "&b" 之后的文本按右对齐方式打印。
说明:所有方法和属性都可以混合使用,可以直接打印Url,也可以通过控件打印,使用时注意先后顺序就可以了:1打开文档,2设置打印机参数,3使打印机设置生效,4设置其他页面属性,5打印
vWebPrint打印控件 Pengwei拥有版权,联系QQ:121310959
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: