具体实施方式
本发明实施例中根据表格对应的平铺式描述,获得所述表格中每个基础网格的信息,然后根据所述每个基础网格的信息,在嵌套式描述中记录所述当前表格中每个表行的行高,以及每个表栏的栏宽,从而实现了对表格描述格式的转换,其具体流程如下,参见图1:
步骤101:根据表格对应的平铺式描述,确定表格中每个基础列的列宽,每个基础行的行高,以及每个基础网格的矩阵信息。
这里,首先从表格对应的平铺式描述中读取每个基础列的列宽,每个基础行的行高,以及每个基础网格横向合并的列数,以及纵向合并的行数,然后根据所述横向合并的列数,确定每个基础网格的矩阵信息中的横向值,以及根据所述纵向合并的行数,确定每个基础网格的矩阵信息中的纵向值。
步骤102:根据每个基础网格的矩阵信息,确定表格中每个表行包含的基础行数,以及每个表栏包含的基础列数,并根据每个基础行的行高,每个基础列的列宽获取表格中每个表行的行高,以及每个表栏的栏宽。
步骤103:用嵌套式描述记录所述每个表行的行高和每个表栏的栏宽。
这里,步骤102可以采用递归的方式获取表格中每个表行的行高,以及每个表栏的栏宽。可以首先获取表行信息,然后获取表栏信息,具体过程参见图2:
步骤201:确定当前表格。
在第一次执行本发明实施例所述的方法时,可以将当整个表格对应的范围作为当前表格。
步骤202:根据当前表格中每个基础网格的矩阵信息,确定当前表格的每个表行的包含的基础行数,并获取每个表行的行高。
这里,可以将所述当前表格对应的基础网格矩阵中每行中每个矩阵信息的纵向值与设定值进行比较;然后根据比较结果确定所述当前表格的每个表行的范围,即每个表行包含的基础行数;并且根据每个表行包含的基础行数,以及每个基础行的行高,获取每个表行的行高。
步骤203:根据当前表行中每个基础网格的矩阵信息,确定当前表行中每个表栏的包含的基础列数,并获取每个表栏的栏宽。
将当前表行的范围中基础网格矩阵中每列信息的的横向值与设定值进行比较,然后根据比较结果确定所述当前表行的每个表栏的范围,即每个表栏包含的基础列数;并根据每个表栏包含的基础列数,以及每个基础列的列宽,获取每个表栏的栏宽。
步骤204:根据当前表栏中的第一基础网格的矩阵信息,步骤203确定的当前表栏包含的基础列数,以及步骤202确定的当前表栏所在的当前表行包含的基础行数,确定当前表栏是否包含子表,如果是将该表栏对应的范围确定为当前表格,转入步骤202。否则,转入步骤205。
这里,当前表栏中的第一基础网格可以为当前表栏范围中的左上方的基础网格,分别将该基础网格的矩阵信息的横向值与当前表栏包含的基础列数,以及该基础网格的矩阵信息的横向值与当前表行包含的基础行数进行比较,当两个比较的结果,都为相等时,确定当前表栏没有子表,转入步骤205,否则,执行该表栏对应的范围确定为当前表格,转入步骤202。
步骤205:是否当前表行的所有表栏都进行了子表分析,即是否当前表行的所有表栏都执行了步骤204,如果是,转入步骤206,否则,将下一个表栏作为当前表栏,返回步骤204。
步骤206:是否当前表格的所有表行进行了子表分析,即是否当前表格的所有表行都执行了步骤203,如果是流程结束;否则,将下一表行作为当前表行,返回步骤203。
当然步骤102还可以首先获取表栏信息,然后获取表行信息,具体过程如下,参见图3:
步骤301:确定当前表格。
步骤302:根据当前表格中每个基础网格的信息,确定当前表格的每个表栏的包含的基础列数,并获取每个表栏的栏宽。
这里,将所述当前表格对应的基础网格矩阵中每列的矩阵信息的横向值与设定值进行比较,然后根据比较结果确定所述当前表格的每个表栏的范围,即每个表栏包含的基础列数;并根据每个表栏包含的基础列数,以及每个基础列的列宽,获取每个表栏的栏宽。
步骤303:根据当前表栏中每个基础网格的信息,确定当前表栏中每个表行的包含的基础行数,并获取每个表行的行高。
可以将所述每个表栏的范围中每行中每个基础网格的纵向值与设定值进行比较;然后根据比较结果确定所述当前表格的每个表行的范围,即每个表行包含的基础行数;并且根据根据每个表行包含的基础行数,以及每个基础行的行高,获取每个表行的行高。
步骤304:根据当前表行中的第一基础网格的矩阵信息,步骤302确定的当前表行所在的当前表栏包含的基础列数,以及步骤303确定的当前表行包含的基础行数,确定当前表行是否包含子表,如果是将该表行对应的范围确定为当前表格,转入步骤302。否则执行步骤305。
这里,当前表行中的第一基础网格可以为当前表行范围中的左上方的基础网格,分别将该基础网格的矩阵信息的横向值与当前表栏包含的基础列数,以及该基础网格的矩阵信息的纵向值与当前表行包含的基础行数进行比较,当两个比较的结果,都为相等时,确定当前表栏没有子表,转入步骤305,否则,执行该表栏对应的范围确定为当前表格,转入步骤302。
步骤305:是否当前表栏的所有表行都进行了子表分析,即是否当前表栏的所有表行都执行了步骤304,如果是,转入步骤306,否则,将下一个表行作为当前表行,返回步骤304。
步骤306:是否当前表格的所有表栏都进行了子表分析,即是否当前表格的所有表栏都执行了步骤303,如果是,流程结束;否则,将下一表栏作为当前表栏,返回步骤303。
下面结合附图,对本发明实施例作进一步的描述。本发明实施例采用递归的方法获取表格中每个表行的行高,以及每个表栏的栏宽。这里,首先获取表行信息,然后获取表栏信息。
一个表格对应的平铺式的描述形式为:
<tbl>
<tblGrid>
<gridCol w=1/>
<gridCol w=1/>
<gridCol w=1/>
</tblGrid>
<tr h=1>
<tc hSpan=1 vSpan=1/>
<tc hSpan=1 vSpan=1/>
<tc hSpan=1 vSpan=2/>
</tr>
<tr h=1>
<tc hSpan=2 vSpan=1/>
<tc hSpan=-1 vSpan=1/>
<tc hSpan=1 vSpan=-1/>
</tr>
<tr h=1>
<tc hSpan=2 vSpan=1/>
<tc hSpan=-1 vSpan=1/>
<tc hSpan=1 vSpan=1/>
</tr>
</tbl>
现将其转换成嵌套式的描述形成,具体流程参见图4:
步骤401:确定表格中每个基础列的列宽,每个基础行的行高,以及每个基础网格的信息,并将该表格作为当前表格。
这里,每个基础网格的信息表示为(x,y),其中x为每个基础网格的信息中的横向值,y为每个基础网格的信息中的纵向值,其中,x为每个基础网格横向合并的列数,y为每个基础网格纵向合并的行数。
上述的表格平铺式的描述中,其中标签<tbl></tbl>之间描述的是平铺描述格式的表格结构。标签<tblGrid></tblGrid>之间描述的是表格的基础网格的列宽信息,标签<gridCol/>表示基础网格的列,其中属性w表示基础列的列宽,标签<tr></tr>之间描述的是表行结构,其中属性h表示基础行的行高。标签<tc/>表示单元格,其中属性hSpan表示横向合并的列数,vSpan表示纵向合并的行数。
因此,根据上述表格的平铺式描述,可以确定本实施中该表格每个基础列的列宽为1,每个基础行的行高也为1,其对应的基础网格,参见表1。
表1
其中,第1行中的第3个基础网格G3横向占据1列,纵向占据2行,因此其对应的基础网格矩阵信息中的数据为(1,2),第2行中的第3个基础网格G6横向占据1列,纵向被上面的基础网格G3合并,因此对应的基础网格矩阵信息中的数据为(1,-1);第2行中的第1个基础网格G4横向占据2列,纵向占据1行,因此对应的基础网格矩阵信息中的数据为(2,1),第2行中的第2个基础网格G5横向被前面的基础网格G4合并,纵向占据1行,因此对应的基础网格矩阵信息中的数据为(-1,1)。以此类推,整个表格对应的基础网格矩阵信息如下所示:
Matrix[3][3]=
{
(1,1),(1,1),(1,2)
(2,1),(-1,1),(1,-1)
(2,1),(-1,1),(1,1)
}
步骤402:根据当前表格中基础网格的矩阵信息,获取当前表格的每个表行的包含的基础行数,即通过每个表行的起始位置和结束位置,确定每个表行的范围。
表格中的第1基础行对应的基础单元矩阵信息分别为(1,1)、(1,1)、(1,2),这里可以将y值与设定值进行比较,这里,设定值可以为0,其中,y值均大于0的,所以该行纵向没有被合并的单元格,此处可将该行作为第一个表行的起始位置,同理,表格中的第3基础行,为嵌套格式的另一个表行的起始位置。因此,表格中的第1,2基础行构成嵌套格式的第一表行,表格中的第3基础行构成嵌套格式的第二表行。
步骤403:获取每个表行的行高。
第一表行由两个基础行构成,因此,其行高为第一个基础行的行高与第二基础行的行高之和,这里,h=2。第二表行由一个基础行构成,其行高为h=1。
步骤404:根据每个表行的范围中每个基础网格的矩阵信息,获取每个表行的范围中每个表栏的包含的基础列数。
这里,第一表行的范围为表格中的第1,2基础行,在第一表行范围的基础网格矩阵信息中,第一列对应的基础网格为G1、G4,其矩阵信息分别为(1,1)、(2,1),其中,x值均大于0的,所以该列横向没有被合并的单元格,此处可将该行作为第一个表栏的起始位置,第一表行的第3基础列对应的基础网格为G3、G6,矩阵信息分别为(1,2)、(1,-1),其中,x值均大于0的,所以该列横向没有被合并的单元格,此处可为嵌套格式的另一个表行的起始位置。因此,第一表行中的第1,2基础列构成嵌套格式的该表行的第一表栏,第3基础列构成嵌套格式的该表行的第二表栏。
第二表行的范围为表格中的第3基础行,同理,第二表行中的第1,2基础列构成嵌套格式的该表行的第一表栏,第3基础列构成嵌套格式该表行的第二表栏。
步骤405:获取每个表栏的栏宽。
第一表行中,第一表栏占用两个基础列,该表栏的栏宽为第一个基础列与第二个基础列的列宽之和,这里,w=2;第二表栏占用一个基础列,该表栏的栏宽w=1。
同理,第二表行中,第一表栏占用两个基础列,该表栏的栏宽w=2;第二表栏占用一个基础列,该表栏的栏宽w=1。
步骤406:判断当前表栏是否包含子表,如果是将该表栏对应的范围确定为当前表格,如果是将该表栏对应的范围确定为当前表格,转入步骤402。否则,转入步骤407。
这里,若当前表栏为第一表行内的第一表栏,其对应的基础网格G1、G2、G4、G5,其中第一基础网格的矩阵信息为G1,它的矩阵信息为(1,1)。
根据上述步骤可知当前表栏占有了两个基础列数,两个基础行数,G1的横向值不等于2,G1的纵向值也不等于2,因此,该表栏存在子表,将该表栏对应的范围,作为当前表格,转入步骤402。对该子表继续进行嵌套递归分析。
若当前表栏为第一表行的第二表栏,其对应的基础网格为G3、G6,其中第一基础网格的矩阵信息为G3,它的基础网格矩阵信息为(1,2),根据上述步骤可知当前表栏占有了一个基础列数,两个基础行数,而G3的横向值正好为1,其纵向值也为2,因此该表栏不包含子表,执行步骤407。
若当前表栏为第二表行内的第一表栏,其对应的基础网格为G7、G8,其中第一基础网格的矩阵信息为G7,它的基础网格矩阵信息为(2,1),同理可知G7的横向值与该表栏占有列数相等,G7的纵向值也与第二表行占有列数相等,因此,因此该表栏不包含子表,执行步骤407。
若当前表栏为第二表行的第二表栏,其对应基础网格G9,其横向值与该表栏占有列数相等,G7的纵向值也与第二表行占有列数相等,因此,因此该表栏不包含子表,执行步骤407。
步骤407:判断是否所有表栏都进行了子表分析,即是否所有表栏都执行了406,如果是,执行步骤408,否则,将下一个表栏的作为当前表栏,返回步骤406。
这里,可以是第一表行内的第一表栏进行了子表分析后,依次分析第一表行内的第二表栏,第二表行内的第一表栏,以及第二表行内的第二表栏。
步骤408:用嵌套式描述记录每个表行的行高和每个表栏的栏宽。
根据上述步骤,可以获得表格中每个表行的行高和每个表栏的栏宽,因此,最终形成的嵌套格式的表格描述结构如下所示:
<BG>
<BHh=2>
<ZB w=2>
<BHh=1>
<BL w=1/>
<BL w=1/>
</BH>
<BHh=1>
<DYG w=2/>
</BH>
</ZB>
<BL w=1/>
</BH>
<BHh=1>
<BL w=2/>
<BL w=1/>
</BH>
</BG>
其中标签<BG></BG>之间描述的是嵌套描述格式的表格结构。标签<BH></BH>之间描述的是表行的结构,其中属性h为表行的行高。标签<ZB></ZB>之间描述的是表栏为子表的结构,其中属性w表示子表或单元格的栏宽,标签<BL/>表示表栏为单元格。
根据上述转换表格描述方式的方法,可以构建一种转换表格描述方式的装置,参见图5:包括确定单元510,获取单元520和记录单元530。
确定单元510,用于根据表格对应的平铺式描述,确定所述表格中每个基础列的列宽,每个基础行的行高,以及每个基础网格的矩阵信息;
获取单元520,用于根据所述每个基础网格的矩阵信息,确定所述表格中每个表行包含的基础行数,以及每个表栏包含的基础列数,并根据所述每个基础行的行高,每个基础列的列宽,获取所述表格中每个表行的行高,以及每个表栏的栏宽
记录单元530,用于用嵌套式描述记录所述每个表行的行高和每个表栏的栏宽。
其中,确定单元510从表格对应的平铺式描述中读取每个基础列的列宽,每个基础行的行高,每个基础网格横向合并的列数,以及纵向合并的行数后,根据所述横向合并的列数,确定每个基础网格的矩阵信息中的横向值,以及根据所述纵向合并的行数,确定每个基础网格的矩阵信息中的纵向值。
获取单元520根据将表格中每个基础网格的矩阵信息中的纵向值与设定值进行比较,根据比较结果,确定表格的每个表行包含的基础行数,并根据每个基础行的行高获得每个表行的行高,然后将每个表行中每个基础网格的矩阵信息中的横向值与设定值进行比较,根据比较结果,确定每个表行中每个表栏包含的基础列数,并根据每个基础列的列宽获取每个表行中每个表栏的栏宽。
这里,获取单元520还分别将每个表栏中第一基础网格的矩阵信息的横向值与该表栏包含的基础列数,以及将所述第一基础网格的矩阵信息的纵向值与该表栏所在表行包含的基础行数进行比较。当两个比较的结果,都为相等时,则,确定当前表栏没有子表,否则,将该表栏对应的范围确定为子表,继续在获取该子表中每个表行的行高,以及每个表栏的栏宽。
当然,获取单元520还可以将表格中每个基础网格的矩阵信息中的横向值与设定值进行比较,根据比较结果,确定每个表栏包含的基础列数,并根据每个基础列的列宽获取所述当前表格的每个表栏的栏宽,然后将所述每个表栏中每个基础网格的矩阵信息中的纵向值与设定值进行比较,根据比较结果,确定每个表栏中每个表行包含的基础行数,并根据每个基础行的行高获取每个表栏中每个表行的的行高。
并分别将每个表行中第一基础网格的矩阵信息的横向值与该表行所在表栏包含的基础列数,以及将所述第一基础网格的矩阵信息的纵向值与表行包含的基础行数进行比较。当两个比较的结果,都为相等时,确定当前表行没有子表,否则,将该表行对应的范围确定为子表,继续获取该子表中每个表行的行高,以及每个表栏的栏宽。
综上所述,本发明实施例中根据表格对应的平铺式描述,确定所述表格中每个基础列的列宽,每个基础行的行高,以及每个基础网格的矩阵信息,然后根据所述每个基础网格的矩阵信息,确定所述表格中每个表行包含的基础行数,以及每个表栏包含的基础列数,并根据所述每个基础行的行高,每个基础列的列宽,最后,在嵌套式描述中记录所述当前表格中每个表行的行高,以及每个表栏的栏宽,这样,实现将表格从平铺式描述格式转换为嵌套式描述格式,从而,排版软件可以兼容其他图文编辑软件的文件。并在进行表格描述格式的转换时,通过基础单元信息矩阵进行计算和判断,减少了表格转换过程的计算量,提高了表格转换效率。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。