APP下载

超声探头校准中信息管理自动化的研究

2015-01-29孙景峰刘慧英唐瑞琨

电子设计工程 2015年13期
关键词:光标书签调用

孙景峰,刘慧英,周 新,唐瑞琨,纪 超

(西北工业大学 陕西 西安 710072)

计量工作的最后要根据检定数据出具检定证书,该证书格式相对固定,只是其中的数据、图表等不同,对于重复性的检定工作,每次手工编写证书,既浪费时间又容易出错。因此,自动生成规范准确的Word证书具有重要的应用价值。鉴于检定证书的特殊性,未经允许不得部分复制,若将可编辑的Word文档转换成图片格式,既方便查看又可避免随意更改。概述Word自动化原理的基础之上,在Visual C++2008平台下,导入Word 2010的类库,在程序中调用OLE自动化对象的方法来改变其属性以完成对Word文档的自动化操作。

采用文档模板技术,避免了反复执行相同操作;综合运用书签定位和光标跳转等方法,实现图表、文字并茂的规范检定证书的自动生成,减少了错误率并有效地提高了工作效率。同时利用Microsoft Office提供的虚拟打印机组件,将Word文档转换为TIFF或JPEG等图片格式,实现了文档批量图片化。

1 Word自动化原理概述

1.1 OLE自动化

OLE(Object Linking and Embedding,对象链接与嵌入)自动化是Windows应用程序操纵另一个程序的一种机制。该技术允许在一个程序的内部操控另一个程序所提供的对象,被操控的一端称为自动化服务器或自动化对象,操控的一端称为自动化控制器或自动化客户端。自动化服务器是一个拥有IDispatch接口的特殊组件,自动化控制器通过IDispatch接口可以调用自动化对象的所有方法和属性。以Microsoft Word为例,其自动化模型可简化为如图1所示。

图1 Word自动化模型Fig.1 Model of word automation

1.2 MFC对自动化对象的支持

自动化技术有自己的一套数据类型,在使用自动化对象时必须使用自动化兼容的数据类型[1-2]。自动化对象使用的基本数据类型为VARIANT结构类型,该结构包含两个有意义的域:一是数据的确切类型,二是具体数据或数据指针。MFC对VARIANT数据类型进行封装提供了COleVariant类。对于每一个自动化兼容的数据类型,COleVariant类都有相应的构造函数。需要引起注意的是在使用COleVariant类时[3],很多方法的参数为可选,但不能为空,此时可使用如下的COleVariant对象:

COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);

这个对象的值的确切类型为VT_ERROR,具体值为DISP_E_PARAMNOTFOUND,即被标记为可选参数。更重要的是,MFC也对自动化服务器的IDispatch接口进行了封装,提供了COleDispatchDriver类来处理该接口。编程者只需要定义COleDispatchDriver子类的对象,然后访问该对象的成员函数,改变对象的属性即可完成自动化操作。MFC库封装了所有自动化对象所必需的一些代码,编程者只需把注意力集中在对象的方法和属性上面,不必过多关注自动化对象的参数处理以及调用传递过程。

2 Word自动化功能的实现

2.1 Word中的自动化对象

Word本身提供了对象库(Object Library)文件,在Visual C++2008下,导入Word 2010安装路径下的类库MSWORD.OLB,使之成为VC中可用的类文件,在程序中即可调用Word中相应的OLE对象,如Application对象、Documents对象等[4-6]。每一个对象都有自己的方法和属性,都包含了Word的部分功能。事实上,对Word文档的每一次可视操作都与修改对象有关。为了更有逻辑,更有层次地操作Word,Microsoft把应用(Application)按逻辑功能划分为如图所示的树形结构,构成了Word对象模型。

图2 Word对象的层次结构Fig.2 Hierarchy of word objects

2.2 数据库支持

为了实现检定数据信息的快速录入,在后台维护一个ADO数据库,建立了检定仪器表、制造单位表、检定依据表及检定员表等作为生成检定证书的必要参数,供生成证书时选择,从而避免了每次手工输入。文档模板亦可视为数据库的扩展部分,在程序外部设计好文档风格,充分利用Word手工编辑证书的灵活性,减少代码量,提高了执行效率。

