一种动态表格生成方法与系统与流程

文档序号:25351073发布日期:2021-06-08 13:29阅读:116来源:国知局
一种动态表格生成方法与系统与流程

1.本发明涉及电子文档内容自动排版技术领域,具体涉及一种动态表格生成方法与系统。


背景技术:

2.表格是一种数据表现形式,将一些杂乱无章的信息按某种逻辑、结构表现出来,是一种可视化的交流方式,人们在相关日常生活和学术研究中使用着各种各样的表格。
3.在电子文档排版领域,在版式文档中添加表格时,在考虑到美观和结构完整的基础上,需要依次对表格中每个单元格数据进行分析确定位置,还需要对其他相关单元格同步变化。这样生成表格的效率较低,如果表格数据巨大,在无人工干预的情况下,生成表格将变得耗时和繁琐。


技术实现要素:

4.有鉴于此,本发明的目的在于克服现有技术的不足,提供一种动态表格生成方法及系统,该方法在表格样式已经定义的基础上,自动填充相关数据,动态地确定表格线的绝对位置,生成包含数据的表格的通用方法,以实现在减少工作量、提高效率的情况下对各种不同样式的表格进行内容排版与填充。
5.为实现以上目的,本发明采用如下技术方案:一种动态表格生成方法,包括:
6.对表格各单元格进行参数化表示,并对表格进行网格化,确定单元格的空间信息;
7.对每个单元格中的数据内容进行预排版,将数据填充到每个单元格中,同时动态确定每个单元格所占高度;
8.根据所述每个单元格所占高度,确定单元格的坐标信息,合并表格最大外接矩形。
9.可选的,所述对表格各单元格进行参数化表示,并对表格进行网格化,确定单元格的空间序列信息,包括:
10.对表格使用网格细分,将所有表格线进行双向延长至表格外框;
11.对经过网格细分处理后的单元格进行空间信息表示,以唯一定位单元格位置。
12.可选的,所述空间信息,至少包括:
13.单元格的起始行、起始列、行数和列数。
14.可选的,所述对每个单元格中的数据内容进行预排版,将数据填充到每个单元格中,同时动态确定每个单元格所占高度,包括:
15.对每个单元格进行数据内容的填充;
16.计算数据填充后的所有单元格的暂定高度;
17.对表格中每列未处理元素和已处理元素建立链表,将当前列各行单元格的空间信息和单元格的暂定高度组合成的元素插入未处理元素链表中,并按照每列最小行数的最大高度原则对每列未处理元素进行处理,将处理完的单元格的空间信息作为元素插入已处理元素链表中;
18.根据已处理元素链表中的元素,并结合表格合并情况,确定每个单元格的最终高度,得到每个单元格的坐标。
19.可选的,所述对每个单元格进行数据内容的填充,计算数据填充后的所有单元格的暂定高度,包括:
20.如果数据内容为文本内容,则将所述文本内容进行按行排版,从第一行开始,先按相应字体、字号将文本在宽度固定的单元格中的当前行排列,若文本在当前行无法排完,则在下一行继续进行排版,依次类推,直至单元格文本全部排完,最后得到单元格中文本内容的行数k;
21.h
mn
=h
f
k+h
s
(k

1)
22.h
mn
表示当前单元格数据所占高度,k为单元格文本内容的行数,h
f
为单个字符高度,h
s
为行间距;
23.如果数据内容为图像内容,则将所述图像内容直接填充到单元格中;填充后的单元格数据所占高度为:
24.h
mn
=h
image
25.h
mn
表示当前单元格数据所占高度,h
image
为图像高度;
26.将当前单元格数据所占高度与单元格上下边距相加得到单元格的暂定高度h
cell

