基于Web的打印方案比较分析(三) 使用WScript.Shell通过编程方式进行复杂的WEB打印

2019-03-28 12:07|来源: 道长A

     上篇文章介绍了如何进行简单的打印和设置,适用与一般的打印要求,如互联网上网站的打印。然而,在我们为政府或企业开发系统时,打印需求较为复杂,一般的打印设置可能满足不了用户需求,特别是为了用户良好的可操作性,不能要求用户在打印时都手工进行打印设置,这时,就需要我们在程序里实现对打印的预设置,用户只需要点击打印就可以了。

  那么如何实现可编程的打印设置呢?有很多种方法,本文将介绍WScript.Shell来进行打印设置。

  使用WScript.Shell,必须要求客户IE允许 Activex进行交互。如果是你开发的系统是针对于特定的用户群,如一个政府单位,或一个企业,那么建议你要求客户将你的系统加入可信任站点。

  从《[AJava原创]WEB打印系列教程之二--使用IE的打印功能进行一般的网页打印》一文中,我们知道,页边距,页眉,页脚是存储在注册表里的。因此,接下来,我们主要是针对注册表进行可编程设置。

请看如下代码。

<title>Ajava.orgWEB打印系列教程</title>  
<script language="JavaScript" type="text/javascript">
//定义注册表位置     
var HKEY_Path="HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\PageSetup\"; 
    
//name的值可为header(页眉),footer(页脚),margin_bottom(下边距),margin_left(左边距),margin_right(右边距),margin_top(上边距)。     
function PageSetup(name,value) {      
    try{      
        var Wsh=new ActiveXObject("WScript.Shell");      
        Wsh.RegWrite(HKEY_Path+name,value);      
        //修改注册表值
    }catch(e){    
        alert('需要运行运行Activex才能进行打印设置。');     
    }      
}      
</script>

上面的代码是本道写的一个简单的函数,它可以对header(页眉),footer(页脚),margin_bottom(下边距),margin_left(左边距),margin_right(右边距),margin_top(上边距)进行设置。

  如果你想对一个要打印的网页通过编程方式进行以上设置,只需要调用PageSetup即可。例如:

<script language="JavaScript" type="text/javascript">          
    PageSetup('header','Ajava.org');       
    PageSetup('footer','Ajava.orgWEB打印系列教程');       
</script>

如果你没有把站点加到可信任站点,那么在执行上面的代码时,可能会弹出一个对话框。如下。

 选择“是”,程序即对打印进行了设置。如果你打开页面设置窗口,你会发现,页眉,页脚,已经被修改了

对于页边距的值,你只需要根据你自己的版面要求进行设置成相关的值就可以了。下面主要讲一下页眉页脚的详细值。
通常我们会在页眉加上网页的标题,在页脚加上页面代码,日期等等,我们该如何设置呢?

  下面就是可供我们使用的一些项目及值。

  键入 要打印

  &w 窗口标题

  &u 网页地址 (URL)

  &d 短日期格式(由“控制面板”中的“区域设置”指定)

  &D 长日期格式(由“控制面板”中的“区域设置”指定)

  &t 由“控制面板”中的“区域设置”指定的时间格式

  &T 24 小时时间格式

  &p 当前页号

  &P 网页总数

  && 单个 & 号 (&)

  &b 紧跟在这些字符之后的文本居中打印。

  &b&b 紧跟在第一个 "&b" 之后的文本居中打印,跟在第二个 "&b" 之后的文本按右对齐方式打印。

  光看这些说明可能有些不直观,我们还是来点例子吧。

<script language="JavaScript" type="text/javascript">          
    PageSetup('header','&b&w&b&D');       
    PageSetup('footer','AJava.org网站出品&b&w&b第&p页,共&P页');       
</script>  

 运行后页眉如下图。

 页脚如下图。

       对于其他的参数都很好理解,这里我只解释一下如何居左,居中,居右。

  要想居中,使用“&b”,紧跟在这些字符之后的文本居中打印。例如“&b教程”,那么“教程”就会居中。

  要想居右,就在居中的后面再加上“&b”。例如“&b教程&b打印系列”,那么“教程”就会居中,打印系列就会居右。

  如果你不想居中,只要居右,“&b&b打印系列”这样就可以了。

  第一个“&b”前面的文字都是居左。

  通过WScript.Shell的使用,我们已经可以通过编程方式进行打印设置了,应该说,普通的打印需求都可以实现了。但是,在日常的打印里,还有一种特色的需求,那就是分页,对于分页打印,我们该如何实现呢?请看下面.

