相关文章
更多最近更新
更多基于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")问题[2022-05-30]
Exec不一定会有黑窗口弹出来的,看你运行什么命令。 Dim WshShell, oExec Set WshShell = CreateObject("WScript.Shell") Set oExec = WshShell.Exec("calc")Run能不能办到,也要看你运行的是什么命令。 -
检查文档并使用.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.
-
如何添加Java的反射本质以打印方法体? 恐怕相当困难。 首先,原始源代码很可能对正在运行的程序不可用。 通常,开发人员不在二进制JAR中包含源代码。 (即使他们这样做,也不能保证他们会成为“真正的”来源。) 通常可以通过将类的FQN转换为字节码文件并使用classes classloader将文件作为资源流加载来获取类的字节码。 但不能保证你以这种方式获得的字节码将与加载的字节码相同。 (有些类加载器出于各种原因与字节码混淆。) 假设你可以得到真正的字节码,最后一步是将它们显示为raw,或者反汇编或反编译 ...
-
你错过了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 2 is ...
-
你可以试试这个。 适用于我。 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 Kil ...
-
我可以在PHP的Linux服务器上运行新的COM(“WScript.Shell”)(Can I run new COM(“WScript.Shell”) on linux servers in PHP)[2020-01-30]
@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 -
这不可能这样做。 我安装了一点实用程序并始终获得最佳功能。 This can not be done this way. I installed little utility and obtained always on top functionality.
-
如果它是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 javascript. Us ...
-
听起来这里有两个潜在的问题来源:1。与启动新流程和让流程访问UNC共享相关的问题2.与权限相关的问题,无论新流程是否用于访问UNC共享 我首先测试#2,检查您的站点是否可以从远程共享中读取文件而不启动新进程。 例如: <% dim filesys, filetxt Const ForReading = 1, ForWriting = 2, ForAppending = 8 Set filesys = CreateObject("Scripting.FileSystemObject") Set filetx ...
-
那么这就是你的解决方案。 如果被调用的程序没有完成,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 probl ...