27.h
cell
=h
mn
+h
margintop
+h
marginbottom
28.h
margintop
和h
marginbottom
分别为单元格上下边距。
29.可选的,所述将当前列各行单元格的空间信息和单元格的暂定高度组合成的元素插入未处理元素链表中,并按照每列最小行数的最大高度原则对每列未处理元素进行处理,将处理完的单元格的空间信息作为元素插入已处理元素链表中,包括:
30.建立单元格的唯一表示,其中,单元格的唯一表示包括:起始行、起始列、行数、列数、填充内容和当前高度,其中,所述当前高度的初值为单元格的暂定高度;
31.对表格中每列未处理元素和已处理元素建立链表,将当前列各行单元格的唯一表示作为元素插入未处理元素链表中;
32.对未处理元素链表中的元素进行处理,具体包括:首先计算当前列中最小行数所在行中各单元格中的最大高度,将所述最大高度作为当前列中最小行数对应单元格的唯一表示中的当前高度的更新数值,在未处理元素链表中删除此元素,同时将更新后的此元素插入已处理元素链表中;遍历未处理元素链表中的元素,直至未处理元素链表为空时,当前列处理完成。
33.可选的,所述根据已处理元素链表中的元素,并结合表格合并情况,确定每个单元格所占高度,包括:
34.通过遍历已处理元素链表中元素,获取所有垂直合并单元格的高度,以及计算构成垂直合并单元格的子单元格高度和;
35.将垂直合并单元格的高度和子单元格高度和进行比较;
36.若垂直合并单元格的高度小于或等于子单元格高度和,则将垂直合并单元格的高度取值为子单元格高度和;
37.若垂直合并单元格的高度大于子单元格高度和,则将垂直合并单元格的高度与子单元格高度和的差值分配给最小高度的子单元格;若所有子单元格高度相等,则将垂直合
并单元格的高度与子单元格高度和的差值平均分配给所有子单元格。
38.可选的,还包括:
39.如果表格高度大于当前文档页面高度时,需将表格后续单元格继续输出到文档下一页,同时在下一页的单元格最上方再次输出表格的表头。
40.本发明还提供了一种动态表格生成系统,包括:
41.表格样式参数化模块,用于对表格各单元格进行参数化表示,并对表格进行网格化,确定单元格的空间信息;
42.表格数据处理模块,用于对每个单元格中的数据内容进行预排版,将数据填充到每个单元格中,同时动态确定每个单元格所占高度;还用于根据所述每个单元格所占高度,确定单元格的坐标信息,合并表格最大外接矩形;
43.所述动态表格生成系统按照如前面任一项所述的方法动态生成表格。
44.本发明还提供了一种控制器,用于执行前面任一项所述的动态表格生成方法。
45.本发明采用以上技术方案,所述一种动态表格生成方法,包括:对表格各单元格进行参数化表示,并对表格进行网格化,确定单元格的空间信息;对每个单元格中的数据内容进行预排版,将数据填充到每个单元格中,同时动态确定每个单元格所占高度;根据所述每个单元格所占高度,确定单元格的坐标信息,合并表格最大外接矩形。本发明所述的技术方案通过将未填充数据前的表格进行网格化,将表格线进行双向延长至表格外框,确定表格中的空间信息,将表格中单元格进行坐标表示,然后确定表格线条最终位置,对各单元格中数据内容进行排版,填充数据内容,按照每列最小行数的最大高度原则,确定每个单元格的坐标,最后合并表格最大外接矩形。本发明可以无干预、自动化生成表格,在表格样式已经定义的基础上,自动填充相关数据,动态地确定表格线的绝对位置,输出数据完整、样式规整的表格,有利于减少工作量、提高工作效率。
附图说明
46.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
47.图1是本发明一种动态表格生成方法实施例一提供的流程示意图;
48.图2是本发明一种动态表格生成方法实施例二提供的流程示意图;
49.图3是本发明一种动态表格生成系统实施例一提供的结构示意图;
50.图4是本发明一种动态表格生成系统实施例二提供的结构示意图。
51.图中:101、表格样式参数化模块;102、表格数据处理模块;201、表格细分模块;202、表格单元格定位模块;203、表格单元格数据处理模块;2031、数据内容排版模块;2032、数据内容高度计算模块;2033、表格单元格高度计算模块;204、表格数据填充模块。
具体实施方式
52.为使本发明的目的、技术方案和优点更加清楚,下面将对本发明的技术方案进行详细的描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基
于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所得到的所有其它实施方式,都属于本发明所保护的范围。
53.图1是本发明一种动态表格生成方法实施例一提供的流程示意图。
54.如图1所示,本实施例所述的一种动态表格生成方法,包括:
55.s11:对表格各单元格进行参数化表示,并对表格进行网格化,确定单元格的空间信息;
56.进一步的,所述对表格各单元格进行参数化表示,并对表格进行网格化,确定单元格的空间序列信息,包括:
57.对表格使用网格细分,将所有表格线进行双向延长至表格外框;
58.对经过网格细分处理后的单元格进行空间信息表示,以唯一定位单元格位置。
59.进一步的,所述空间信息,至少包括:
60.单元格的起始行、起始列、行数和列数。
61.s12:对每个单元格中的数据内容进行预排版,将数据填充到每个单元格中,同时动态确定每个单元格所占高度;
62.进一步的,所述对每个单元格中的数据内容进行预排版,将数据填充到每个单元格中,同时动态确定每个单元格所占高度,包括:
63.对每个单元格进行数据内容的填充;
64.计算数据填充后的所有单元格的暂定高度;
65.对表格中每列未处理元素和已处理元素建立链表,将当前列各行单元格的空间信息和单元格的暂定高度组合成的元素插入未处理元素链表中,并按照每列最小行数的最大高度原则对每列未处理元素进行处理,将处理完的单元格的空间信息作为元素插入已处理元素链表中;
66.根据已处理元素链表中的元素,并结合表格合并情况,确定每个单元格的最终高度,得到每个单元格的坐标。
67.s13:根据所述每个单元格所占高度,确定单元格的坐标信息,合并表格最大外接矩形。
68.具体的,本实施例所述的一种动态表格生成方法在实际使用中,还可依照图2所述的流程进行处理:
69.s21:网格化表格,延长表格实线;
70.s22:确定单元格的空间信息,以起始行、起始列、行数和列数表示表格单元格;
71.具体的,使用起始行、起始列、行数和列数具体定位单元格。例如,某一单元格参数化后为(1,2,3,3),表示此单元格起始于第一行、第二列,并且合并了网格化后的最小单元格中的三行和三列,即大小为3x3的单元格。
72.s23:对每个单元格中的数据内容进行预排版,将数据填充到每个单元格中,计算每个单元格所占高度,定义未处理元素链表和已处理元素链表,按照(起始行,起始列,行数,列数,填充内容,当前高度)的格式存储到未处理元素链表中;
73.具体的,确定表格空间信息后,对表格进行数据化,通过计算每个单元格中数据所占的高度,计算得到某列中最小行数所在行的各单元格的数据所占最大高度h;
74.h=max(h
m1
,h
m2
,h
m3
,...,h
mn
)
75.m为当前列最小行数单元格所在行的行号,n表示网格化后的表格的列数,h
mn
表示当前单元格数据所占高度。
76.所述计算每个单元格中数据所占高度的实现方式中,是根据表格宽度、字体、字号、数据内容与表格边距等变量,对数据内容进行排版后计算获得。
77.具体的,如果数据内容为文本,将文本内容进行按行排版,从第一行开始,先按相应字体、字号将文本在宽度固定的单元格中的当前行排列,若文本在当前行无法排完,则在下一行继续进行排版,依次类推,直至单元格文本全部排完,最后得到单元格中文本内容行数k。
78.h
mn
=h
f
k+h
s
(k

1)
79.h
mn
表示当前单元格数据所占高度,k为单元格文本行数,h
f
为单个字符高度,h
s
为行间距。
80.如果数据内容为图像,则将所述图像直接填充到单元格中;填充后的单元格数据所占高度为:
81.h
mn
=h
image
82.h
mn
表示当前单元格数据所占高度,h
image
为图像高度。
83.将当前单元格数据所占高度与单元格上下边距相加得到单元格的暂定高度h
cell

