一种基于PDF动态标注的远程维修指导系统
yuyutoo 2024-10-22 18:36 1 浏览 0 评论
娄景艺,屈晓旭
(海军工程大学 电子工程学院,湖北 武汉 430033)
摘 要: 针对短波低速通信条件下船舶远程维修指导效率低下的问题,提出了一种新的基于PDF动态标注技术的远程维修指导信息交互手段。基于Acrobat SDK实现了PDF文档所见即所得方式的动态标注,其中重点解决了PDF文档动态加载、基于Windows钩子技术的PDF文档鼠标响应处理、PDF标注动态添加中的坐标空间变换以及PDF标注文本的动态修改等问题。实际应用表明,通过应用PDF动态标注技术,实现了窄带低速通信条件下的所见即所得的维修信息描述,为无视频通信辅助条件下的高效远程维修指导提供了一种可行手段。
0 引言
目前,短波通信因其应用范围广、抗毁性强、通信距离远(可全球通信)、运行成本低等特点,仍是船舶远洋航行中不可或缺的通信手段[1]。依托短波通信系统构建基于计算机辅助协同工作(Computer Supported Cooperative Work,CSCW)[2-3]技术的远程维修指导平台,对于保持和提高船舶的持续运行能力具有显著意义。但是,由于短波信道环境恶劣,短波通信带宽一般较窄,在美国国防部最新提出的MIL-STD-188-141C短波组网协议中,最大信道带宽也只有24 kHz[4],通常仅能支持话音和低速数据业务。现有基于语音的远程维修指导方式主要存在以下两方面问题:一是维修指导双方难以快速准确地描述指示灯和故障模块的位置、具体检修的方法和位置、显示的具体情况等辅助信息;二是通常短波语音通信可懂度低,维修指导过程开展困难。相比话音通信,短波低速数据通信的实时性稍差,但可靠性高。本文利用短波低速数据通信设备,基于PDF动态标注技术实现了一种窄带通信条件下的所见即所得(What You See Is What You Get,WYSIWYG)的高效维修信息描述和传递手段。
1 平台总体设计
维修指导过程中常见的信息包括故障位置、故障状态、自检结果、检修位置等,在低通信带宽条件下,将维修信息进行合理编码能够有效压缩数据流量,提高远程维修指导效率。维修信息编码过程本质上是一种信源编码过程,平台针对维修交互信息的特点,利用模型基压缩编码理论对维修交互信息进行高码率压缩,有效降低了信息码率。模型基信源编码的基本思想是在收发信者之间共享信源模型,将信源产生的原始消息建模为某种激励信号作用于信源模型,并在通信时仅传输此激励信号。理论研究表明,如果信源模型构建合理,所提取的激励信号码率将远低于原始消息码率。
本系统中将维修现场的装备相关信息(包括装备内外部结构、组成、连接关系、工作状态、维修手册、电路图册等)建模为信源模型,并从收发双方围绕装备展开的故障描述和维修指导信息中提取激励信号。具体设计中采用PDF文档承载信源模型,收发双方保存相同PDF文档库,利用PDF标注技术描述激励信号,使维修指导双方可以高效准确地描述各类维修信息,保证了低信道带宽条件下的维修信息交互效率。
远程维修指导平台依托普遍安装的陆地和船舶通信设施实现,由陆地部分和海上部分两部分组成,如图1所示。陆地部分和海上部分内部都使用以太网作为网络载体,二者之间经短波无线网关控制器利用短波数字通信设备互连互通。
厂家客户端和船舶客户端采用一致的架构设计。维修专家可利用PDF动态标注技术、实时VoIP语音和文本聊天等形式展开远程维修指导。基于以太网络的实时VoIP语音通信和文本聊天技术已很成熟,本文不再赘述。本文重点分析客户端中PDF动态标注技术的实现,这也是平台设计中的重点。
2 PDF动态标注技术的实现原理
便携式文档格式(PDF)是由Adobe公司于1993年开发出的一种文件格式,能容纳电子表单、网页、视频、音频、3D虚拟现实等丰富内容,便于集成各种媒体格式的维修资料。根据PDF文档规范,一个PDF文档(document)是由若干对象(object)组成的,这些对象共同组成了文档的页面(pages)。PDF标注(annotation,也称附注)是一类特殊的PDF对象。要对PDF标注进行动态控制,需要对PDF文档的结构进行解析。目前,PDF文档的解析工具有多种,主流的解析工具包括Apache公司推出的开源工具PDFBox[5]、著名开源站点Sourceforge的iTEXT[6]以及Adobe公司提供的Acrobat SDK[7]。前两者是开源项目,但功能有限,系统设计中选用Adobe SDK开发。
Acrobat SDK采用OLE对象(SDK中称作IAC对象)实现Windows平台下的PDF文档显控[8]。IAC对象分两个层次,一是Application View(AV)层,使用该层控制PDF文档的显示,该层中包括AVDoc、AVPageView、AVMenu等对象,显示的文档形式与Acrobat reader显示非常相似,用户界面友好;二是Portable Document(PD)层,使用该层提供的对象可操作PDF文档中的内容,例如增减页面、操作PDF文档中的标注等。
需要指出的是,Acrobat SDK中PDF文档在客户程序中的显示是以COM接口形式实现的,该接口提供了PDF文档操作需要的基本功能,但是未提供鼠标响应事件。
实现PDF标注动态控制的过程须解决以下四个问题:(1)PDF文档在用户程序中的动态加载;(2)为显示的PDF文档增加鼠标响应等用户交互能力;(3)以所见即所得的方式添加PDF标注;(4)实现PDF标注文本的动态修改功能。
3 PDF文档动态加载的实现
PDF文档的加载流程如下:
//创建AVDoc对象,用于控制PDF文档的显示
AVDoc=new AcroAVDocClass;
//打开PDF文档,并将其关联至tabPage
AVDoc.OpenInWindowEx(fileFullName,tp1.Handle.ToInt32,..);
//创建PDDoc对象,用于解析和控制PDF文档的内容
PDDoc=(AcroPDDoc)AVDoc.GetPDDoc;
//获取当前文档的AVPageView对象
AVPageView=(AcroAVPageView)AVDoc.GetAVPageView;
//导航至首页
AVPageView.GoTo(0);
本设计中采用多标签页形式显示不同PDF文档,即每个TabPage上显示一个PDF文件。PDF文档显示到客户端TabPage上后,在TabPage的大小发生变化时,其上显示的PDF文档不会自动同步变化,需要程序自行控制。控制方法是在TabPage所在的TabControl的Resize事件中重设PDF视窗大小和位置,具体方法是首先使用系统API函数GetWindow获取PDF显示视窗句柄,然后利用系统API函数SetWindowPos将该窗体调整至合适位置。
4 基于Windows钩子技术的PDF文档鼠标响应处理
在PDF标注编辑过程中,采用鼠标指定标注所在位置的所见即所得的方法是最高效的方法,但Acrobat SDK未提供鼠标响应机制。为此,本系统设计中利用Windows的全局鼠标钩子机制为PDF文档视窗加入了鼠标事件。
钩子(Hook)是一种Windows消息处理机制,用户程序可在钩子上挂载自定义函数监视指定窗口的某种消息,被监视的窗口可以是其他线程创建的[9]。当指定消息发出时,在没有到达目的窗口前,钩子程序可以先捕获该消息。图2为鼠标钩子的实现流程图。
设计MouseHook类挂载和卸载鼠标钩子,捕获Windows标准鼠标事件及触发自定义的.Net事件OnMouseActivity。PDF显示窗口类订阅.Net事件响应鼠标事件。在钩子回调函数中,若满足以下条件,则触发鼠标事件MouseHookProc:(1)显示PDF的窗体可见且处于最上层;(2)鼠标位置在PDF窗体区域范围内。
钩子的挂载和卸载采用Windows API函数SetWindowsHookEx和UnhookWindowsHookEx实现。
5 PDF标注动态操作中不同坐标系间映射的实现
在对PDF标注进行添加、选中、修改过程中,需要解决屏幕坐标系、用户坐标系及设备坐标系间的相互映射问题。
在Windows操作系统中,屏幕坐标系以屏幕左上角为原点,向右、向下分别为横纵两个坐标轴的正方向。鼠标钩子返回的鼠标位置就是相对于此坐标系的。而用户坐标系(User Space)和设备坐标系(Device Space)是PDF文档操作中两个重要概念。用户坐标系如图3所示,缺省的用户坐标系为每次页面刚刚加载时的坐标系。该坐标系的原点位于该页媒体框(Media Box)的左下角。图中的Crop Box为PDF文件显示的区域,而Media Box则包含了PDF文件四周的灰色边框。缺省的用户坐标系的单位为1/72英寸。在Acrobat SDK中,PD层的各种对象均使用该坐标系,这是因为该坐标系与实现无关。
设备坐标系是PDF文件显示于屏幕上时使用的坐标系,其单位为像素,坐标轴取向与屏幕坐标轴取向相同,如图4所示。与用户坐标系不同,该坐标系用于PDF文件的显示。设备坐标系的原点位于Crop Box的左上角。众所周知,随着PDF文档的缩放,该区域的位置在屏幕上是变化的。
作为PDF文档的一种对象,PDF标注的位置和大小采用的坐标系为用户坐标系。由上可见,为了以一种所见即所得的方式添加标注,即将标注添加到鼠标指示的PDF文档位置上,必须将鼠标位置坐标(屏幕坐标系)映射到用户坐标系上,但Acrobat SDK未提供该映射接口,而是提供了设备坐标系到用户坐标系的接口。为了实现所见即所得的鼠标操作,需执行如下步骤:
(1)获取鼠标在屏幕上的位置Pm(屏幕坐标系);
(2)将Pm映射到设备坐标系Pd;
(3)将Pd映射到用户坐标系Pu。
Pm到Pd的映射可采用以下公式实现:
Pd.x=Pm.X-PdfWindowRect.Left+PdfWindowDeviceRect.Left
Pd.y=Pm.Y-PdfWindowRect.Top+PdfWindowDeviceRect.Top
其中,PdfWindowRect为PDF显示窗体中Media Box的矩形区域(采用屏幕坐标系),可直接根据Tabpage窗体客户区矩形获得;PdfWindowDeviceRect为PDF窗体Crop Box的矩形区域(采用用户坐标系),可利用AVPageView.GetAperture函数获得。Pd到Pu的映射可直接调用AVPageView.DevicePointToPage函数实现。
6 PDF标注文本的动态修改
PDF标注在添加到PDF页面上时,可以指定其对应的文本内容。但与Acrobat Reader中不同,该内容可以阅览,但不支持现场编辑。虽然如此,Acrobat SDK预留了PDF标注文本的设置接口,即AcroPDAnnot对象的SetContents和GetContents函数。系统设计中,使用此接口解决该问题。用户在指定文本框中输入的文本内容自动添加到PDF文件上选中的标注上。PDF文档标注本身并无选中与否的属性。为此,系统设计中为文档标注加入了选中属性,方法是当鼠标点击PDF文档时,自动判定当前位置是否有PDF标注,如果有,则在程序中记录该标注作为当前选中标注,同时更改该标注的颜色以突出显示。
7 平台应用效果及分析
图5为应用基于PDF动态标注技术的远程维修指导平台的用户界面示例。维修船员首先利用文本聊天和表单对故障进行了描述。陆地工程师根据故障现象,打开设备图册(一个PDF文件),并在“电源稳压单元内部结构图”页面的电源输出连接头处添加标注(图中左上方标注),指导船员检查连接器处是否损坏。船员客户端会自动同步打开同一PDF文件,并同步添加相同标注。船员检查后发现电源板中一个电解电容器损坏,故障排查完成。
由于在陆/船双方保存了相同的PDF文件资料库,上述过程中仅需传递PDF文件编号、标注页码、标注内容等信息,需要交互的信息量大大压缩,且故障位置、检修位置、维修手册翻阅等均以所见即所得的形式实现,提高了远程指导效率。由于PDF文件不仅可以存储装备使用说明书、技术说明书、检修手册、实物照片等静态信息,还可以存储视频、虚拟实境等动态对象,资源丰富,能够保证远程维修指导的顺利开展。
利用该平台进行维修指导时,陆地和海上部分之间的交互信息中既包含了故障现象,又包含了故障检测、分析和维修流程,因此可以作为设备维修案例库使用,用于类似故障维修的参考或设备维修教学中的生动素材。
8 结论
由于短波装备在各类军民用船只上安装广泛,且各种维修相关的纸质或电子版资料、照片甚至视频信息均可方便地集成于PDF文档中,平台的文档资料资源可以得到充分保证,因此平台的实际应用前景广阔。该方法亦可推广应用于带宽受限的基于卫星通信的远程维修指导平台,由于需要的通信带宽窄,成本低,可作为一种低成本的常规远程维修指导手段。
参考文献
[1] 罗利春,王越.短波通信100年与通信电子战的新课题[J].系统工程与电子技术,1998,20(11):42-44.
[2] 王旭辉,王彤.CSCW技术在装备远程维修支持信息系统中的应用[J].火力与指挥控制,2010,35(1):132-135.
[3] 刘建辉,张俊利,王爽.基于Agent的远程协同故障诊断系统研究[J].计算机测量与控制,2006,14(1):39-42.
[4] 郑雅敏.基于非连续频谱的短波传输技术研究[D].杭州:浙江大学,2014.
[5] 王晓娟,谭建龙,刘燕兵,等.基于自动机理论的PDF文本内容抽取[J].计算机应用,2012,32(9):2491-2495.
[6] 王鹏飞,杨和梅,丁俊松.利用Struts+iText在J2EE中实现PDF报表[J].现代电子技术,2006,29(22):46-48.
[7] 张英杰.快速批处理文件编辑系统的设计与实现[D].成都:电子科技大学,2012.
[8] Adobe.Acrobat XI SDK 10.1[EB/OL].[2014-12-01].http://www.adobe.com/devnet/acrobat/sdk/eula.html,2014.
[9] 郭津之,龙海,黄皓.Windows消息钩子的拦截和清除[J].计算机工程与设计,2009,30(18):4201-4206.
相关推荐
- mysql数据库如何快速获得库中无主键的表
-
概述总结一下MySQL数据库查看无主键表的一些sql,一起来看看吧~1、查看表主键信息--查看表主键信息SELECTt.TABLE_NAME,t.CONSTRAINT_TYPE,c.C...
- 一文读懂MySQL的架构设计
-
MySQL是一种流行的开源关系型数据库管理系统,它由四个主要组件构成:协议接入层...
- MySQL中的存储过程和函数
-
原文地址:https://dwz.cn/6Ysx1KXs作者:best.lei存储过程和函数简单的说,存储过程就是一条或者多条SQL语句的集合。可以视为批文件,但是其作用不仅仅局限于批处理。本文主要介...
- 创建数据表:MySQL 中的 CREATE 命令深入探讨
-
数据库是企业日常运营和业务发展的不可缺少的基石。MySQL是一款优秀的关系型数据库管理系统,它支持数据的插入、修改、查询和删除操作。在数据库中,表是一个关系数据库中用于保存数据的容器,它由表定义、表...
- SQL优化——IN和EXISTS谁的效率更高
-
IN和EXISTS被频繁使用在SQL中,虽然作用是一样的,但是在使用效率谁更高这点上众说纷纭。下面我们就通过一组测试来看,在不同场景下,使用哪个效率更高。...
- 在MySQL中创建新的数据库,可以使用命令,也可以通过MySQL工作台
-
摘要:在本教程中,你将学习如何使用MySQLCREATEDATABASE语句在MySQL数据库服务器上创建新数据库。MySQLCREATEDATABASE语句简介...
- SQL查找是否"存在",别再用count了
-
根据某一条件从数据库表中查询『有』与『没有』,只有两种状态,那为什么在写SQL的时候,还要SELECTCOUNT(*)呢?无论是刚入道的程序员新星,还是精湛沙场多年的程序员老白,都是一如既往...
- 解决Mysql数据库提示innodb表不存在的问题
-
发现mysql的error.log里面有报错:>InnoDB:Error:Table"mysql"."innodb_table_stats"notfo...
- Mysql实战总结&面试20问
-
1、MySQL索引使用注意事项1.1、索引哪些情况会失效查询条件包含or,可能导致索引失效如果字段类型是字符串,where时一定用引号括起来,否则索引失效...
- MySQL创建数据表
-
数据库有了后,就可以在库里面建各种数据表了。创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性、引用完整性和域完整性)约束的过程。后面也是通过SQL语句和Navicat...
- MySQL数据库之死锁与解决方案
-
一、表的死锁产生原因:...
- MySQL创建数据库
-
我的重点还是放在数据表的操作,但第一篇还是先介绍一下数据表的容器数据库的一些操作。主要涉及数据库的创建、修改、删除和查看,下面演示一下用SQL语句创建和用图形工具创建。后面主要使用的工具是Navica...
- MySQL中创建触发器需要执行哪些操作?
-
什么是触发器触发器,就是一种特殊的存储过程。触发器和存储过程一样是一个能够完成特定功能、存储在数据库服务器上的SQL片段,但是触发器无需调用,当对数据库表中的数据执行DML操作时自动触发这个SQL片段...
- 《MySQL 入门教程》第 17 篇 MySQL 变量
-
原文地址:https://blog.csdn.net/horses/article/details/107736801原文作者:不剪发的Tony老师来源平台:CSDN变量是一个拥有名字的对象,可以用于...
- 关于如何在MySQL中创建表,看这篇文章就差不多了
-
数据库技术是现代科技领域中至关重要的一部分,而MySQL作为最流行的关系型数据库管理系统之一,在数据存储和管理方面扮演着重要角色。本文将深入探讨MySQL中CREATETABLE语句的应用,以及如何...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)