版面描述信息的转换方法及应用版面描述的装置的制作方法

文档序号:6614019阅读:221来源:国知局
专利名称:版面描述信息的转换方法及应用版面描述的装置的制作方法
技术领域
本发明涉及版面描述技术,特别涉及版面描述信息的转换方法及应用版面 描述的装置。
背景技术
版面描述是指,将页面内容描述为特定的形式。版面描述语言(PDL, Page Description Language)是一种描述页面内容的语言,通过将页面内容描述为片反 面描述信息,实现了版面描述。常见的版面描述语言包括可移植文件格式 (PDF)、印刷脚本语言(PostScript )、打印机控制语言(PCL )、书生可交换平 台(SEP)、可扩展纸张规范(XPS)、方正大样文件、方正中文无纸化基础(CEB, Chinese E-paper Basic )等。
图1为现有技术中版面描述的方法。如图1所示,现有技术中,版面描述 信息包括初始状态集合、状态指令、对象指令以及其它指令。
初始状态集合是可选的,即可以存在初始状态集合,也可以不存在初始状 态集合。初始状态集合可以用来初始化当前状态集合。很多版面描述信息的处 理过程会用到当前状态集合,如绘制、打印、转换等等,在某些版面描述信息 应用中,需要对当前状态集合进行初始化。例如在版面描述信息的版面绘制中, 需要预先对版面描述信息的当前状态集合进行初始化,进而从初始化的当前状 态集合开始对版面描述信息中的每个对象指令进行绘制。
当前状态集合的初始化方法可以包括
如果存在初始状态集合,则可以用初始状态集合包含的状态值来初始化当
前状态集合,实现当前状态的初始化;
如果不存在初始状态集合,则可以将当前状态集合设置为缺省值,实现当前状态的初始化。
所述将当前状态集合设置为缺省值的方法可以为将当前状态集合中的各 个状态信息的值均设置为默认值,所述默认值是可以根据需要来选择的,例如 可以将当前状态中所有状态信息的值均设置为0或1。
版面描述信息中将版面信息以先后顺序的形式描述为 一个序列。序列中的 所有元素称为指令,指令可以为状态指令,也可以为对象指令,也可以为除了 状态指令和对象指令以外的其它指令。
序列中的各个状态指令和对象指令是有先后顺序的。所述指令的先后顺序 是在生成版面描述信息的时候根据需要来决定的。例如,在限定状态指令只更 新图形状态、对象指令为版面对象的情况下,要使一个版面描述信息在绘制的 过程中先绘制一个圆形,再根据状态指令1和当前状态集合绘制一个矩形,那 么圓形这个对象指令就在矩形这个对象指令的前面,状态指令1在矩形这个对 象指令的前面,在圓形这个对象指令的后面,那么三个指令的顺序应该为圓 形,状态指令l,矩形。按照预先确定的顺序排列指令的方法有很多种,例如, 可以将状态指令和对象指令按顺序存储在内存或文件中,进而根据所述状态指 令或对象指令存储位置的先后来体现状态指令和对象指令的先后顺序;也可以 将状态指令和对象指令随4几存储在内存或文件中,为状态指令和对象指令编号, 根据编号的大小来体现状态指令和对象指令在序列中的顺序。我们称以上这种 版面描述为有状态版面描述信息。
下面对有状态版面描述信息中的状态集合、状态指令和对象指令分别作详 细介绍。
状态集合是各种类型状态信息的集合,状态集合可以为图形状态,在状态 集合为图形状态的情况下,所述状态集合中状态信息的类型包括线宽、线端 点风格、线连接点风格、虚线设置、字体、字体矩阵、文本大小、文本风格、 文本颜色、前景色、透明度、变换矩阵、填充方式、反走样设置、光栅操作和 阿尔法混合操作等。例如,文本大小可以包括文本的宽和高,这适用于等宽字 体;文本风格可以包括是否斜体和是否加粗,透明度可以包括线和填充,等等。状态信息包括两部分状态信息的类型和状态信息的值,例如,线宽0.5mm这 个状态信息,状态信息的类型为线宽,状态信息的值为0.5mm。所谓设定状态 集合,即为设定状态集合中各状态信息的值,例如设定线宽为0.5mm,文本风 格为加粗等。
状态指令包含两部分内容第一部分是该状态指令将更新哪些状态信息, 第二部分是所述状态信息的新值。
对象指令可以为版面对象,在对象指令为版面对象的情况下,所述对象指 令的类型包括文本、图像和向量路径等,各种类型的对象指令均包含自身的属 性,例如,文本类型的对象指令包含文本的位置、文本数据和字宽表等属性, 图像类型的对象指令包含图像的大小、位置、图像类型和图像数据等属性,向 量路径包含位置和向量数据等属性。
我们称绘制对象指令所需要的全部信息为所述对象指令的完备版面信息。 对象指令的完备版面信息包括两部分对象指令的属性和对象指令对应的状态 信息。在有状态版面描述信息中,各种类型的对象指令均包含自身的属性,而 对象指令的状态信息包含在状态集合中,因此,有状态版面描述信息中,对象 指令相不包含完备版面信息。将对象指令自身的属性和对象指令对应的状态信 息结合起来,才唯一确定了对象指令的完备版面信息。
对象指令的完备版面信息在实际应用中具有重要的作用,例如开发编辑程 序、对版面描述信息进行版面绘制等。下面以版面绘制为例,说明对象指令的 完备版面信息在版面绘制中的作用。
所述版面绘制是指将版面描述信息转换为特定格式输出的一个流程,其 中,特定4各式可以为图像、位图等。举例来说,在Acrobat PDF阅读器(Acrobat PDF Reader)中阅读PDF文件是一种绘制,在书生阅读器(Sursen Reader)中 阅读SEP格式文件是一种绘制,将PDF或SEP在打印机上打印输出也是一种 绘制。
在对象指令为版面对象且状态集合为图形状态的情况下,可以对版面描述 信息进行版面绘制。版面绘制包括对全部或部分对象指令的绘制。所述对象指令的绘制是指,绘制引擎根据对象指令在版面上的完备版面信息,对对象指令 进行绘制,输出绘制结果。绘制引擎可以用软件模块实现,也可以用硬件模块
实现,常见的纟会制引擎有Win32 gdi、 xwindows、 qt、 gtk、 cairo、 libart、 agg等。 在采用有状态版面描述信息的情况下,如果要实现对某个对象指令的绘制, 必须要获取所述对象指令对应的状态信息,即获取所述对象指令对应的当前状 态集合。
目前根据有状态版面描述信息进行版面绘制的通用方法包括在当前版面
描述信息中,遍历状态指令和对象指令;
如果当前遍历对象为状态指令,则则用状态指令更新当前状态集合;
如果当前遍历对象为对象指令,则根据当前状态集合和对象指令获得完备
版面信息,调用绘制引擎,绘制引擎根据完备版面信息对对象指令进行绘制,
输出绘制结果。
遍历的方法有很多种,例如,可以按照以下步骤进行绘制 从第一个指令开始,按照指令在序列中的顺序,依次判断每个指令的类型 并根据指令的类型执行相应的操作,直到确定对最后一个指令执行完相应的操
作,结束转换。其中,根据指令的类型执行相应的操作的方法包括 如果判断指令为状态指令,则用状态指令更新当前状态集合; 如果判断指令为对象指令,则根据当前状态集合和对象指令获得完备版面
信息,调用绘制引擎,绘制引擎根据完备版面信息对对象指令进行绘制,输出
绘制结果。
该方法可以通过循环来实现,从第一个指令开始,执行以下步骤
A、 判断当前版面描述信息中的当前指令是否为状态指令,如果是,则用 状态指令更新当前状态集合,执行步骤C,否则执行步骤B;
B、 判断当前版面描述信息中的当前指令是否为对象指令,如果是,则根 据当前状态集合和对象指令获得对象指令的完备版面信息,调用绘制引擎,绘 制引擎根据完备版面信息对对象指令进行绘制,输出绘制结果,执行步骤C, 否则执行步骤C;C、判断当前版面描述信息中的当前指令是否为最后一个指令,如果是,
结束转换,否则将所述当前指令的后一位内容作为当前指令,执行步骤A。 所述当前指令的后一位内容包括
如果当前版面描述信息是根据指令的存储位置来体现指令在序列中的顺序 的,则当前指令的后一位内容是指当前指令存储位置的下一位所存储的内容; 如果版面描述信息是根据指令的编号来确定指令在序列中的顺序,那么当前指 令的后一位内容就是指当前指令编号的下一位所对应的指令。
根据有状态版面描述信息进行版面绘制过程如图2所示
步骤201以当前版面描述信息的初始状态集合初始化当前版面描述信息的 当前状态集合,如果没有初始状态集合,则将当前状态集合置为缺省值。
在由状态指令和对象指令的构成的序列中,从序列的第一个指令开始,执 行步骤202,即开始遍历
步骤202判断当前版面描述信息中的当前指令是否为状态指令,如果是, 则执行步骤203,否则执行步骤204。
步骤203根据状态指令的内容更新当前状态集合,执行步骤206,更新方 法为,首先根据该状态指令确定将更新哪些状态信息,然后根据状态指令中这 些状态信息的新值替换原有状态信息的值。
步骤204判断当前版面描述信息中的当前指令是否为对象指令,如果是, 则执行步骤205,否则执行步骤206。
步骤205使用当前状态集合以及对象指令自身的属性,调用绘制引擎对对 象指令进行绘制,输出绘制结果。其中,调用绘制引擎对对象指令进行绘制的 方法在现有技术中已得到广泛应用,这里不予以赘述。
步骤206判断当前版面描述信息中的当前指令是否为最后一个指令,如果 是,则执行步骤208,否则执行步骤207。
判断当前指令是否为最后一个指令的方法有多种,例如,可以预先在序列 中存储指令的数量,当判断次数等于这个数量时,则认为当前指令为最后一个 指令;也可以在最后一个指令中作标记,当判断到这个指令时,根据标记确定该指令为最后一个指令。在当前版面描述信息根据指令存储位置体现指令的顺 序的情况下,也可以不执行本步骤,在对每个指令执行完相应的操作之后,继 续对所述指令的下一个存储位置的内容进行判断。如果判断结果为存储位置的 内容不是当前版面描述信息中指令的类型,则认为已经对序列中的最后一个指 令执行完相应的操作。
步骤207将所述当前指令的后一位的内容作为当前指令,执行步骤202。 步骤208版面绘制结束,完成了根据有状态版面描述信息实现的版面绘制。 以上所述步骤中,步骤202 步骤207为遍历的过程,按照状态指令和对象
指令在序列中的顺序,依次对每个对象指令进行绘制并输出绘制结果。
图3以举例的方式说明了现有技术中根据有状态版面描述信息进行版面绘
制的实施过程,如图3所示,々支设有状态版面描述信息包括初始状态集合、
对象指令al、 a2和a3、状态指令l、 2和3。 版面绘制的实施过程为
首先以当前版面描述信息的初始状态集合初始化当前版面描述信息的当前 状态集合,如果没有初始状态集合,则将当前状态集合置为缺省值。 然后从序列的第一个指令一一状态指令1开始进行遍历 判断第一个指令为状态指令1,根据状态指令1的内容更新初始状态集合 中的一个或几个状态信息,将更新后的状态集合设为当前状态集合,即状态1 为当前状态集合。
判断第二个指令为对象指令al,使用状态l及al自身的属性,调用绘制 系统进行绘制,输出对象指令l的绘制结果。
判断第三个指令为状态指令2,根据状态指令2的内容更新状态1中的一 个或几个状态信息,将更新后的状态集合设为当前状态集合,即状态2为当前 状态集合。
判断第四个指令为状态指令3,根据状态指令3的内容更新状态2中的一 个或几个状态信息,将更新后的状态集合设为当前状态集合,即状态3为当前 状态集合。
9判断第五个指令为对象指令a2,使用状态3及a2自身的属性,调用绘制 系统进行绘制,输出对象指令a2的绘制结果。
判断第六个指令为对象指令a3,使用状态3及a3自身的属性,调用绘制 系统进行绘制,输出对象指令a3的绘制结果。
全部对象指令绘制完毕,版面绘制完成。
在遍历过程中,如果当前遍历对象为非状态指令也非对象指令的情况,则 跳过,继续判断下一个指令。
由以上内容可以看出,有状态版面描述信息具有以下缺点 在有状态版面描述信息中,任何一个对象指令自身都没有包含绘制所需的 完备版面信息。完备版面信息包括对象指令的属性和对象指令的状态信息。 所述状态信息包含在对象指令对应的当前状态集合中,如果要获得某个对象指 令的完备版面信息,必须获得这个对象指令对应的当前状态集合,而要获得所 述当前状态集合,就必须从初始状态开始,遍历这个对象指令之前的所有状态 指令。遍历会导致系统性能低下,比如在版面中包含数万个对象和状态指令的 情况下,如果要获得某个对象指令的完备版面信息,需要做大量的循环工作, 大大降低了工作速度,也浪费了大量资源。