84.h
cell
=h
mn
+h
margintop
+h
marginbottom
85.h
margintop
和h
marginbottom
分别为单元格上下边距。
86.s24:处理未处理元素链表中的最后一个元素,按照当前列最小行数的最大高度原则对当前列未处理元素进行处理,将根据处理结果对该元素进行更新,并将更新后的元素存入已处理元素链表,将该元素在未处理元素链表中删除;
87.进一步的,按照当前列最小行数的最大高度原则对当前列未处理元素进行处理,具体包括:
88.首先计算当前列中最小行数所在行中各单元格中的最大高度,将所述最大高度作为当前列中最小行数对应单元格的唯一表示中的当前高度的更新数值,在未处理元素链表中删除此元素,同时将更新后的此元素插入已处理元素链表中;遍历未处理元素链表中的元素,直至未处理元素链表为空时,当前列处理完成。
89.s25:判断未处理元素链表是否为空;如果不为空,跳转到步骤s24进行处理,直到未处理元素链表为空;
90.s26:将位于同一行中的垂直合并单元格的高度,与构成垂直合并单元格的子单元格高度和进行比较,取最大值作为当前行最终高度;若垂直合并单元格高度大于子单元格高度和,则将垂直合并单元格的高度与子单元格高度和的差值分配给最小高度的子单元格,若所有子单元格高度相等,则将垂直合并单元格的高度与子单元格高度和的差值平均分配给所有子单元格;
91.s27:合并表格最大外接矩形。
92.进一步的,该方法还包括:
93.如果表格高度大于当前文档页面高度时,需将表格后续单元格继续输出到文档下一页,同时在下一页的单元格最上方再次输出表格的表头。
94.本实施例所述的技术方案通过将未填充数据前的表格进行网格化,将表格线进行
双向延长至表格外框,确定表格中的空间信息,将表格中单元格进行坐标表示,然后确定表格线条最终位置,对各单元格中数据内容进行排版,填充数据内容,按照每列最小行数的最大高度原则,确定每个单元格的坐标,最后合并表格最大外接矩形。本发明可以无干预、自动化生成表格,在表格样式已经定义的基础上,自动填充相关数据,动态地确定表格线的绝对位置,输出数据完整、样式规整的表格,有利于减少工作量、提高工作效率。
95.图3是本发明一种动态表格生成系统实施例一提供的结构示意图。
96.如图3所示,本实施例所述的一种动态表格生成系统,包括:
97.表格样式参数化模块101,用于对表格各单元格进行参数化表示,并对表格进行网格化,确定单元格的空间信息;
98.表格数据处理模块102,用于对每个单元格中的数据内容进行预排版,将数据填充到每个单元格中,同时动态确定每个单元格所占高度;还用于根据所述每个单元格所占高度,确定单元格的坐标信息,合并表格最大外接矩形;
99.所述动态表格生成系统按照如前面图1或图2所述的方法动态生成表格,本实施例所述一种动态表格生成系统的工作原理与前面所述的图1或图2所述动态表格生成方法的工作原理相同,在此不再赘述。
100.为了更加清楚理解本方案的实施过程,下面结合具体实施例以及图4进行详细说明。在图4所示的动态表格生成系统中,对动态表格生成系统进行了更加具体的功能划分,将其分为表格细分模块201、表格单元格定位模块202、表格单元格数据处理模块203和表格数据填充模块204,其中,表格单元格数据处理模块可以进一步划分为数据内容排版模块2031、数据内容高度计算模块2032和表格单元格高度计算模块2033。
101.表格细分模块201:该模块通过对已确定样式的表格使用网格细分,将所有表格线进行双向延长至表格外框;
102.表格单元格定位模块202:该模块用于对经过表格细分模块201处理后的表格中的单元格进行空间信息表示,使用(起始行,起始列,行数,列数)四元组表示表格中单元格,这样可以唯一定位单元格位置;
103.表格单元格数据处理模块203:该模块用于计算表格所有单元格在填充数据后的高度,各单元格高度与所填充数据内容和当前行其他单元格高度相关。首先,建立单元格唯一表示(起始行,起始列,行数,列数,填充内容,当前高度);
104.对表格中每列未处理元素和已处理元素建立链表,将当前列各行单元格的唯一表示作为元素插入未处理元素链表中,将处理完的元素插入已处理元素链表中;
105.当对未处理元素进行处理时,首先计算当前列中最小行数所在行中各单元格中最大高度,将此高度作为单元格唯一表示中的第6个元素的更新值,在未处理元素链表中删除此元素,同时将该元素插入已处理元素链表中;遍历未处理元素链表中的元素,直至未处理元素链表为空时,当前列处理完成。
106.所有列均按进行上述操作,所有列操作完成后,需要通过遍历已处理元素链表中元素,得到所有垂直合并单元格的当前高度,和构成垂直合并单元格的子单元格高度和进行比较,取较大值作为最终高度;
107.h
a
=h1+h2+h3+...+h
k
108.h
a
为子单元格高度和,h
k
为各单元格高度,k为子单元格的个数。
109.若垂直合并单元格高度小于或等于子单元格高度之和,则将垂直合并单元格的高度取值为子单元格高度和。如下所示:
110.if h
a
>=h
b
,h
b
=h
a

