一种svg演示放映器及进行演示放映的方法

文档序号:6555784阅读:214来源:国知局
专利名称:一种svg演示放映器及进行演示放映的方法
技术领域
本发明涉及计算机应用领域,尤其涉及一种演示放映器和使用该演示放映器的演示放映方法。
背景技术
随着演示文件(诸如,Microsoft Office、Open Office、WPSOffice中的演示文件)在政府办公、教育实践、企业交流等各个领域中的使用越来越广,对演示文件本身的要求也越来越高演示文件已不能仅仅满足于文本、图形、图像和视频了,应该而且必须具备丰富而优秀的交互性能;同一套演示文件必须能很方便的在不同的介质上发布,除了传统的纸和PC之外,还有Web发布、PDA、手机等手持设备。但由于演示文件是二进制文件,不是基于XML(eXtensibleMarkup Language)的文件,所以要发布或再利用一个演示文件不是很容易。因此,现在有很多研究都在试图重新构建一个更好的演示文件,大致思路是首先基于XML来表达演示的逻辑和表现数据,再利用XSLT或其它工具将XML演示文件转换为具体表现形式,它们都具备生成SVG(Scalable Vector Graphics可伸缩矢量图形)文件的功能,但它们都是直接使用SVG表达演示内容,一方面失去了演示文件中原有的许多特有概念,另一方面导致动画不能重用,进而使得SVG文件尺寸过大等,这对于当今互联网依赖性越来越强的环境下,很不利于网络传输。另外,如果采用纯XML方式表达演示文件的话,虽然逻辑会非常清晰,但会额外增加由XML转换成可被SVG应用程序理解的SVG标准格式文档所需的难度,甚至可能到SVG应用程序无法实现的程度。因此,出现了一种能够尽可能多地保留演示中特有概念而且易于被SVG应用程序理解和应用的SVG格式文档,但同时需要一个理解和处理该类型文档的放映器和进行放映方法。

发明内容
本发明克服了现有技术中的缺点,提供一种可处理SVG演示数据文档的SVG演示放映器和利用它进行演示放映方法。
为了解决上述技术问题,通过以下技术方案实现一种SVG演示放映器,其位于系统逻辑层,其包括播放状态管理模块、放映页数据准备模块、页切换模块和页内动画放映模块;该放映页数据准备模块包括静态数据准备模块;该页切换模块包括后翻页模块和前翻页模块;该页内动画放映模块包括动画放映模块和动画消隐模块;上述各模块均有与系统数据层进行数据交换的接口;系统应用层可接收鼠标和键盘事件,同时把接收的事件分发给SVG演示放映器中的各模块。
本发明还提供一种演示放映方法,其包括如下过程a.加载SVG演示数据文档,利用DOM提供的onload事件,调用它的响应函数,在响应函数中调用放映页数据准备模块提供的接口,准备放映页数据;b.判断是否指定了自定义放映列表,如果是,则读取自定义放映列表的内容,如果否,以Slide的定义顺序作为自定义放映列表内容;c.通过放映页数据准备模块中的静态数据准备模块,根据列表内容,合成可以直接被SVG播放器显示的静态数据,并将合成后的数据依次追加到DOM树中由SVG脚本创建的id为“window”节点中;d.如果存在加载动画数据的模块,则还需把动画数据准备好,如果不存在加载动画数据的模块,进入下一步;e.放映页数据准备完成以后,应用层接收各种鼠标、键盘事件,并将事件转为特定的动作,调用播放状态管理模块提供的相应功能接口,再由播放状态管理模块根据动作类型和当前系统放映状态决定调用哪个功能模块以实现其功能需求,并实时更新当前系统放映状态。
本发明所述的演示放映方法是通过脚本语言,调用DOM函数和SVG DOM函数,响应DOM事件,处理SVG数据文档在应用程序中对应的DOM树,控制放映器展现各种复杂的演示效果。因为放映数据是在放映时动态生成,所以数据独立性远比静态组织的要高,并且灵活性也大大增强,同一份原始数据根据不同的设置可以生成多种放映序列,并且可以利用良好的数据定义结构开发一些诸如动态更改展现外观的扩充功能,使放映效果更加出色。