2.3 证书生成实例

以自动生成证书部分为例,介绍在VC中Word的自动化创建和数据填充功能的实现。实例的内容来自于为某公司研发的超声设备自动检定系统,在检定工作的最后,根据检定数据出具检定证书。其原理如图3所示,以下将按照创建顺序给出主要实现步骤。

图3 文档自动生成原理图Fig.3 Schematic diagram of word automation

2.3.1 创建工程,引入类库

创建一个基于对话框的工程,在工程中导入Word类型库,根据需要添加相应接口即生成对应的类,如CApplication类,CDocument0类,CSelection类,CBookmarks类等,再包含相关头文件。

2.3.2 初始化COM库

OLE自动化技术建立在COM基础之上,只是简化了COM的一些底层实现细节。因此,在项目的应用程序类的InitInstance()成员函数中,调用AfxOleInit()函数,完成COM初始化。

2.3.3 创建Word服务并引用模板

要操作Word,首先要创建Word服务,之后再通过Add方法引用模板,即:

wordDocs=wordApp.get_Documents();

COleVariant WordTemplate=_T("D:\检定证书_模板.dot");

wordDoc=wordDocs.Add(&WordTemplate,covOptional,covOptional,covOptional);

2.3.4 填写内容

与手动操作Word一样,先要将光标移动到目标位置,填写的内容才有意义。书签定位法与光标跳转法相结合能达到理想的效果。此处以填写表格内容为例,首先用Selection对象的Goto()方法使光标跳转至指定书签位置,然后采用光标移动的方法,完成表格内容填写工作[7]。

wordSel=wordApp.get_Selection();

wordSel.GoTo (COleVariant((short)wdGoToBookmark),COleVariant((short)0),COleVariant((short)0),

COleVariant(_T("bk_SentBy"))); //转到书签处

wordSel.TypeText(m_strSentBy);//填写送检单位名称

wordSel.MoveDown(COleVariant((short)wdLine),COleVariant((short)1),COleVariant((short)0));

不论是文字录入,表格填写还是图片的插入,都可以采用这种方法实现精准定位。经过以上步骤,即可自动生成规范、美观的证书文档。

2.3.5 运行界面

程序运行界面如图4所示。

图4 程序运行界面Fig.4 Interface of the program

3 文档图片化

检定证书具有法律效力,未经书面许可不得部分复制。将Word版本证书转换为图片格式发布可以防止使用者轻易改变证书内容,对版权保护起到积极作用。

将Word文档手动转换为图片格式的方法较多。文献[8]提出了一种在WPS文字中安装“输出为图片格式”插件的方法,不适合MSWord环境;文献[9]提出了在Word中将文本选择性粘贴为增强型图元文件的方法实现文档图片化,该法一次最多只能转换一页文档;文献[10]提出了借助于第三方虚拟打印技术将文档转换为图片的方法,值得借鉴。综合考虑兼容性、简便程度及能否批量转换等因素,本文采取调用MS Office 2010提供的Microsoft Office Document Image Writer虚拟打印机的方法,将Word文档批量转换为TIFF或JEPG等格式的图片文件。实现流程及核心代码如下。

图5 文档图片化流程图Fig.5 Flow chart of document imaging

1)得到系统默认打印机名称并保存;

PRINTDLG printDlg; //该结构包含了打印对话框中的所有信息

AfxGetApp()->GetPrinterDeviceDefaults(&printDlg);

lpDevMode= (LPDEVMOD)::GlobalLock (printDlg.hDevMode);

strDefualtDev=lpDevMode->dmDeviceName;

2)设定新的默认打印机

::SetDefaultPrinter(_T("Microsoft Office Document Image Writer"));

3)取得默认打印机的属性,根据需要修改属性,如打印分辨率、打印方向等;

调用DocumentProperties()函数设置打印机属性,并用API函数SetPrinter()使更改生效。

4)打印到文件

调用文档的PrintOut方法,其中第一个参数设为False,表示非后台打印,即使关闭word,打印也不会停止;第四个参数为保存路径;第四个参数指定输出文件的路径和文件名;第十一个参数为True,表示打印到文件。

5)还原默认打印设备