本文链接:领悟书生教程网,转载请注明:转自http://ajava.org,请保留文章的完整。

相关问答

更多

VBA调用CreateObject("WScript.Shell")问题

Exec不一定会有黑窗口弹出来的,看你运行什么命令。 Dim WshShell, oExec Set WshShell = CreateObject("WScript.Shell") Set oExec = WshShell.Exec("calc")Run能不能办到,也要看你运行的是什么命令。

有没有办法使用WScript.Shell启动使用VBScript最小化的程序?(Is there a way to start a program minimized with VBScript using WScript.Shell?)

检查文档并使用.Run方法的第二个参数。 证据: set s = createobject("WScript.Shell") s.run "notepad", 2 开始记事本最小化。 Check the docs and use the second parameter of the .Run method. Evidence: set s = createobject("WScript.Shell") s.run "notepad", 2 starts Notepad minimized.

如何反思地打印方法体?(How do I print the method body reflectively?)

如何添加Java的反射本质以打印方法体? 恐怕相当困难。 首先,原始源代码很可能对正在运行的程序不可用。 通常,开发人员不在二进制JAR中包含源代码。 (即使他们这样做,也不能保证他们会成为“真正的”来源。) 通常可以通过将类的FQN转换为字节码文件并使用classes classloader将文件作为资源流加载来获取类的字节码。 但不能保证你以这种方式获得的字节码将与加载的字节码相同。 (有些类加载器出于各种原因与字节码混淆。) 假设你可以得到真正的字节码,最后一步是将它们显示为raw,或者反汇 ...

使用WScript.shell编写文件(write file using WScript.shell)

你错过了fh一个重要参数。 正确的代码是: var fh = fso.CreateTextFile("d:\\Test.txt", 2, true); 而2是一个字节码,告诉fso写一个文件。 读数值为1,附加值为8。 我想这对你来说很清楚。 You are missing one important parameter in fh. The right code is: var fh = fso.CreateTextFile("d:\\Test.txt", 2, true); whereas ...

vba WScript.Shell使用参数运行.exe文件(vba WScript.Shell run .exe file with parameter)

你可以试试这个。 适用于我。 Const BatchFileName = "P:\Export.bat" 昏暗的wsh作为对象 Set wsh = VBA.CreateObject("WScript.Shell") Dim waitOnReturn As Boolean: waitOnReturn = True Dim windowStyle As Integer: windowStyle = 1 wsh.Run BatchFileName, windowStyle, waitOnReturn ...

我可以在PHP的Linux服务器上运行新的COM(“WScript.Shell”)(Can I run new COM(“WScript.Shell”) on linux servers in PHP)

@Barmar是对的,我使用COM和exec来解决我的问题.COM类只存在于Windows上 @Barmar was right and I used both COM as well as exec for my problem.The COM class only exists on Windows

WScript.Shell始终运行在顶部选项(WScript.Shell Run always on top option)

这不可能这样做。 我安装了一点实用程序并始终获得最佳功能。 This can not be done this way. I installed little utility and obtained always on top functionality.

使用shell命令创建Chrome Web应用程序(Creating a Chrome web application with shell commands)

如果它是Google Chrome扩展程序,那么您可以编写NPAPI插件来调用本机程序。 对于常规网页,我认为不可能从javascript。 使用java applet可能有所帮助。 If it is a google chrome extension, than you can write NPAPI plugin to call native programs. For a regular web page I don't think it is possible from javascrip ...

从ASP脚本使用wscript.shell时无法引用UNC路径?(Unable to reference UNC paths while using wscript.shell from an ASP script?)

听起来这里有两个潜在的问题来源:1。与启动新流程和让流程访问UNC共享相关的问题2.与权限相关的问题,无论新流程是否用于访问UNC共享 我首先测试#2,检查您的站点是否可以从远程共享中读取文件而不启动新进程。 例如: <% dim filesys, filetxt Const ForReading = 1, ForWriting = 2, ForAppending = 8 Set filesys = CreateObject("Scripting.FileSystemObject") Set f ...

Access在WScript.Shell.run上挂起(Access hangs on WScript.Shell.run)

那么这就是你的解决方案。 如果被调用的程序没有完成,Access(或者更确切地说是Shell.Run)将等待它。 等一下 您可以尝试为intWindowStyle传递1而不是0以显示程序窗口。 也许它显示错误。 此命令行的这一部分看起来很奇怪: test RD#"F:\AA\Bicom 5\SimplyTax\Response\STResponse.txt" RD#真的应该是这样的吗? Well sadly i had no luck in finding a solution to this ...