图1是本发明演示放映方法中应用层接收的事件与SVG演示放映器中各模块关系图;图2是本发明SVG演示放映器中的放映页数据准备模块、页切换模块和页内动画放映模块的结构图;图3是本发明SVG演示放映器内部模块间关系示意图;图4是说明本发明演示放映方法中的页切换流程图。
具体实施例方式
本发明所述的一种利用SVG演示放映器进行演示放映的方法是通过脚本语言,调用DOM函数和SVG DOM函数,响应DOM事件,处理SVG数据文档在应用程序中对应的SVG DOM树,控制放映器展现各种复杂的演示效果。所述的脚本语言主要指ECMAScript,也可以是被SVG支持的其它脚本语言。所述方法在逻辑上将系统分为三层应用层、逻辑层和数据层。
所述数据层是SVGViewer将SVG文档读入内存创建的DOM树以及被逻辑层加工过的存储在用SVG脚本在DOM树中创建的id为“window”的节点内容,所有这些内容统称为数据存储模块。所述应用层主要负责事件的接收,以及把接收到的事件分发给逻辑层的对应模块,它可以接收的事件包括文档加载时触发的onload事件,鼠标事件(如onclick/onmouseup),键盘事件(如onkeyup/onkeydown)。所述逻辑层是本发明的SVG演示放映器所在层,该SVG演示放映器完成各种事件的响应动作,与数据层进行数据交互,展示各种复杂演示效果,参见图1,其构成主要包括放映页数据准备模块、页切换模块、页内动画放映模块以及播放状态管理模块,它还可以包括索引页处理模块。
整个系统的运行机制是事件机制,用户事件的接收一方面依赖于DOM提供的鼠标事件支持,另一方面依赖于Adobe SVGViewer提供的键盘事件支持。其处理流程如下参见图1至图4,当SVG演示数据文档被加载时,利用DOM提供的onload事件,调用它的响应函数,在响应函数中调用放映页数据准备模块提供的接口,准备放映页数据。如果指定了自定义放映列表名,则读取指定自定义放映列表的内容,否则,以Slide的定义顺序作为自定义放映列表内容,再通过放映页数据准备模块中的静态数据准备模块,根据列表内容,取得指定Slide原始数据,并根据该Slide原始数据中的一个特殊标识,判断其与对应Master的关联关系,在内存中将Master数据与Slide原始数据按照指定的规则,合成可以直接被SVG播放器显示的静态数据,并将合成后的数据依次追加到DOM树中由SVG脚本创建的id为“window”节点中。所述放映页数据,其数据组成分两部分,静态SVG数据和动画SVG数据,静态数据必须完全准备且能直接被SVG播放器显示,动画数据即可以一次性准备完毕,也可以在后期逐步加入。所述的规则指如果关联关系表示忽略母版的背景图形,则把Slide与Master的关联改为对Master背景颜色的引用,否则,拷贝母版中所有的Shape到Slide的关联标记后Shape定义之前的位置,并将关联标记改为忽略母版。最后,如果存在加载动画数据的模块,则还需使用“函数动画”法把动画数据准备好。其遵循的原则为加载Slide的页动画数据时,当指定Slide没有页动画数据时,会尝试加载对应Master的页切换数据,而加载页内动画数据时,首先判断当前Slide与Master的关联关系,如果当前Slide忽略了对应母版的背景图形,则只需要按照当前页的动画列表利用“函数动画”进行加载,否则,在加载页内Shape的动画数据之前,得先加载对应Mater中Shape的动画数据。
放映页数据准备完成以后,应用层接收各种鼠标、键盘事件,并将事件转为特定的动作,调用播放状态管理模块提供的相应功能接口,再由播放状态管理模块根据动作类型和当前系统放映状态决定调用哪个功能模块以实现其功能需求,并实时更新当前系统放映状态。参见图3,播放状态管理模块在处理下一页、上一页、跳到指定页等页切换动作时相对比较简单,只需转化为对页切换模块的调用,为它提供关键信息,当页切换模块调用完毕,修改当前页索引号的状态值。如果是下一动作或是上一动作,还需要判断当前页的页内动画播放状态,再决定调用页切换模块还是调用页内动画放映模块。页切换模块除了完成正常的切换页功能外,如果在放映页数据准备模块没有把动画数据一次性准备完毕,则此处还需要先准备动画数据,加载动画数据的方法如前所述。
除上述的一些必备模块以完成放映系统的基本功能外,为了使本放映系统的功能更加强大,还可以有如下一些扩充模块版本校验与版本控制模块,用于当文档版本与放映器版本不同时进行相应处理,以便今后版本(包括数据版本和放映器版本)升级时,能够向下兼容甚至双向兼容,如果存在该模块,则此模块的启动应先于如上所述的任一模块;自动放映模块,完成演示中展台播放功能,并且在任一时刻,可以由自动放映状态切换到交互放映状态。
导航条模块,该工具条上可以根据需要集成任意已经实现的功能按钮作为功能入口,方便用户操作。
下面结合附图和实例说明本发明SVG演示放映方法如图1所示,整个放映系统的运行都是通过DOM的事件机制来触发的。当SVG演示数据文档被加载时,触发onload事件,当应用层侦听到此事件时,通过调用它的响应函数,也即放映页数据准备模块为应用层提供的接口,开始准备放映页数据,作为处理SVG文档的入口。所述放映页数据准备模块的结构图如图2所示,必须包含静态数据准备模块,还可以包含页动画数据准备模块和页内动画数据准备模块,但这两个子模块不是必需的,它们也可以全部或部分包含在后述的页切换模块中,还可以包含版本控制模块,便于在以后升级时,方便版本兼容。如果存在两个后面的子模块,静态数据准备模块必须最先调用,然后再调用其它子模块,该模块提供了一个给应用层调用的用于处理当重新加载放映内容用的接口。该模块主要完成的功能是初始化放映数据,并将原始的内存DOM树的数据按照指定的原则合成播放数据。其中静态数据准备模块完成的主要任务是获取当前文档的版本信息,如果将要处理的文档的版本与放映器的版本不符,则退出系统,不执行任何操作,否则读取指定自定义放映列表名的内容,按照列表内容一一将Master数据与Slide数据进行合成,生成放映页数据,举例如下假设自定义放映列表的内容存放在gSlideElementList数组里。首先,从该数组中读取一个值,根据该值从幻灯片页数据定义区复制对应的Slide数据为SlideCopy,并重新生成SlideCopy的id,假设原Slide的id为“oldId”,与它关联的Master的id为“mastered”,则新生成的SlideCopy的id为“oldId”+.?(?表示该文档中不重复的整数字,从0开始,依次递增),如“oldId.0”;然后,使用DOM函数获取SlideCopy中id值为“oldId.master”的元素,该id所对应的元素的作用是为Slide与Master建立关联,指出该Slide是否忽略对应Master中的背景图形,为了说明方便,后面简称关联元素。如果该关联元素的xlink:href属性值为“masterId”,则表示不忽略Master中的背景图形,否则如果为“masterId.background”,则表示忽略。当忽略时,将此关联元素的id改为“oldId.master.ignoreshapes”,否则,将其id改为“masterId.background”,并将masterId中所有的shapes复制到SlideCopy中。值得注意的是,各Shape的层次关系是通过它们在数据定义时的先后顺序决定的,所以为了在把Master中的shapes复制到SlideCopy以后,不会导致Master中的Shape覆盖SlideCopy中的Shape,必须将Master中的Shapes复制到SlideCopy中关联元素的之后,所有Shapes定义之前,这个操作可以利用DOM提供的insertBefore接口来完成。
最后,将生成的SlideCopy追加到内存DOM树中一个使用脚本创建的id值为“window”的节点中,该节点又被称为放映区。
按照上述方法,直至gSlideElementList数组中所有的值按从前到后的顺序都被处理完,至此,所有用于放映的静态数据准备完毕。
如果放映页数据准备模块中实现了页动画数据准备模块或页内动画数据准备模块,则还可以通过这两个模块为静态数据加载动画数据,完成放映页数据的准备工作。在SVG演示数据文档中,动画数据的表达是采用与SVG兼容的XML的形式表达的,由XML数据到SVG播放器可直接处理的动画数据,这个过程是通过“函数动画”法完成的。其中Slide的切换动画加载原则是如果Slide动画数据没有时,会去尝试加载对应Master的页切换数据。页内动画的加载原则是如果不忽略母版中的背景图形,则首先加载对应的母版的Shape的动画数据,再加载Slide内的Shape的动画数据。
播放状态管理模块能处理的动作有五种上一动作,下一动作,上一页,下一页,跳到指定页。每当有动作发生时,首先分析动作类型,再根据动作类型,调用相应的处理模块,并实时更新当前的播放状态,它与其它模块配合工作的关系如图3所示,当播放状态管理模块对动作经过分析后,如果动作是涉及页切换的,播放状态管理模块则会调用页切换模块提供的内部接口,通知页切换模块处理发生的动作,并为页切换模块提供关键信息,以便让页切换模块能够准确处理对应的动作。所述页切换模块如图2所示,前翻页模块和后翻页模块是必备模块,分别完成切换到下一页和切换到上一页的功能,页动画数据准备模块与页内动画数据准备视放映页数据准备模块而定,如果放映页数据准备模块已经包含了这个两个模块或是其中的一个,则已被包含的模块不能作为页切换模块的子模块,没有被包含的模块必须做为该模块的子模块。当页切换模块的内部接口被调用后,页切换模块被激活,它会立即对播放状态管理模块提供的信息进行判断,如果是跳到指定页,则首先找到指定页的页切换动画,然后隐藏当前页,显示指定页,并激活页切换动画,同时,播放状态管理模块同步更新当前页号,完成页跳转。如果是跳到下一页或是上一页,换页的方法与跳转到指定页相同,但还要考虑跳转页是否是隐藏,其具体处理流程如图4所示,如果所有动画数据在放映页数据准备模块已经被加载,则此处只需要激活页动画,否则,还需对幻灯片内的图形对象的动画进行数据准备工作;二是利用DOM函数控制幻灯片的可见还是不可见(display属性),这里需要控制两页的显示状态,这两页的显示状态是互斥的,对于“下一页”,则使当前页隐藏(display属性值置为“none”),下一页显示(display属性值置为“inline”),对于“上一页”,使当前页隐藏,上一页显示。为了说明方便,假设当前页的索引号为C,并且把该索引值赋给K。如果是“上一页”,则首先判断第K页是不是首页,如果是首页,则不执行任何动作,直接结束流程,否则,K值自减1,再判断第K页是不是隐藏页(visibility属性值为“hidden”),如果是隐藏页,再判断它曾经是否被播放过,如果从来没有被播放过,则直接跳过第K页,使用相同方法重复上一动作;如果不是隐藏页,则直接显示第第K页,隐藏第C页,即当前页,并判断第K页动画数据是否已准备好,在没有准备好的情况下,还需要启用页动画数据准备模块加第K页的页动画数据,最后激活第K页的页动画,显示页最后一次放映时的状态。如果是“下一页”,则首先判断第K页是不是最后一页,如果是最后一页,则不执行任何动作,直接结束流程,否则,K值自加1,再判断第K页是不是隐藏页,如果是隐藏页,则直接跳过第K页,使用相同方法继续判断下一页;如果不是隐藏页,则将第K页显示,第C页隐藏,即当前页隐藏,并调用页动画数据准备模块,加载第K页的页动画数据,加载方法是如果Slide本身有页动画,则直接使用第K页的页动画,如果第K页没有页动画,则尝试加载第K页对应的母版的动画作为第K页的页动画,如果页动画在放映页数据准备模块已经被加载,则此处只需调用页内动画函数为第K页准备页内动画,加载方法是首先加载对应母版中具有动画的所有Shape的动画,再加载第K页中所有具有动画的Shape的动画,如果此处页内动画数据也已经在放映页数据准备模块中准备好,则直接启动第K页页动画。不管是跳到上一页,还是下一页,都必须同步更新当前播放状态,即C=K,使当前页号始终是被显示的那页的页号。
如果动作经播放状态管理模块分析后认为是页内动画,播放状态管理模块则会调用页内动画放映模块提供的内部接口,通知页内动画放映模块处理发生的动作,并为页内动画放映模块提供关键信息,以便让页内动画放映模块能够准确处理对应的动作。当页内动画放映模块的内部接口被调用后,立即被激活,根据接收到的关键信息,决定是放映下一动画还是消隐上一动画。所述的页内动画放映模块如图2所示,它包括两个模块动画放映模块和动画消隐模块,分别用于处理下一动作且页内动画还没有放映完毕时的情况和处理上一动作且页内动画还没有回放完毕时的情况,在进行动画放映或动画回放时,还得分为处理事件激发的动画和跟随某一动画的动画两种。
本发明所述的演示放映方法是通过脚本语言,调用DOM函数和SVG DOM函数,响应DOM事件,处理SVG数据文档在应用程序中对应的DOM树,控制放映器展现各种复杂的演示效果。因为放映数据是在放映时动态生成,所以数据独立性远比静态组织的要高,并且灵活性也大大增强,同一份原始数据根据不同的设置可以生成多种放映序列,并且可以利用良好的数据定义结构开发一些诸如动态更改展现外观的扩充功能,使放映效果更加出色。
以上步骤仅用以说明而非限制本发明的技术方案。不脱离本发明精神和范围的任何修改或局部替换,均应涵盖在本发明的权利要求范围当中。
权利要求
1.一种SVG演示放映器,其特征在于,其位于系统逻辑层,其包括播放状态管理模块、放映页数据准备模块、页切换模块和页内动画放映模块;该放映页数据准备模块包括静态数据准备模块;该页切换模块包括后翻页模块和前翻页模块;该页内动画放映模块包括动画放映模块和动画消隐模块;上述各模块均有与系统数据层进行数据交换的接口;系统应用层可接收鼠标和键盘事件,同时把接收的事件分发给SVG演示放映器中的各模块。
2.根据权利要求1所述的SVG演示放映器,其特征在于,所述系统数据层包括SVG解释器将SVG文档读入内存创建的DOM树和被SVG演示放映器加工过的存储在用SVG脚本在DOM树中创建的节点内容。
3.根据权利要求1所述的SVG演示放映器,其特征在于,其还包括索引页处理模块。
4.根据权利要求1所述的SVG演示放映器,其特征在于,其还包括版本校验与版本控制模块。
5.根据权利要求1所述的SVG演示放映器,其特征在于,其还包括自动放映模块和导航条模块。
6.根据权利要求1所述的SVG演示放映器,其特征在于,所述放映页数据准备模块与页切换模块其中之一内含有页动画数据准备模块和页内动画数据准备模块。
7.一种使用如权力要求1所述的SVG演示放映器进行演示放映的方法,其特征在于,其包括如下过程a.加载SVG演示数据文档,利用DOM提供的onload事件,调用它的响应函数,在响应函数中调用放映页数据准备模块提供的接口,准备放映页数据;b.判断是否指定了自定义放映列表,如果是,则读取自定义放映列表的内容,如果否,以Slide的定义顺序作为自定义放映列表内容;c.通过放映页数据准备模块中的静态数据准备模块,根据列表内容,合成可以直接被SVG播放器显示的静态数据,并将合成后的数据依次追加到DOM树中由SVG脚本创建的节点中;d.如果存在加载动画数据的模块,则还需把动画数据准备好,如果不存在加载动画数据的模块,进入下一步;e.放映页数据准备完成以后,应用层接收各种鼠标、键盘事件,并将事件转为特定的动作,调用播放状态管理模块提供的相应功能接口,再由播放状态管理模块根据动作类型和当前系统放映状态决定调用哪个功能模块以实现其功能需求,并实时更新当前系统放映状态。
8.根据权利要求7所述的演示放映方法,其特征在于,过程e中所述特定动作包括下一页、上一页、调到指定页等页切换动作和上一动作、下一动作等。
9.根据权利要求7或8所述的演示放映方法,其特征在于,播放状态管理模块在处理下一页、上一页、跳到指定页等页切换动作时,只需转化为对页切换模块的调用,为它提供关键信息,当页切换模块调用完毕,修改当前页索引号的状态值;播放状态管理模块在处理下一动作或是上一动作时,还需要判断当前页的页内动画播放状态,再决定调用页切换模块还是调用页内动画放映模块。
10.根据权利要求9所述的演示放映方法,其特征在于,页切换模块除了完成正常的切换页功能外,如果过程d中在放映页数据准备模块中没有加载动画数据的模块,则此处还需要先准备动画数据,并加载动画数据。
全文摘要
本发明涉及计算机应用领域,尤其涉及一种演示放映器和使用该演示放映器的演示放映方法。一种SVG演示放映器,其位于系统逻辑层,其包括播放状态管理模块、放映页数据准备模块、页切换模块和页内动画放映模块;该放映页数据准备模块包括静态数据准备模块;该页切换模块包括后翻页模块和前翻页模块;该页内动画放映模块包括动画放映模块和动画消隐模块;上述各模块均有与系统数据层进行数据交换的接口;系统应用层可接收鼠标和键盘事件,同时把接收的事件分发给SVG演示放映器中的各模块。本发明所述的演示放映器可以使放映效果更加出色。
文档编号G06F17/30GK101017488SQ20061003351
公开日2007年8月15日 申请日期2006年2月10日 优先权日2006年2月10日
发明者万里, 曾崴, 熊玉辉, 贺利军 申请人:珠海金山软件股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1