张 园
(陕西职业技术学院,西安,710100)
自动化技术在批量打印方面的应用
张 园
(陕西职业技术学院,西安,710100)
办公环境中经常需要打印大量文件。打印过程中需要根据文件格式、幅面大小来调用相关程序、选择打印机并设置打印参数,人工操作耗时耗力。为了解决以上问题,笔者采用AHK脚本语言编写了程序,通过AutoHotKey程序的自动化技术实现了批量打印功能。运行该脚本程序,可以自动打印指定目录下的所有文件。实际应用表明,该脚本程序能够极大地减少重复劳动,提高办公效率。
计算机应用技术;批量打印;自动化技术;AHK;AutoHotKey
办公环境中经常需要打印大量文件,在打印过程中还需要根据不同的文件格式调用相关程序,根据不同的文件幅面大小选择相应的打印机,并设置各种打印参数。例如打印10份A4大小的doc文件、10份A3大小的ppt文件和10份A2大小的pdf文件,需要调用10次Microsoft Word程序、10次Microsoft PowerPoint程序和10次Adobe Acrobat程序,运行30次打印命令,按文件幅面大小分别选择支持A4和A3幅面的小型打印机和支持A2幅面的大幅面打印机,并设置纸张来源等打印参数。以上过程若采取人工操作会非常耗时耗力,造成大量重复性低效率劳动。为进一步提高办公效率,笔者采用AHK脚本语言编写了自动化程序,从而实现了批量打印的功能。
AHK自动化脚本语言是AutoHotKey[1]程序特有的编程语言,适用于自动化编程。AutoHotKey程序是一个Microsoft Windows系统下的免费工具,利用它可以实现如下功能:
1) 几乎所有的键盘发送和鼠标点击操作;2) 创建键盘、游戏手柄、鼠标的快捷键;3) 自动扩展缩写;4) 创建自定义数据表格、用户界面、菜单栏;5) 重新映射键盘、游戏手柄、鼠标的按键;6)通过 WinLIRC 脚本响应手持远程控制信号;7)能够运行 AutoIt v2 脚本;8) 能够将脚本转换成 EXE 执行文件。该执行文件可以在没有安装AutoHotKey的计算机中运行。本文选用AHK脚本语言作为编程语言的主要理由有:第一,AutoHotKey是主流的自动化工具之一;第二,AHK 脚本语言较容易定义快捷键。
为了编写批量打印自动化脚本程序,必须对单独文件打印过程展开相关分析。
1) 首先通过文件名称的后缀判断文件的格式,如:doc.、ppt.、pdf.等。
2) 根据文件格式,运行相关程序,如:doc.格式需要用Microsoft Word 打开,所以需要运行 WINWORD.EXE 程序。
3) 等待程序打开后,加载该文件,如:在Microsoft Word中按Ctrl + O,再输入文件名并加载该文件。
4) 等待文件加载完成后,调用打印功能,如:在 Microsoft Word 中按 Ctrl + P。
5) 根据文件幅面大小选择打印机。此处属于批量打印的重点技术,见下文详述。
6) 根据文件幅面大小和相应打印机,设置打印机参数。见下文详述。
7) 设置程序的打印参数,如:Adobe Acrobat中的打印页面大小。
8) 开始打印。
9) 等待打印完成后,关闭程序。
通过以上分析,就可以利用AHK语言模拟键盘的输入和鼠标的点击,编写出打印单独文件的函数,以便批量打印时调用。
不同格式的文件拥有不同的打印函数,比如打印doc.和打印ppt.需要分别调用PrintDoc()和PrintPPT()函数。
批量打印的流程如下:
1) 运行批量打印脚本。
2) 点击快捷键,调出程序窗口,指定需要打印的目录。
3) 打印指定目录中的所有带有特定扩展名的文件。此处需要调用打印单独文件函数和设置打印机的函数。
4.1 通过快捷键运行脚本程序
AutoHotKey程序的优点在于可以方便地定义快捷键。例如要使用Win + W键来调用脚本程序,可以使用如下脚本:
#w::
;程序主体
……
return
4.2 取得指定目录
通过下列脚本可以获得调出程序窗口,供用户指定需要打印的目录,然后将该目录字符串存储到变量 DocPath 中:
FileSelectFolder, DocPath, , 0
if DocPath =
return
4.3 计算指定目录中带有特定扩展名的文件的数量
通过以下函数可以计算指定目录中带有特定扩展名的文件的数量:
FileNumber(FilePath, FileExt)
{
if FilePath =
return 0
Number := 0
Loop, % FilePath . "" . FileExt
{
Number++
}
return Number
}
FilePath变量为指定目录。FileExt变量为特定扩展名,比如 "*.pdf"。调用函数后返回指定目录中带有特定扩展名的文件的数量。
4.4 打印指定目录中所有特定扩展名的文件
以 pdf 文件为例,可以通过以下脚本打印指定目录中所有pdf文件:
PDFNumber := FileNumber(DocPath, "*.pdf") ;计算指定目录中的 PDF 文件数量
if PDFNumber > 0
{
OpenAcrobat();打开Acrobat程序
Loop, %DocPath%*.pdf ;循环打印所有pdf文件
{
;打开pdf文件
Send ^o
WinWaitActive, 打开
ControlSetText, Edit1, %A_ LoopFileFullPath%, 打开
Send {Enter}
;打印当前pdf文件
PrintAcrobat()
;打印下一个文件
Send ^w
WinWaitNotActive, Adobe Acrobat, ".pdf"
}
;关闭Acorobat程序
Send ^q
WinWaitClose, Adobe Acrobat
}
4.5 获得文件打印幅面大小
文件打印幅面大小影响到打印机的选择。文件的实际幅面大小与打印大小并不一定相同,例如A3幅面的文件可能会被缩小打印成A4幅面大小,因而文件幅面大小需通过人为设定。
为了方便批量打印脚本获得打印幅面大小,所有待打印文件的名称中必须带有幅面大小的关键字。例如要将“Test. doc”打印成A4大小,必须增加“A4”的关键字,将文件名称改为“Test_A4.doc”。同理,“Test_A3.doc”的打印幅面大小是A3,“Test_297x630.pdf”的打印幅面大小是297x630。
利用AHK脚本语言获得文件名称后,就能使用正则表达式过滤得到文件名称中的幅面大小。比如关键字为"297x630",为了得到打印宽度和长度,可以利用如下脚本:
RegExMatch(PrintSize, "(.*)x(.*)", SubPat)
input_width := SubPat1
input_length := SubPat2
其中,PrintSize是文件名称中的关键字,input_width是打印宽度,input_length是打印长度。
4.6 选择打印机
办公环境下,可能同时存在多个打印机,比如1台用于打印A4、A3幅面文件的小型打印机和1台用于打印A2、A1等幅面文件的大幅面打印机。在这种情况下,需要对打印机设置编号,比如设置小型打印机为Printer_One,大幅面打印机为 Printer_ Two。例子如下:
Printer_One = HP LaserJet 5200
Printer_Two = HP Designjet T7100
需要注意的是,Microsoft Office 2007及更新版本程序的控件难以通过AHK进行控制,因此切换默认打印机应该通过调用Microsoft Windows系统命令行的方式来处理。
SetCurrentPrinter(input_printer)
{
Quotation_Printer = "%input_printer%"
run, rundll32 printui.dll`,PrintUIEntry /y /n %Quotation_Printer%
Sleep, 1000
}
当遇到A4、A3幅面文件的时候,调用小型打印机Printer_ One,当遇到其他幅面文件的时候,调用大幅面打印机Printer_ Two。
if PrintSize = A4
SetCurrentPrinter(Printer_One)
else if PrintSize = A3
SetCurrentPrinter(Printer_One)
else
SetCurrentPrinter(Printer_Two)
4.7 设置打印机参数
由于不同的打印机的设置界面是不同的,打印幅面的大小也会影响到打印机的设置,因而必须编写针对性的函数来设置打印机参数。例如对于Printer_One和Printer_Two两个打印机,需要有两个函数SetPrinterOne(PrintSize)和SetPrinterTwo(PrintSize)来设置打印机参数。
对于小型打印机HP LaserJet 5200来说,一般文件幅面为A4时,需要使用纸盒1,文件幅面为A3时,需要使用纸盒2,可以使用如下脚本来实现:
if PrintSize = A4
{
Control, ChooseString, A4, ComboBox2, %Printer_ One%
Control, ChooseString, 纸盒 1, ComboBox3, %Printer_ One%
}
else if PrintSize = A3
{
Control, ChooseString, A3, ComboBox2, %Printer_One%
Control, ChooseString, 纸盒 2, ComboBox3, %Printer_ One%
}
else
{
MsgBox, 小型打印机无法识别的尺寸:%PrintSize%
Exit
}
再举一实例,对于大幅面打印机HP Designjet T7100来说,如果文件幅面不是现有的A2、A1等尺寸,而是"297x630"这种不常见的尺寸,则必须自定义纸张大小。
;设置自定义纸张尺寸
ControlClick, Button5, %Printer_Two%
WinWaitActive, 自定义纸张尺寸
WinActivate, 自定义纸张尺寸
ControlClick, Button3, 自定义纸张尺寸
ControlSetText, Edit1, %output_width%, 自定义纸张尺寸 ;在此处设置纸张宽度
ControlSetText, Edit2, %output_length%, 自定义纸张尺寸 ;在此处设置纸张长度
ControlSetText, Edit3, Custom, 自定义纸张尺寸
;保存自定义纸张尺寸
WinActivate, 自定义纸张尺寸
ControlClick, Button6, 自定义纸张尺寸
;覆盖原始尺寸
Sleep, 500
WinActivate, 警告
ControlClick, Button1, 警告
;退出自定义纸张尺寸的设置
WinActivate, 自定义纸张尺寸
ControlClick, Button8, 自定义纸张尺寸
本文脚本编写完成后,已经通过测试,并用于实际办公环境中,取得了良好的效果。利用批量打印脚本,只需要以下两步就能完成整个目录中所有文件的打印,操作步骤不随文件类型和数量的变化而变化:
1) 点击快捷键。2) 选择打印目录。
其他步骤,例如打开相关程序、打印机的选择、打印机的设置、软件的打印设置等,都由脚本自动完成,不需要人工干预,极大地提升了工作效率。如表1所示,文件数量越多,提升效率就越高,当文件数量为100时,脚本打印提升效率为400倍。
Application of automation technology in batch print area
Zhang Yuan
(Shaanxi Vocational &Technical College,Xi’an,710100)
Printing a large number of files is often needed in the office work.Calling the relevant program, selecting a printer and setting printing parameters are needed in the printing process according to the file format and the size of the print area.The manual operation is time-consuming.In order to solve these problems,the author used the AHK script language to make a program,through the techniques of automation AutoHotKey procedures to achieve the batch print function.Running the script program,all files in the specified directory could be automatically printed.The actual application shows that the script can greatly reduce duplication of effort and enhance the office efficiency.
computer application technology;batch print; automation technology;AHK;AutoHotKey