111.h
a
为子单元格高度和,h
b
为垂直合并单元格的高度。
112.若垂直合并单元格高度大于子单元格高度之和,则将两者的差值增加到最小高度子单元格。如下所示:
[0113][0114][0115]
k1为子单元格中高度最小的单元格的角标,为高度最小的子单元格高度,h
diff
为垂直合并单元格高度与子单元格高度之和的差值,
[0116]
若所有子单元格高度相等,则将垂直合并单元格的高度与子单元格高度和的差值平均分配给所有子单元格。
[0117]
if h
a
<h
b
,h1==h
j
,j=2,3,4,...,k,let p=(h
b

h
a
)/k,
[0118]
h
i
=h
i
+p,i=1,2,3,4,....,k
[0119]
h
j
为各单元格高度,k为子单元格的个数,h
a
为子单元格高度和,h
b
为垂直合并单元格的高度,p为每个子单元格平均分配到的垂直合并单元格高度与子单元格高度之和的差值。
[0120]
数据内容排版模块2031,用于负责将数据内容按固定宽度插入单元格中,对插入数据内容进行排版;
[0121]
数据内容高度计算模块2032,用于计算排版后数据内容所占的高度;
[0122]
表格单元格高度计算模块2033,用于处理各单元格唯一表示的计算、更新和数据的存储。
[0123]
表格数据填充模块204:用于确定单元格高度,确定表格线条的具体坐标位置,将数据内容填入单元格,合并表格最大外接矩形。
[0124]
进一步的,如果表格高度大于当前文档页面高度时,需将表格后续单元格继续输出到文档下一页,同时在下一页的单元格最上方再次输出表格的表头。
[0125]
本实施例所述的一种动态表格生成系统,在表格样式已经定义的基础上,自动填充相关数据,动态地确定表格线的绝对位置,输出数据完整、样式规整的表格,能够实现在减少工作量、提高效率的情况下对各种不同样式的表格进行内容排版与填充。
[0126]
此外,本发明还提供了一种控制器,用于执行前面任一项所述的动态表格生成方法。
[0127]
可以理解的是,上述各实施例中相同或相似部分可以相互参考,在一些实施例中未详细说明的内容可以参见其他实施例中相同或相似的内容。
[0128]
需要说明的是,在本发明的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明的描述中,除非另有说明,“多个”的含义是指至少两个。
[0129]
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部
分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
[0130]
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(pga),现场可编程门阵列(fpga)等。
[0131]
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
[0132]
此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
[0133]
上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0134]
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
[0135]
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1