发明内容
有鉴于此,本发明的第一个目的在于,提供一种版面描述信息的转换方法, 将有状态版面描述信息转换为 一种包括对象指令的版面描述信息,所述对象指 令包括完备版面信息,称转换后生成的版面描述信息为无状态版面描述信息, 利用无状态版面描述信息,不需要遍历状态指令即可以获取任意一个或多个对 象指令的完备版面信息。
本发明的第二个目的在于,提供一种版面描述信息的转换方法,能够将无 状态版面描述信息转换为有状态版面描述信息,节省存储空间。
本发明的第三个目的在于,提供一种应用版面描述的装置,不需要遍历就 能够获取对象指令的完备版面信息。为了实现第一个发明目的,本发明提供的技术方案为
一种版面描述信息的转换方法,该方法包括在当前版面描述信息中,遍 历状态指令和对象指令;
如果当前遍历对象为状态指令,则用所述状态指令更新当前状态集合;
如果当前遍历对象为对象指令,则根据当前状态集合和当前对象指令生成 新的对象指令。
以上所述方法中,所述根据当前状态集合和当前对象指令生成新的对象指 令的方法包括
A、 从当前状态集合中提取与所述当前对象指令相关的状态信息;
B、 将步骤A提取的状态信息与所述当前对象指令合并生成新的对象指令。 以上所述方法中,步骤B所述合并生成新的对象指令的方法包括在所述
当前对象指令的属性中添加步骤A提取的状态信息。
较佳地,该方法进一步包括在所述遍历状态指令和对象指令之前新建一 个版面描述信息;在所述生成新的对象指令之后,如果所述新的对象指令是第 一个生成的新的对象指令,则将生成的新的对象指令存为新建版面描述信息中 序列的首位,否则,在新建版面描述信息的序列中,将生成的新的对象指令存 为上一次添加到新建版面描述信息中的对象指令的下一位。
较佳地,该方法进一步包括在所述遍历状态指令和对象指令之前,如果 新建版面描述信息存在初始状态集合,则用所述初始状态集合初始化新建版面 描述信息的当前状态集合,否则将所述新建版面描述信息的当前状态集合设置 为缺省值。
为了实现第二个发明目的,本发明提供的技术方案为 一种版面描述信息的转换方法,该方法包括在当前版面描述信息中,遍 历对象指令;
如果当前遍历对象为对象指令,则判断在当前版面描述信息中的当前对象 指令与当前状态集合是否存在区别状态信息;
如果是,则根据区别状态信息生成状态指令,将所述当前对象指令中的状
ii态信息删除作为新的对象指令;
否则将所述当前对象指令中的状态信息删除作为新的对象指令。
以上所述方法中,所述根据区别状态信息生成状态指令的方法包括
a、 提取对象指令的区别状态信息;
b、 将步骤a提取的区别状态信息转换为状态指令。
较佳地,在当前版面描述信息中的当前对象指令与当前状态集合存在区别
状态信息的情况下,该方法进一步包括
提取对象指令的一个或多个状态信息,将提取的状态信息转换为状态指令。 较佳地,在所述步骤a之后且下一次判断在当前版面描述信息中的当前对
象指令与当前状态集合是否存在区别状态信息之前,用步骤a中提取的区别状
态信息的值替换当前状态集合中相应状态信息的值。
较佳地,该方法进一步包括在遍历对象指令之前新建一个版面描述信息, 将所述新建版面描述信息的初始状态集合和当前状态集合设置为缺省值;
在生成每个新的对象指令或状态指令之后,将所述对象指令或状态指令添 加到新建的版面描述信息中。
为了实现第三个发明目的,本发明提供的技术方案为
一种应用版面描述的装置,该装置包括存储模块、绘制控制模块和绘制引
擎;
所述存储模块用于存储对象指令,所述对象指令具有完备版面信息; 所述绘制控制模块用于读取存储模块中的任意一个或多个对象指令,调用 绘制引擎;
所述绘制引擎用于对绘制控制模块读取到的对象指令进行绘制。 从以上发明内容可以看出,本发明具有以下优点
本发明提供的版面描述信息转换方法将有状态版面描述信息转换为一种包 括对象指令的版面描述信息,所述对象指令包括完备版面信息,称转换后生成 的版面描述信息为无状态版面描述信息。利用无状态版面描述信息,不需要遍 历状态指令即可以获取任意一个或多个对象指令的完备版面信息,解决了由于遍历造成的性能低下、资源浪费等问题。
本发明还提供了一种版面描述信息的转换方法,可以将无状态版面描述信 息转换成目前广泛使用的有状态版面描述信息,节省了存储空间。
本发明还提供了 一种应用版面描述的装置,不需要遍历就能够获取对象指 令的完备版面信息,解决了由于遍历造成的性能低下、资源浪费等问题。


