`

使用ScriptX控件实现web打印

    博客分类:
  • JSP
阅读更多

使用ScriptX控件实现web打印的功能,网上一抓一大把,我这里就不写怎么用了,就直接说可能碰到的一些问题和解决办法吧。

 

1、使用ScriptX控件进行打印,通常都是在HTML中嵌入:

<OBJECT id="factory" codeBase="redist/smsx.cab#Version=6,3,434,26" height="0" width="0" classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814" viewastext style="display:none"></OBJECT>

使用这种方法第一次打印不会有问题,但是第二次在不刷新的情况下再次打印会报错:浏览器只允许运行一个ScriptX控件 。

 

因此可以考虑:

a、页面初始化时HTML中不嵌入Object标签,也就是不添加打印功能;

b、打击“打印”或“打印预览”时再使用JS添加Object标签,然后进行打印或打印预览;

c、打印完成了再使用JS移除掉Object,保证每次都只有一个ScriptX控件在运行。

注意点:

打印过程我们没法控制,因此我们也没法(或者说并不是每次都能精准地)精准地移除Object控件,若不能成功移除第二次打印时就可能还是会出现上面说的问题。

这时可以将smsx.cab控件安装一下,然后再修改注册表。如何操作各位百度吧!

 

2、在IE8中点击了“打印”或“打印预览”之后没有任何效果:

要想使用ScriptX控件进行打印,还得设置一下浏览器的ActiveX控件,主要是两个地方:

a、对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本

b、下载未签名的ActiveX控件

打开IE浏览器,找到“工具”-->“Internet选项”-->“安全”-->“自定义级别”,再找到以上说的两项,设置成“启用”或“提示”,然后再点击“打印”或“打印预览”,此时就会弹出提示问“是否安装”或“是否允许运行”,选择允许,待安装完成再打印就可以了。

注意点:

默认情况下,安全选项卡的“区域设置”中默认选定的是“Internet”,要是这个设置了以上两项还是没有反应,就将“本地Intranet”也设置一下。一版设置到“Internet”和“本地Intranet”再点击时应该就有反应了。

 

3、在打印的时候插入分页符:

在打印的时候,有时候需要强制换页,譬如有一个单子,一式两份,在网页上是展示在一个HTML中的,打印出来自然就是作为一张纸打印的,但是前面说了要一式两份,因此第二份要打印到第二张纸上。这个时候就需要使用page-break-before:always;什么的来进行分页了。

这个page-break主要有三个值:

page-break-before:设置在表格元素之后始终进行分页的分页行为。它可以取值auto/always/avoid/left/right/inherit。(参考:http://www.w3school.com.cn/cssref/pr_print_page-break-before.asp

page-break-after:设置在表格元素之后始终进行分页的分页行为。它可以取值auto/always/avoid/left/right/inherit。(参考:http://www.w3school.com.cn/cssref/pr_print_page-break-after.asp

page-break-inside:设置在表格元素内部避免进行分页的分页行为,它可以取值avoid/auto/inherit。(参考:http://www.w3school.com.cn/cssref/pr_print_page-break-inside.asp

各个值的含义:

描述
auto 如果必要则在元素前/后插入分页符
always 在元素前/后插入分页符。
avoid 避免在元素前/后插入分页符。
left 在元素之前/后足够的分页符,一直到一张空白的左页为止。
right 在元素之前/后足够的分页符,一直到一张空白的右页为止。
inherit 规定应该从父元素继承 page-break-after 属性的设置。

注意点:

a、所有浏览器都支持 page-break-before、page-break-after属性,只有 Opera 浏览器支持 page-break-inside 属性。

b、任何的版本的 Internet Explorer (包括 IE8)都不支持属性值 "left"、"right" 以及 "inherit"。

c、Firefox、Chrome 以及 Safari 不支持属性值 "avoid"、"left" 以及 "right"。

d、这个分页符若是添加在DIV上则没有任何效果,譬如:<divstyle="page-break-before:always;">这样子去打印不会分页。其他的除了table中的标签之外是否有效没有测试过。

table系列的标签对于这个分页符好像支持的特别好,无论是设置在tr上还是table上,都能正常断页。

我这里就是直接在两个DIV之间了table用来实现一式两份的打印功能。

<table cellpadding="0" cellspacing="0" border="0" width="100%" style="page-break-before:always;">
	<tr>
		<td style="border:none;">&nbsp;</td>
	</tr>
</table>

 

4、打印的时候没有背景色:

这个背景色是需要设置的,默认情况下web的打印时没有背景色的。设置主要有两个地方:

a、打开IE浏览器,找到“工具”-->“Internet选项”-->“高级”,找到“打印背景颜色和图像”,然后勾选,如图:

b、设置了上面的功能之后,预览情况下还是没有背景色,这个时候还需要设置一下“页面设置”。在“打印预览”页面有个“页面设置”,打开它,找到“打印背景颜色和图像”,“确定”之后可以看到预览区有背景色的都显示出来了。

至此,打印背景色看似没有问题了,实际上它还有一个问题:我总不能每次都设置一遍允许打印背景颜色吧。对的,不可能每次都设置,那能不能找个一劳永逸的在打印用到的print_utils.js进行设置呢?

可以设置,在printBase方法中添加:factory.printing.printBackground  = true;允许打印背景色。设置时没错,但是打印的时候会报错:

为什么会这样子呢?因为printBackground的设置时高级应用,是要收费的。而当前用的基本上都是免费的,它只能修改基本设置。

以下是ScriptX控件常用的参数设置:

// -------------------基本功能,可免费使用-----------------------
factory.printing.header = "";//页眉
factory.printing.footer = "";//页脚
factory.printing.SetMarginMeasure(1);//页边距单位,1为毫米,2为英寸

//边距设置,需要注意大部分打印机都不能进行零边距打印,即有一个边距的最小值,一般都是6毫米以上
//设置边距的时候时候如果设置为零,就会自动调整为它的最小边距
factory.printing.leftMargin = 7;//左边距
factory.printing.topMargin = 7;//上边距
factory.printing.rightMargin = 7;//右边距
factory.printing.bottomMargin = 7;//下边距
factory.printing.portrait = true;//是否纵向打印,横向打印为false

//--------------------高级功能---------------------------------------------
factory.printing.printer = "EPSON LQ-1600KIII";//指定使用的打印机
//factory.printing.printer = "\\\\cosa-data\\HPLaserJ";//如为网络打印机,则需要进行字符转义
factory.printing.paperSize = "A4";//指定使用的纸张
factory.printing.paperSource = "Manual feed";//进纸方式,这里是手动进纸
factory.printing.copies = 1;//打印份数
factory.printing.printBackground = false;//是否打印背景图片
factory.printing.SetPageRange(false, 1, 3); //打印1至3页

//---------------------常用函数--------------------------------
factory.printing.Print(false);//无确认打印,true时打印前需进行确认
//factory.printing.Print(false, pageFrame); pageFrame为Iframe或Frame框架名称,只打印框架内容
factory.printing.PrintSetup();//打印设置
factory.printing.Preview();//打印预览
factory.printing.WaitForSpoolingComplete();//等待上一个打印任务完全送入打印池,在连续无确认打印时非常有用
factory.printing.EnumPrinters(index);//枚举已安装的所有打印机,主要用于生成打印机选择功能

 

5、最后附上页面调用打印功能的JS:

/**
 * 打击“打印预览”按钮时触发该事件
 * */
function printpage(){
	$("body").append('<OBJECT id="factory" codeBase="redist/smsx.cab#Version=6,3,434,26" height="0" width="0" classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814" viewastext></OBJECT>');
	var printdiv = document.getElementById("page");
	printdiv.style.overflow="";
	previews();
	printdiv.style.overflow="auto";
	$("#factory").remove();
}

/**
 * 打击“打印”按钮时触发该事件
 * */
function printTures() {
	$("body").append('<OBJECT id="factory" codeBase="redist/smsx.cab#Version=6,3,434,26" height="0" width="0" classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814" viewastext></OBJECT>');
	var printdiv = document.getElementById("page");
	printdiv.style.overflow="";
	printBase();
	document.getElementById("print").style.display = "none";// 隐藏按钮
	factory.printing.Print(false);
	document.getElementById("print").style.display = "block";// 显示按钮
	$("#factory").remove();
}
/**
 * 调用ScriptX控件进行打印预览
 * */
function previews(){
	printBase();
	document.getElementById("print").style.display = "none";// 隐藏按钮
	factory.printing.Preview();
	document.getElementById("print").style.display = "block";// 显示按钮
	$("#factory").remove();
}

附:附件中有打印用到的JS工具包,其中print_utils为横向打印用的JS,print_utils2为竖向打印用的JS。其实两者内容都是一样的,就是printBase方法中的factory.printing.portrait设置不一样,若为true就是纵向打印,false就是横向打印 。

 

希望对大家有所帮助!

  • 大小: 42.9 KB
  • 大小: 30 KB
  • 大小: 30.2 KB
分享到:
评论

相关推荐

    [转]使用ScriptX控件进行Web打印总结

    ScriptX控件是一款由Meadroid公司开发的专业Web打印解决方案,它允许网页开发者在没有打印机驱动的情况下实现高质量的打印功能。这款控件尤其适用于那些希望提供一致、无干扰打印体验的Web应用程序。本文将深入探讨...

    ScriptX控件 Web打印

    ScriptX控件是一款专门用于Web打印的技术解决方案,由Meadroid公司开发,它提供了一种高效、便捷的方式,使得在Web浏览器中实现高质量的打印功能成为可能。此控件允许开发者为网页添加自定义的打印选项,从而克服了...

    scriptx打印控件

    在传统的Web浏览器中,打印功能往往简单且受限,ScriptX控件则弥补了这一不足,使得网页内容可以按照设计者的需求精确地呈现在纸上。 **主要功能与特点:** 1. **高级定制性**:ScriptX允许开发者控制打印的每一个...

    SCRIPTX免费的active控件

    **标题与描述解析** 标题中的"SCRIPTX免费的active控件"指的是ScriptX,这是一个ActiveX控件,专为在Internet Explorer...理解和掌握ScriptX的使用,可以极大地提升Web应用的用户体验,尤其是涉及大量打印需求的场景。

    WEB打印控件scriptx

    1. **跨浏览器支持**:ScriptX控件兼容多种主流浏览器,包括Internet Explorer、Chrome、Firefox、Safari和Edge,确保在各种环境下都能实现一致的打印体验。 2. **精确控制打印**:ScriptX允许开发者对打印内容进行...

    meadco scriptx activex控件安装包.zip

    5. **开发应用**:对于开发者来说,ScriptX控件可以简化Web打印功能的开发,通过JavaScript或者其他服务器端语言调用其API,实现定制化的打印逻辑。 6. **安全性考量**:由于ActiveX控件可能会带来安全风险,用户在...

    ScriptX Web打印控件

    总之,ScriptX Web打印控件通过提供强大的打印功能和灵活的定制选项,极大地提升了Web应用的打印体验,是开发者实现高质量Web打印的得力工具。无论是在网页设计、文档管理还是企业内部流程优化中,ScriptX都能发挥...

    ScriptX web打印控件,支持自定义格式,控件已通过microsoft签名

    4. **安全性和稳定性**:由于通过了Microsoft的签名验证,ScriptX控件在安全性方面得到了保障,避免了潜在的恶意代码风险,同时提高了系统的稳定性。 5. **多种版本选择**:ScriptX提供了不同的版本以适应不同的...

    web打印控件scriptX

    Web打印控件ScriptX是一种专为网页打印设计的技术解决方案,尤其在JavaScript环境下有着广泛的应用。它允许用户通过浏览器直接打印网页内容,而无需借助其他插件或者弹出打印对话框,提高了网页打印的便捷性和用户...

    scriptx打印控件(smsx.cab,smsx.exe)

    ScriptX是由Meadroid公司开发的一款专门用于Web打印的解决方案。它提供了一种在IE和基于Chromium的Edge浏览器中进行高质量、自定义打印的方法。核心组件smsx.cab是一个包含必需DLL和ActiveX控件的压缩文件,而smsx....

    怎么样卸载ScriptX控件

    在Windows环境中,ScriptX控件能够帮助开发者实现网页内容的高质量打印功能,无需用户安装额外的打印驱动。然而,随着时间的推移,用户可能会遇到需要卸载ScriptX控件的情况,可能是为了更新到新版本,或者因为不再...

    web打印设置

    在本文中,我们将深入探讨如何利用ScriptX控件进行Web打印的设置,以及该控件在实际应用中的实例。 ScriptX控件是由Meadroid公司开发的一款专门用于Web打印的ActiveX组件,它提供了高级的打印控制功能,可以解决...

    ScriptX.cab

    ScriptX.cab 是一个压缩文件,它包含了ActiveX控件ScriptX,主要用于实现WEB打印功能。ActiveX技术是由微软开发的一种组件对象模型,允许在Web浏览器中嵌入各种功能控件,ScriptX就是其中之一,专为网页打印提供解决...

    meadco scriptx的activex控件手动安装包.zip

    2. **Meadco ScriptX**:ScriptX是Meadco公司的产品,提供高质量的Web打印解决方案,它能克服浏览器默认打印设置的限制,允许开发者精细控制打印样式和内容。 3. **C#集成ScriptX**:在C#项目中使用ScriptX,开发者...

    scriptx.cab打印控件全功能包

    scriptx打印控件就不用我做介绍了吧 演示地址:需先根据提示安装根证书 http://g.99081.com/netnec/ http://users5.titanichost.com/netnec/scriptx/

    scriptx打印插件

    此插件由Meadow Systems开发,旨在为用户提供简单易用的打印体验,无论是在Windows、Web还是移动平台上,都能实现无缝集成。 在技术层面上,**ScriptX**的核心功能包括: 1. **连续打印**:ScriptX允许用户进行无...

    meadco scriptx的activex控件手动安装包

    它提供了高级的打印功能,使得开发者能够在浏览器环境中实现自定义的打印布局和样式,而不仅仅是简单的网页内容复制。ScriptX 控件适用于 Internet Explorer 和基于 IE 内核的其他浏览器,尤其在那些需要精确控制...

    scriptx smsxweb打印去页眉 页脚

    总结来说,"scriptx smsxweb打印去页眉 页脚"涉及的技术主要是使用ScriptX和SMSXWeb这两个工具来控制Web打印,通过它们提供的API和方法,我们可以精细调整打印设置,包括去除通常由浏览器自动添加的页眉和页脚。...

    关于WEB页面打印的各种资料!ScriptX.cab下载等

    最近做项目实现web页面的打印,本人总结了这几天搜集的资料,希望帮助更多的人,使用ScriptX控件可以完美实现各种套打页面等需求,里面有下载好的最新版本的ScriptX.cab 7,4,0,8文件以及控件安装文件!

Global site tag (gtag.js) - Google Analytics