::SetDefaultPrinter(strDefualtDev);

6)退出 Word

wordDoc.Close(covFalse,covOptional,covOptional);//关闭文档,不保存

wordApp.Quit(covOptional,covOptional,covOptional);//退出Word

wordDoc.ReleaseDispatch();//断开与Word服务器的关联

wordApp.ReleaseDispatch();

上述方法实现了在不阻塞程序运行的情况下,静默地将Word文档批量转换为多张图片并保存在一个图像文件中,避免了对用户的不良打扰,在保护证书版权的同时,便于证书归档及查看。图6为生成的图片格式证书。为了保证插入文字后格式依然规整,图4中“送检单位”及以下各栏是由去掉边框的表格构成。

图6 图片格式的检定证书Fig.6 Image format of verification certificate

4 结论

本文在阐释Word自动化编程原理的基础上,例举了一个在VC平台下,基于OLE技术的应用案例,展示了书签定位与光标跳转技术在生成规范文档上的灵活性;利用Office自带的虚拟打印机组件,实现了不借助第三方软件支持,将Word文档批量转换为图片的功能,解决了工程实践上的突出问题。本文对工程中的报表生成有很大的参考价值,同时为版权保护提供了一个简便高效的方法。

[1]潘爱民.COM原理与应用[M].北京:清华大学出版社,1999.

[2]金良锋,周文详.WORD试验报告的自动生成[J].中国测试技术,2007,33(4):112-115.JIN Liang-feng,ZHOU Wen-xiang.Auto generation of experiment report in Word form[J].China Measurement Technology,2007,33(4):112-115.

[3]徐格宁,冯晓蕾,陶元芳,等.基于COM+VC+Word技术的产品设计说明书自动化研究[J].中国工程机械学报ISTIC,2009,7(3):294-299.XUGe-ning,FENGXiao-lei,TAOYuan-fang,et al.Automation on product design manual via COM,VC and Word[J].Chinese Journal of Construction Machiner,2009,7(3):294-299.

[4]车晓波,王知学,王磊.在实现 Word自动化操作中书签的应用[J].信息技术,2013(8):148-150.CHE Xiao-bo,WANG Zhi-xue,WANG Lei.Application of bookmark in Word automatic opetation[J].Information Technology,2009,26(9):123-125.

[5]陈特放,方斌.VC平台下基于OLE的Word自动化操作应用[J].计算机应用与软件,2009,26(9):123-125.CHEN Te-fang,FANG Bin.Applying OLE-based word automation on VC platform[J].Computer Application and Software,2009,26(9):123-125.

[6]熊瑜容,柴毅,王淑娟,等.基于VC++的WORD文档自动生成技术[J].计算机时代,2010(1):52-54.XIONGYu-rong,CHAI Yi,WANG Shu-juan,et va.Word document automatically generated technology based on VC++[J].Computer Era,2010(1):52-54.

[7]刘春雷,吴重光.用 VC实现 Word自动化操作的研究与应用[J].计算机工程与设计,2004,25(9):1594-1596.LIU Chun-lei,WU Chong-guang.Study and realization of Word automation operation in VC[J].Computer Engineering and Design,2004,25(9):1594-1596.

[8]刘长德.文档转图片,打印、保护两相宜 [J].电脑爱好者,2010(3):16-16.LIU Chang-de.Document to image[J].Computer fans,2010(3):16-16.

[9]长江水.利用Word实现文档转图片[J].电脑迷,2011(12):63-63.CHANGJiang-shui.Implementation of document transfer into pictures with Word[J].Computer Fans,2011(12):63-63.

[10]王杰.将Word文档“打印”为图片[J].网友世界,2011(22):33-34.WANG Jie.Word document printed as a picture[J].Net world,2011(22):33-34.

猜你喜欢

光标书签调用
透明书签
十一月书签
核电项目物项调用管理的应用研究
十一月书签
贰月书签
LabWindows/CVI下基于ActiveX技术的Excel调用
基于系统调用的恶意软件检测技术研究
Mac OS X系统中Delete删除键的5种用法
Mac OS X系统中Delete删除键的5种用法
Mac OS X系统中Delete删除键的5种用法