图1为现有技术中版面描述信息的示意图; 图2为根据有状态版面描述信息进行版面绘制的方法流程图; 图3为根据有状态版面描述信息进行版面绘制的实施过程示意图; 图4为本发明实施例一提供的版面描述信息转换的方法流程图; 图5为本发明实施例一提供的版面描述信息转换的实施过程示意图; 图6为本发明实施例二提供的版面描述信息转换的方法流程图; 图7为本发明实施例二提供的版面描述信息转换的实施过程示意图; 图8为本发明实施例三提供的应用版面描述的装置的结构示意图。
具体实施例方式
下面结合具体实施例对本发明提供的方法及装置进行详细说明。 目前广泛使用的版面描述是有状态版面描述信息,而有状态版面描述信息 中,如果要获取任意一个对象指令的完备版面信息,需要遍历所述对象指令之 前所有的状态指令。因此考虑将目前广泛使用的有状态版面描述信息转换为一 种不包括状态指令和状态集合的版面描述信息,称转换后生成的版面描述信息 为无状态版面描述信息,利用无状态版面描述信息,不需要遍历状态指令即可 以获取任意一个或多个对象指令的完备版面信息。
为此本发明提供了 一种版面描述信息的转换方法,该方法包括 在当前版面描述信息中,遍历状态指令和对象指令; 如果当前遍历对象为状态指令,则用所述状态指令更新当前状态集合;如果当前遍历对象为对象指令,则根据当前状态集合和当前对象指令生成 新的对象指令。
所述遍历的方法有很多种,例如,可以按照以下步骤进行从有状态版面描
述信息到无状态版面信息的转换
在当前版面描述信息中,从第一个指令开始,按照指令在序列中的顺序, 依次判断每个指令的类型并根据指令的类型执行相应的操作,直到确定对最后 一个指令执行完相应的操作,结束转换。其中,根据指令的类型执行相应的操
作的方法包括
如果判断指令为状态指令,则用状态指令更新当前状态集合; 如果判断指令为对象指令,则从当前状态集合种提取与对象指令相对应的
状态信息,将所述状态信息添加到对象指令中,进而生成新的对象指令。
本发明提供的版面描述信息转换的方法可以通过循环来实现,从第一个指
令开始,执行以下步骤
A、 判断当前版面描述信息中的当前指令是否为状态指令,如果是,则用 状态指令更新当前状态集合,执行步骤C,否则执行步骤B;
B、 判断当前版面描述信息中的当前指令是否为对象指令,如果是,则根 据当前状态集合和所述对象指令生成新的对象指令,执行步骤C,否则执行步 骤C;
C、 判断当前版面描述信息中的当前指令是否为最后一个指令,如果是, 结束转换,否则将所述当前指令的后一位内容作为当前指令,执行步骤A。
实施例一
图4是本实施例中版面描述信息转换的方法流程图,在本实施例中,实现 了从有状态版面描述信息向无状态版面描述信息的转换。如图4所示 步骤401新建一个版面描述信息。
步骤402以新建版面描述信息的初始状态集合初始化新建版面描述信息的 当前状态集合,如果没有初始状态集合,则将当前状态集合置为缺省值。其中, 缺省值的设置方法与现有技术相同。
14在当前版面描述信息中,按照指令在序列中的顺序,从第一个指令开始,
执行步骤403,即开始遍历
步骤403判断当前版面描述信息中当的前指令是否为状态指令,如果是, 则执行步骤404,否则执行步骤405。
步骤404根据状态指令的内容更新当前状态集合,执行步骤409,更新方 法与现有技术相同。
步骤405判断在当前版面描述信息中的当前指令是否为对象指令,如果是, 则执行步骤406,否则执行步骤409。
步骤406从当前状态集合中提取当前对象指令的状态信息。提取的方法包 括从当前状态集合中,找出与对象指令的类型相对应的状态信息,将所述状 态信息作为对象指令的状态信息。例如,从当前状态集合中提取一个文本类的 对象指令的状态信息,假设当前状态集合中,与文本相对应的状态信息包括字 体和文本风格,字体为宋体,文本风格为斜体,那么就从当前状态集合中,找 出字体和文本风格这两个状态信息作为这个对象指令的状态信息,则对象指令 的状态信息就包括字体为宋体,文本风格为斜体。
步骤407将步骤406中提取出来的状态信息与当前对象指令合并形成新的 对象指令。合并的方法有很多种,本实施例中,在当前对象指令的属性中,添 加步骤406提取的状态信息,将添加了状态信息的当前对象指令作为新的对象 指令,则新的对象指令的属性就包含了完备版面信息。
步骤408将步骤407生成的新的对象指令根据指令添加方法添加到步骤 401新建的版面描述信息中。
所述指令添加方法包括
如果新建版面描述信息根据指令在内存或文件中的存储位置来体现指令在
序列中的顺序,则可以将第一个生成的新的指令放在新建版面描述信息中指令 存储位置的首位,在第一个新的对象指令以后生成的新的对象指令放在上一次 添加到新建版面描述信息中的指令存储位置的后面。
如果新建版面描述信息采用为指令进行编号的方式来体现指令在序列中的顺序,则可以将第一个生成的新的指令编号为新建版面描述信息的序列首位, 存储在新建版面描述信息中,否则将上一次添加在新建版面描述信息中的指令 的编号的下一位作为当前新的指令编号,存储在新建版面描述信息中。
本实施例中,新建版面描述信息根据指令在内存或文件中的存储位置来体 现指令在序列中的顺序。如果步骤407生成的新的对象指令是第一个新的对象
指令,则将步骤407生成的新的对象指令放在新建版面描述信息中序列的首位, 否则在新建版面描述信息的序列中,将步骤407生成的新的对象指令放在上一 次添加到新建版面描述信息中的对象指令的下一位。
步骤409判断当前版面描述信息中的当前指令是否为最后一个指令,如果 是,则执行步骤411,否则执行步骤410。其中,判断当前指令是否为最后一个 指令的方法与现有技术相同。
步骤410将所述当前指令的后一位内容作为当前指令,执行步骤403。
步骤411转换结束。从有状态版面描述信息向无状态版面描述信息转换完 成,新建的版面描述信息即包含了无状态版面描述信息。
以上所述步骤中,步骤403~步骤409为遍历的过程按照当前版面描述信 息中状态指令和对象指令在序列中的先后关系,依次将当前版面描述信息的所 有对象指令转换为具有完备信息的对象指令存入新的输出版面。
在遍历过程中,如果当前遍历对象为非状态指令也非对象指令的情况,即 当前遍历对象为其它指令的情况下,则可以跳过所述其它指令,继续判断下一 个指令,也可以按照指令添加方法将所述其它指令添加到新建的版面描述信息 中。
图5以举例的方式说明了本发明从有状态版面描述信息转换为无状态版面 描述信息的实施过程,如图5所示,假设有状态版面描述信息包括初始状态 集合、对象指令al、对象指令a2、 a3、状态指令l、状态指令2和状态指令3。 将有状态版面描述信息转换为无状态版面描述信息的过程为
首先,新建一个版面描述信息,用于包含无状态版面描述信息。
其次,以当前版面描述信息的初始状态集合初始化当前版面描述信息的当前状态集合,如果没有初始状态集合,则将当前状态集合置为缺省值。
然后从序列的第一个指令一一状态指令1开始进行遍历 判断第一个指令为状态指令1,根据状态指令1的内容更新初始状态集合
中的一个或几个状态信息,将更新后的状态集合设为当前状态集合,即状态1
为当前状态集合。
判断第二个指令为对象指令al,从状态1中提取与al相关的状态信息, 将提取出来的状态信息与al合并,形成新的对象指令bl,将bl添加到新建的 版面描述信息中。
判断第三个指令为状态指令2,根据状态指令2的内容更新状态1中的一 个或几个状态信息,将更新后的状态集合设为当前状态集合,即状态2为当前 状态集合。
判断第四个指令为状态指令3,根据状态指令3的内容更新状态3中的一 个或几个状态信息,将更新后的状态集合设为当前状态集合,即状态3为当前 状态集合。
判断第五个指令为对象指令a2,从状态3中提取与a2相关的状态信息, 将提取出来的状态信息与a2合并,形成新的对象指令b2,将b2添加到新建的 版面描述信息中,放在bl后面。
判断第六个指令为对象指令a3,从状态3中提取与a3相关的状态信息, 将提取出来的状态信息与a3合并,形成新的对象指令b3,将b3添加到新建的 版面描述信息中,方文在b2后面。
有状态版面描述信息向无状态版面描述信息转换完成,新建的版面描述信 息即包含了无状态版面描述信息描述的版面信息,其中,有状态版面描述信息 中的初始状态、对象指令al、 a2和a3、状态指令l、 2和3共同描述的版面信 息与无状态版面描迷信息中的bl、 b2和b3描述的版面信息是相同的。
如图5所示,无状态版面描述信息包括对象指令bl、 b2和b3,其中,每 个对象指令均包括完备版面信息,所述完备版面信息包括对象指令自身的属性 和对象指令的状态信息。例如,bl为一个文本类的对象指令,那么bl中不仅包括文本大小和位置等属性,还包括字体、文本风格、文本颜色、字体矩阵以
及变换矩阵等状态信息;b2为一个图像类型的对象指令,那么b2中不仅包括 图像大小、位置等属性,还包括变换矩阵等状态信息。
无状态版面描述信息中的对象指令也按照顺序构成一个序列,称为无状态 版面描述信息的指令。无状态版面描述信息中,指令体现顺序的方式与有状态 版面描述信息相同可以通过指令的存储位置体现指令在序列中的顺序,也可 以通过对指令的编号来体现指令在序列中的顺序。另外,无状态版面信息中还 可以包括除了对象指令以外的其它指令,也称为无状态版面描述信息的指令。
无状态版面描述信息的使用过程中,例如绘制或编辑开发程序等,可以不 用遍历就能够获取任意一个或多个对象指令的完备版面信息。而获取有状态版 面描述信息中某个对象指令的完备版面信息是很困难的,这需要遍历该对象之 前所有的状态指令。由此可见,本发明提供的版面描述信息转换方法将有状态 版面描述信息转换为无状态版面描述信息,利用无状态版面描述信息,不需要 遍历状态指令即可以获取任意一个或多个对象指令的完备版面信息,解决了由 于遍历造成的性能低下、资源浪费等问题。
由于有状态版面描述信息中,不需要存储每个对象指令所对应的状态信息, 而是通过状态指令体现对象指令相对于当前状态集合的区别状态信息。这样, 利用状态集合和状态指令将所有对象指令的很多公共的状态信息提取出来,在 存储时具有数据量小的优点,因此可以考虑在存储时,将无状态版面描述信息 转换为有状态版面描述信息。为此本发明进一 步提供了 一种版面描述信息的转 换方法,该方法包括在当前版面描述信息中,遍历对象指令;
如果当前遍历对象为对象指令,则判断在当前版面描述信息中的当前对象 指令与当前状态集合是否存在区别状态信息;
如果是,则根据区别状态信息生成状态指令,将所述当前对象指令中的状 态信息删除作为新的对象指令;
否则将所述当前对象指令中的状态信息删除作为新的对象指令。
所述遍历的方法有很多种,例如,可以按照以下步骤进行从无状态版面描
18述信息到有状态版面信息的转换
在当前版面描述信息中,从第一个指令开始,则按照指令在序列中的顺序,
依次判断该指令是否为对象指令如果是,则判断对象指令与当前状态集合是 否存在区别状态信息,并根据判断结果执行相应的操作,否则结束转换。直到 确定对最后一个对象指令执行完相应的操作,结束转换。 其中,根据判断结果执行相应的操作的方法包括
如果存在区别状态信息,则根据区别状态信息生成状态指令,将对象指令 中的状态信息删除作为新的对象指令,否则将对象指令中的状态信息删除作为 新的对象指令。
所述对象指令与当前状态集合的区别状态信息是指,当前状态集合中与对 象指令不同值的相同类型状态信息。例如,对象指令包括的所有状态信息a、 b、
c、 d和e中,状态信息a、 b和c的值与初始状态集合中相应的状态信息a、 b 和c的值存在不同对象指令中状态信息a=l、 b=2、 c=3,而当前状态集合中 a=4、 b=5、 c=6,则认为对象指令的状态信息与当前状态集合中对应的状态信息 存在不同,状态信息a、 b和c即为区别状态信息。则对象指令的区别状态信息 为a=l、 b=2、 c=3;当前状态集合的区别状态信息为a=4、 b=5、 c=6。
如果对象指令包括的全部状态信息的值与初始状态集合中对应的状态信息 的值都完全相同,则认为对象指令的状态信息与初始状态集合之间不存在区别 状态信息。
该方法可以通过循环来实现,例如从第一个指令开始,执行以下步骤
A、 判断在当前版面描述信息中的当前指令是否为对象指令,如果是,则 执行步骤B,否则执行步骤C;
B、 判断在当前版面描述信息中的当前对象指令与当前状态集合是否存在 区别状态信息,如果是,则根据区别状态信息生成状态指令,将对象指令中的 状态信息删除作为新的对象指令,执行步骤C,否则将对象指令中的状态信息 删除作为新的对象指令,执行步骤C;
C、 判断当前版面描述信息中的当前对象指令是否为最后对象指令,如果
19是,结束转换,否则将所述当前对象指令的后一位内容作为当前指令,执行步骤A。
实施例二
图6是本实施例中本发明提供的版面描述信息转换的方法流程图,在本实 施例中,实现了从无状态版面描述信息到有状态版面描述信息的转换,如图6 所示
步骤601新建一个版面描述信息,用于包含有状态版面描述信息。
步骤602初始化新建版面描述信息的初始状态集合和当前状态集合。初始 化的方法包括将初始状态集合和当前状态集合均设置为缺省值。缺省值的设 置方法与现有^t支术相同。
在由状态指令和对象指令的构成的序列中,从序列的第一个指令开始,执 行步骤603,即开始遍历
步骤603判断在当前版面描述信息中的当前指令是否为对象指令,如果是, 则执行步骤604,否则执行步骤611。
步骤604判断所述对象指令与当前状态集合是否存在区别状态信息,如果 是,则执行步骤605,否则执行步骤609。
步骤605提取对象指令的区别状态信息。
步骤606将步骤605中提取的区别状态信息转换为状态指令。状态信息和 状态指令进行相互转换的方法包括可以将状态指令的第一部分转换为状态信 息的类型,将状态指令的第二部分转换为状态信息的值,进而将状态指令转换 为状态信息;也可以将状态信息的类型转换为状态指令的第一部分,将状态信 息的值转换为状态指令的第二部分,进而实现由状态信息到状态指令的转换。
步骤607根据指令添加方法将步骤606转换出的状态指令添加到新建的版 面描述信息中。
所述指令添加方法与实施例二中的步骤408相同。
本实施例中,新建版面描述信息根据指令在内存或文件中的存储位置来体 现指令在序列中的顺序。如果步骤605转换出的状态指令是第一个生成的新的
20指令,则将所述状态指令放在新建版面描述信息中序列的首位,否则在新建版 面描述信息的序列中,将步骤605转换出的状态指令放在上一次添加到新建版 面描述信息中的指令的下一位。
步骤608用步骤605中提取的区别状态信息更新当前状态集合,更新方法 为,用对象指令的区别状态信息的值替换当前状态集合的区别状态信息的值。 例如区别状态信息为状态信息a、 b和c,对象指令中a^, b=2, c=3,当前状 态集合中3=4, b=5, c=6,则将当前状态集合中的状态信息a、 b和c的值替换 为&=1, b=2, c=3,即实现了更新。
步骤609从对象指令的所有属性中去删除状态信息部分,生成新的对象指 令。所述新的对象指令则不包括状态信息,成为有状态版面描述信息的对象指 令。
步骤610根据指令添加方法将步骤609生成的新的对象指令添加到新建的 输出版面中。
所述指令添加方法包括与实施例二中步骤408所述的指令添加方法相同。 本步骤中,如果步骤609生成的新的对象指令是第一个生成的新的指令, 则将步骤609生成的新的对象指令放在新建版面描述信息中序列的首位,否则 在新建版面描述信息的序列中,将步骤609生成的新的对象指令放在上一次添 加到新建版面描述信息中的指令的下一位。
步骤611判断当前版面描述信息中的当前指令是否为最后一个指令,如果 是,则执行步骤612,否则执行步骤613。其中,判断当前指令是否为最后一个 指令的方法与现有技术相同。
步骤612将所述当前指令的后一位内容作为当前指令,执行步骤603。 步骤613转换结束。完成从无状态版面描述信息向有状态版面描述信息的 转换,新建的版面描述信息包含了无状态版面描述信息。图中的无状态版面描 述信息与图中的有状态版面描述信息所描述的是同样的版面信息,例如,根据 图中无状态版面描述信息进行绘制的结果与根据图中有状态版面描述信息进行 绘制的结果是一致的。本实施例的方法流程中,步骤603 步骤610为遍历的过程按照当前版面 描述信息中对象指令在序列中的先后关系,依次将当前版面描述信息的所有对 象指令转换为状态指令和新的对象指令存入新的输出版面。
在遍历过程中,如果当前遍历对象为非对象指令的情况,即当前遍历对象 为其它指令的情况下,则可以跳过所述其它指令,继续判断下一个指令,也可 以按照指令添加方法将所述其它指令添加到新建的版面描述信息中。
其中,步骤608可以在步骤605之后和下一次4丸行步骤604之前的任意阶 段执行。也就是说,用当前版面描述信息中对象指令的区別状态信息更新当前 状态信息这个动作,可以在获取区别状态信息和下一次判断是否存在区别信息 之间的任意阶段执行。
图7以举例的方式说明了本发明从无状态版面描述信息转换为有状态版面 描述信息的实施过程,如图7所示,假设无状态版面描述信息包括对象指令 bl、对象指令b2和对象指令b3,其中bl、 b2和b3均包括各自的完备版面信 息。将有状态版面描述信息转换为无状态版面描述信息的过程为
首先,新建一个版面描述信息,用于包含有状态版面描述信息。
其次,初始化新建版面描述信息的初始状态集合和当前状态集合。初始化 的方法包括将初始状态集合和当前状态集合均设置为缺省值。缺省值的设置 方法与现有技术相同。
然后从序列的第一个指令一一对象指令bl开始进行遍历
判断第一个指令为对象指令bl,比较bl与初始状态集合中是否存在区别 状态信息,本例中对比结果为存在区别状态信息,则提取bl的区别状态信息, 将bl的区别状态信息转换为状态指令,即状态指令1,将状态指令1添加到新 建的版面描述信息中,放在新建版面描述信息中序列的首位。
然后用bl的区别状态信息更新当前状态集合,这时当前状态集合为初始状 态,更新后的当前状态集合为状态1,从bl中删除状态信息部分,生成新的对 象指令al,将al添加到新建的版面描述信息中,放在状态指令l的后面。
判断第二个指令为对象指令b2,比较b2与初始状态集合中是否存在区别状态信息,本例中对比结果为不存在区别状态信息,则保持当前状态集合不变,
即保持状态1不变,从b2中去删除状态信息部分,生成新的对象指令a2,将 a2添加到新建的版面描述信息中,放在al的后面。
判断第三个指令为对象指令b3,比较b3与状态1中是否存在区别状态信 息,本例中对比结果为存在区别状态信息,则提取b3的区别状态信息,将b3 的区别状态信息转换为状态指令,即状态指令2,将状态指令2添加到新建的 版面描述信息中;然后用b3的区别状态信息更新当前状态集合,即状态l,更 新后的当前状态集合为状态2,从b3中去删除状态信息部分,生成新的对象指 令a3,将a3添加到新建的版面描述信息中,放在状态指令2的后面。
无状态版面描述信息向有状态版面描述信息转换完成,新建的版面描述信息 即包含了有状态版面描述信息描述的版面信息,其中,无状态版面描述信息中 的bl、 b2和b3描述的版面信息与有状态版面描述信息中的初始状态、对象指 令al、 a2和a3、状态指令l、 2和3共同描述的版面信息是相同的。
本实施例的实施过程中,在提取区别状态信息后,更新状态集合可以在下一 次判断是否存在区别状态信息之前的任意阶段执行,这使得本方法在实际应用 中具有很大的灵活性,可以将更新状态集合这个步骤灵活的插入允许的范围之 内。
为了提供无状态版面描述信息,也就是为了提供具有完备版面信息的对象 指令,本发明提供了一种应用版面描述的装置,该装置包括存储模块、绘制控 制模块和绘制引擎;
所述存储模块用于存储对象指令,所述对象指令具有完备版面信息;
所述绘制控制模块用于读取存储模块中的任意一个或多个对象指令,调用 绘制引擎对读取到的对象指令进行绘制。
实施例三
图8是本实施例中本发明提供的应用版面描述的装置的结构示意图,本实施 例中的应用版面描述的装置提供了对无状态版面描述信息,如图8所示
本实施例提供的应用版面描述的装置包括存储模块801、绘制控制模块802和绘制引擎803。
存储模块801用于将版面信息存储为对象指令的集合,所述对象指令具有 完备"反面4言 息o
所述绘制控制模块802块用于读取存储模块801中的任意一个或多个对象 指令,在读取对象指令之后,调用绘制引擎803对读取到的对象指令进行绘制。
绘制引擎803用于绘制控制模块提取的对象指令进行绘制,可以为Win32 gdi、 xwindows、 qt、 gtk、 cairo、 libart、 agg等,本实施例中,绘制引擎采用 Win32 gdi来实现。
本发明提供的应用版面描述的装置中,存储模块可以将版面信息存储为无状 态版面描述信息,绘制控制模块可以读取存储模块中的无状态版面描述信息, 进而使本装置能够提供无状态版面描述信息。
本发明提供的应用版面描述的装置中,绘制控制模块不需要遍历就能够读取 存储装置中的任意一个或多个具有完备信息的对象指令,还可以进一步调用绘 制引擎对所述对象指令进行绘制。解决了现有技术中遍历之前所有状态指令才 能获得一个具有完备版面信息的对象指令的缺点。
由以上三 个实施例可以看出,本发明提供的版面描述信息转换的方法及应用 版面描述的装置具有以下优点
本发明提供的版面描述信息转换方法将有状态版面描述信息转换为 一种包 括对象指令的版面描述信息,所述对象指令包括完备版面信息,称转换后生成 的版面描述信息为无状态版面描述信息。利用无状态版面描述信息,不需要遍 历状态指令即可以获取任意一个或多个对象指令的完备版面信息,解决了由于 遍历造成的性能低下、资源浪费等问题。
本发明还提供了 一种版面描述信息的转换方法,可以将无状态版面描述信息 转换成目前广泛使用的有状态版面描述信息,可以充分发挥无状态版面描述信 息的快速高效的优点和有状态版面描述信息的数据量少的优点。例如在同时需 要快速高效和节省存储空间的情况下,可以先通过无状态版面描述信息实现快 速高效的工作,然后通过本发明提供的版面描述信息转换方法,将无状态版面描述信息转换为有状态版面描述信息进行存储,进而节省了存储空间。
本发明提供了 一种应用版面描述的装置,不需要遍历就能够获取对象指令的
完备版面信息,解决了由于遍历造成的性能低下、资源浪费等问题。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护
范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,
均应包含在本发明的保护范围之内。
2权利要求
1、一种版面描述信息的转换方法,其特征在于,该方法包括在当前版面描述信息中,遍历状态指令和对象指令;如果当前遍历对象为状态指令,则用所述状态指令更新当前状态集合;如果当前遍历对象为对象指令,则根据当前状态集合和当前对象指令生成新的对象指令。
2、 根据权利要求1所述的方法,其特征在于,所述根据当前状态集合和当 前对象指令生成新的对象指令的方法包括A、 从当前状态集合中提取与所述当前对象指令相关的状态信息;B、 将步骤A提取的状态信息与所述当前对象指令合并生成新的对象指令。
3、 根据权利要求2所述的方法,其特征在于,步骤B所述合并生成新的 对象指令的方法包括在所述当前对象指令的属性中添加步骤A提取的状态信台、 '"、0
4、 根据权利要求l、 2或3所述的方法,其特征在于,该方法进一步包括 在所述遍历状态指令和对象指令之前新建一个版面描述信息; 在所述生成新的对象指令之后,如果所述新的对象指令是第一个生成的新的对象指令,则将生成的新的对象指令存为新建版面描述信息中序列的首位, 否则,在新建版面描述信息的序列中,将生成的新的对象指令存为上一次添加 到新建版面描述信息中的对象指令的下 一位。
5、 根据权利要求4所述的方法,其特征在于,该方法进一步包括在所述 遍历状态指令和对象指令之前,如果新建版面描述信息存在初始状态集合,则 用所述初始状态集合初始化新建版面描述信息的当前状态集合,否则将所述新 建版面描述信息的当前状态集合设置为缺省值。
6、 一种版面描述信息的转换方法,其特征在于,该方法包括在当前版面 描述信息中,遍历对象指令;如果当前遍历对象为对象指令,则判断在当前版面描述信息中的当前对象指令与当前状态集合是否存在区别状态信息;如果当前对象指令与当前状态集合存在区别状态信息,则根据区别状态信 息生成状态指令,将所述当前对象指令中的状态信息删除作为新的对象指令;如果当前对象指令与当前状态集合不存在区别状态信息,则将所述当前对 象指令中的状态信息删除作为新的对象指令。
7、 根据权利要求6所述的方法,其特征在于,所述根据区别状态信息生成 状态指令的方法包括a、 提取对象指令的区别状态信息;b、 将步骤a提取的区别状态信息转换为状态指令。
8、 根据权利要求6所述的方法,其特征在于,该方法进一步包括 在每次生成新的对象指令之前,提取当前对象指令的一个或多个状态信息,将提取的状态信息转换为状态指令。
9、 根据权利要求7或8所述的方法,其特征在于,在所述步骤a之后且下 一次判断在当前版面描述信息中的当前对象指令与当前状态集合是否存在区别 状态信息之前,用步骤a中提取的区别状态信息的值替换当前状态集合中相应 状态信息的值。
10、 根据权利要求9所述的方法,其特征在于,该方法进一步包括 在遍历对象指令之前新建一个版面描述信息,将所述新建版面描述信息的初始状态集合和当前状态集合设置为缺省值;在生成每个新的对象指令或状态指令之后,将所述对象指令或状态指令添 加到新建的版面描述信息中。
11、 一种应用版面描述的装置,其特征在于,该装置包括存储模块、绘制 控制模块和绘制引擎;所述存储模块用于存储对象指令,所述对象指令具有完备版面信息; 所述绘制控制模块用于读取存储模块中的任意一个或多个对象指令,调用 绘制引擎;所述绘制引擎用于对绘制控制模块读取到的对象指令进行绘制。
全文摘要
本发明公开了一种版面描述信息的转换方法及应用版面描述的装置,在当前版面描述信息中,通过遍历状态指令和对象指令来更新当前状态集合和生成新的对象指令。可以将有状态版面描述信息转换为一种包括对象指令的版面描述信息,利用转换后生成的版面描述信息,不需要遍历状态指令即可以获取任意一个或多个对象指令的完备版面信息。另外,通过遍历对象指令生成状态指令和新的对象指令,还可以将无状态版面描述信息转换成目前广泛使用的有状态版面描述信息,节省了存储空间。
文档编号G06F3/12GK101464782SQ20071017969
公开日2009年6月24日 申请日期2007年12月17日 优先权日2007年12月17日
发明者王东临 申请人:北京书生国际信息技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1