盒子排版方法及装置
技术领域
本发明涉及排版技术,尤其涉及一种盒子排版方法及装置。
背景技术
在排版过程中,排版内容除了文字之外,还会有很多的图片、公式或者其他的对象内容,这些除文字以外的对象内容统称为盒子。
当盒子与文字混排时,由于盒子的高度、宽度都和文字有很大差异,往往导致排版结果较差。经常遇到的问题包括:
1:通常盒子都会带有独立成行(独占一行)的属性,那么在盒子所在的上一行,经常出现文字不够一行,强行撑满的情况。
2:在多栏或多页排版中,如果已经排版到当前栏或页的尾部,而剩余的排版高度不够排下盒子,致使盒子被排到了下一栏或下一页,那么就会在当前栏或当前页留下大量空白。
在盒子排版过程中,出现半行强行撑满以及当前栏或页留下大量空白的问题后,需要排版人员进行后期手工精调,费时费力,降低了排版整体效率。
发明内容
本发明提供一种盒子排版方法及装置,用以解决现有技术中对盒子的排版费时费力、效率较低的技术问题。
本发明提供一种盒子排版方法,包括:
对当前行进行排版,排版过程中每遇到盒子,将盒子标识按顺序保存到未排版数组中,忽略所述盒子,继续根据所述盒子后面的文字进行排版;
在排版当前行结束后,判断所述未排版数组中是否有盒子标识;
若有盒子标识,则根据当前页面未排版的空间大小,按照进入所述未排版数组的顺序,对相应的盒子进行排版,并在未排版数组中删除已被排版的盒子标识;
当前页面未排版的空间大小不足以排放下一盒子时,或者,所述未排版数组中的盒子标识被清空时,进行下一行的排版。
进一步地,对相应的盒子进行排版,包括:
若所述盒子的属性为行后,则判断当前页面的下边界值与当前页面已排版的高度之间的差值是否大于所述盒子的高度;
若大于,则将所述盒子紧随当前行或段之后放置。
进一步地,所述方法还包括:
若所述盒子的属性为栏沉底,则判断当前页面的下边界值与当前页面已排版的高度之间的差值是否大于所述盒子的高度;
若大于,则将所述盒子排版到当前栏的最下端;
从已排版数组中查找当前栏中属性为栏沉底的盒子标识,将对应的盒子的位置上移当前盒子的高度;
将当前盒子的盒子标识及排版位置保存到已排版数组中;
将当前页面的下边界值更新为当前页面所有栏沉底和块沉底盒子所占区域的上边界值。
进一步地,所述方法还包括:
若所述盒子的属性为块沉底,则判断当前页面的下边界值与当前页面已排版的高度之间的差值是否大于所述盒子的高度;
若大于,则将所述盒子排版到当前页面的最下端;
从已排版数组中查找当前页面中属性为栏沉底或块沉底的盒子标识,将对应的盒子的位置上移当前盒子的高度;
将当前盒子的盒子标识及排版位置保存到已排版数组中;
将当前页面的下边界值更新为当前页面所有栏沉底和块沉底盒子所占区域的上边界值。
进一步地,所述方法还包括:
整个文档排版结束后,判断所述未排版数组中是否还有盒子标识;
若有,则按照顺序将对应的盒子排到文档中;
其中,先进入所述未排版数组中的盒子标识先进行排版,后进入所述未排版数组中的盒子标识后进行排版。
本发明还提供一种盒子排版装置,包括:
第一排版模块,用于对当前行进行排版,排版过程中每遇到盒子,将盒子标识按顺序保存到未排版数组中,忽略所述盒子,继续根据所述盒子后面的文字进行排版;
判断模块,用于在排版当前行结束后,判断所述未排版数组中是否有盒子标识;
第二排版模块,用于在有盒子标识时,根据当前页面未排版的空间大小,按照进入所述未排版数组的顺序,对相应的盒子进行排版,并在未排版数组中删除已被排版的盒子标识;
第三排版模块,用于当前页面未排版的空间大小不足以排放下一盒子时,或者,所述未排版数组中的盒子标识被清空时,进行下一行的排版。
进一步地,所述第二排版模块具体用于:
在有盒子标识时,根据当前页面未排版的空间大小,按照进入所述未排版数组的顺序,对相应的盒子进行排版;
在未排版数组中删除已被排版的盒子标识;
其中,对相应的盒子进行排版,包括:
若所述盒子的属性为行后,则判断当前页面的下边界值与当前页面已排版的高度之间的差值是否大于所述盒子的高度;
若大于,则将所述盒子紧随当前行或段之后放置。
进一步地,所述第二排版模块还用于:
若所述盒子的属性为栏沉底,则判断当前页面的下边界值与当前页面已排版的高度之间的差值是否大于所述盒子的高度;
若大于,则将所述盒子排版到当前栏的最下端;
从已排版数组中查找当前栏中属性为栏沉底的盒子标识,将对应的盒子的位置上移当前盒子的高度;
将当前盒子的盒子标识及排版位置保存到已排版数组中;
将当前页面的下边界值更新为当前页面所有栏沉底和块沉底盒子所占区域的上边界值。
进一步地,所述第二排版模块还用于:
若所述盒子的属性为块沉底,则判断当前页面的下边界值与当前页面已排版的高度之间的差值是否大于所述盒子的高度;
若大于,则将所述盒子排版到当前页面的最下端;
从已排版数组中查找当前页面中属性为栏沉底或块沉底的盒子标识,将对应的盒子的位置上移当前盒子的高度;
将当前盒子的盒子标识及排版位置保存到已排版数组中;
将当前页面的下边界值更新为当前页面所有栏沉底和块沉底盒子所占区域的上边界值。
进一步地,所述第三排版模块还用于:
整个文档排版结束后,判断所述未排版数组中是否还有盒子标识;
若有,则按照顺序将对应的盒子排到文档中;
其中,先进入所述未排版数组中的盒子标识先进行排版,后进入所述未排版数组中的盒子标识后进行排版。
本发明提供的盒子排版方法及装置,通过对当前行进行排版,排版过程中每遇到盒子,将盒子标识按顺序保存到未排版数组中,忽略所述盒子,继续根据所述盒子后面的文字进行排版,在排版当前行结束后,判断所述未排版数组中是否有盒子标识,若有盒子标识,则根据当前页面未排版的空间大小,按照进入所述未排版数组的顺序,对相应的盒子进行排版,并在未排版数组中删除已被排版的盒子标识,当前页面未排版的空间大小不足以排放下一盒子时,或者,所述未排版数组中的盒子标识被清空时,进行下一行的排版,能够有效避免半行强行撑满以及当前页面留下大量空白的问题,无需排版人员进行后期手工精调,提高了排版整体效率。
附图说明
图1为本发明实施例一提供的盒子排版方法的流程图;
图2为本发明实施例一提供的盒子排版方法中盒子属性设置示意图;
图3为本发明实施例二提供的盒子排版装置的结构框图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本申请实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本申请实施例中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。
应当理解,本文中使用的术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
取决于语境,如在此所使用的词语“如果”、“若”可以被解释成为“在……时”或“当……时”或“响应于确定”或“响应于检测”。类似地,取决于语境,短语“如果确定”或“如果检测(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当检测(陈述的条件或事件)时”或“响应于检测(陈述的条件或事件)”。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的商品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种商品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的商品或者系统中还存在另外的相同要素。
实施例一
本发明实施例一提供一种盒子排版方法。图1为本发明实施例一提供的盒子排版方法的流程图。如图1所示,本实施例中的盒子排版方法,可以包括:
步骤101、对当前行进行排版,排版过程中每遇到盒子,将盒子标识按顺序保存到未排版数组中,忽略所述盒子,继续根据所述盒子后面的文字进行排版。
具体地,在排版之前,整个文档中盒子和文字的顺序已经被预先定好了。在排版过程中,对当前行进行排版时,依次按照文字的顺序进行排版,排到盒子时,将盒子标识保存到未排版数组中,然后不将该盒子排版到当前行中,而是忽略该盒子,继续对盒子后的文字进行排版,直到排完这一行。
其中,所述盒子标识可以为盒子的名称或代码等,在排版过程中,一行可能与遇到一个盒子,也可能会遇到多个盒子,将当前行排版过程中遇到的盒子按顺序保存到未排版数组中,方便后续步骤中按顺序从未排版数组中取出盒子进行排版。
优选的是,可以将盒子标识和放入未排版数组中的时间对应存储,以区分先后顺序。
步骤102、在排版当前行结束后,判断所述未排版数组中是否有盒子标识。
其中,所述未排版数组中的盒子标识可以是当前行遇到的盒子的标识,也可以是之前某行遇到的、但是一直未能排入页面中的盒子的标识。
步骤103、若有盒子标识,则根据当前页面未排版的空间大小,按照进入所述未排版数组的顺序,对相应的盒子进行排版,并在未排版数组中删除已被排版的盒子标识。
其中,先进入所述未排版数组中的盒子标识先进行排版,后进入所述未排版数组中的盒子标识后进行排版。按照顺序依次将未排版数组中的盒子排入当前页面后,可以在未排版数组中删除对应的盒子标识。
步骤104、当前页面未排版的空间大小不足以排放下一盒子时,或者,所述未排版数组中的盒子标识被清空时,进行下一行的排版。
若当前页面未排版的空间不足以排放所述未排版数组中的最靠前的盒子,则进行下一行的排版,能够有效避免当前页面留下大量空白的问题。
所述未排版数组中的盒子标识被清空时,说明已将之前遇到的所有盒子都排版完成了,此时,也可以继续对下一行进行排版,直到整个文档排版结束。
优选的是,盒子的属性可以有四种,包括:行后、段后、栏沉底和块沉底。栏沉底和块沉底的盒子统称为沉底盒子。其中,行后表示盒子放在一行文字的下面,段后表示盒子放在一段文字的下面,栏沉底表示盒子放在一栏的最下方,块沉底表示盒子放在页面的最下方。
在对当前行排版完成后,若当前行不是段落的最后一行,则需要对未排版数组中属性为行后、栏沉底和块沉底的盒子标识进行排版,而不对段后属性的盒子标识进行排版;若当前行是段落的最后一行,则需要对未排版数组中属性为行后、段后、栏沉底和块沉底的盒子标识都进行处理。无论是不是段落的最后一行,都要遵循先进入未排版数组的盒子先被排版的原则。
具体地,步骤103中的中的对相应的盒子进行排版,可以包括:
(1)、若盒子的属性为行后,则判断当前页面的下边界值与当前页面已排版的高度之间的差值是否大于所述盒子的高度;若大于,则将所述盒子紧随当前行之后放置。
其中,当前页面已排版的高度用于表示已排版区域的当前位置,可以等于已排版的文字及盒子(不包括沉底盒子)所占区域的总高度,例如,当前已排版10行文字,每行1cm,则当前排版高度可以为10cm。
当前页面的下边界值,用于表示页面下边界的当前位置,可以等于下边界到排版区域顶端的距离,当有沉底盒子被排入页面时,下边界可能会相应地上移。例如,初始状态下下边界到排版区域顶端的距离为20cm,此时下边界值可以为20cm,当有一个5cm的块沉底盒子被排版到当前页面后,下边界值变为15cm。
假设当前页面的下边界值为15cm,当前页面已排版的高度为10cm,则高度在5cm的盒子才能被排版到当前页面中,若高度大于5cm,则不能被排版到当前页面中。
在盒子排版到当前页面中后,可以根据盒子的高度更新当前页面已排版的高度,更新后的已排版的高度等于原高度加所述盒子的高度。
(2)、若盒子的属性为栏沉底,则判断当前页面的下边界值与当前页面已排版的高度之间的差值是否大于所述盒子的高度;若大于,则将所述盒子排版到当前栏的最下端;从已排版数组中查找当前栏中属性为栏沉底的盒子标识,将对应的盒子的位置上移当前盒子的高度;将当前盒子的盒子标识及排版位置保存到已排版数组中;将当前页面的下边界值更新为当前页面所有栏沉底和块沉底盒子所占区域的上边界值。
为了能够正确处理沉底盒子,对于已经被排版到页面中的盒子,可以将其盒子标识保存到已排版数组中,供后续查找已被排版的沉底盒子。
在当前页面的下边界值与当前页面已排版的高度之间的差值大于盒子高度时,将盒子排版到当前栏的最下端,即沉底,然后,将之前排入本栏的其它栏沉底的盒子都上移当前盒子的高度,保证盒子的沉底顺序不变。
(3)、若盒子的属性为块沉底,则判断当前页面的下边界值与当前页面已排版的高度之间的差值是否大于所述盒子的高度;若大于,则将所述盒子排版到当前页面的最下端;从已排版数组中查找当前页面中属性为栏沉底或块沉底的盒子标识,将对应的盒子的位置上移当前盒子的高度;将当前盒子的盒子标识及排版位置保存到已排版数组中;将当前页面的下边界值更新为当前页面所有栏沉底和块沉底盒子所占区域的上边界值。
与栏沉底不同的是,块沉底的盒子是放置在整个页面的最下端。而栏沉底的盒子放置在栏的最下端,在块沉底盒子的上方。在块沉底盒子被排版到页面中后,可以将已排版数组中的块沉底盒子和栏沉底盒子都相应地上移当前盒子的高度,然后将当前盒子的标识放入已排版数组中。
对块沉底或栏沉底盒子排版完成后,可以将当前页面的下边界值更新为当前页面所有栏沉底和块沉底盒子所占区域的上边界值,即所有栏沉底和块沉底盒子所占区域的上边界相对于排版区域的顶端的高度。
若当前行不是段落的最后一行,则按照上述方法对未排版数组中的行后、栏沉底和块沉底的盒子进行排版即可。若当前行是段落的最后一行,则所述方法还可以包括:
(4)、若盒子的属性为段后,则判断当前页面的下边界值与当前页面已排版的高度之间的差值是否大于所述盒子的高度;若大于,则将所述盒子紧随当前段之后放置。
在当前行排版结束后,在按照顺序对未排版数组中的盒子进行排版的过程中,若盒子的高度小于当前页面的下边界值与当前页面已排版高度之间的差值,则结束对未排版数组中的盒子的排版,直接进行下一行排版,所述未排版数组中的盒子也累计到下一行排版结束后重新进行排版。
在整个文档排版结束后,可以判断所述未排版数组中是否还有盒子标识;若有,则按照顺序将对应的盒子排到文档中。
进一步地,在对盒子进行排版时,可以按照盒子的横向对齐方式合理地放置盒子。所述对齐方式包括:居中、左对齐和右对齐等。
优选的是,盒子的属性和对齐方式都可以由用户实现输入。图2为本发明实施例一提供的盒子排版方法中盒子属性设置示意图。如图2所示,用户可以选择对象智能后移位置:无、下一行、段末、栏沉底和块沉底。
其中,“无”表示该盒子没有智能后移属性,排版时遇到该盒子直接进行排版,而不采用步骤101至104中的方法将其放入未排版数组中等待后续进行排版。“下一行”表示盒子属性为行后,“段末”表示盒子属性为段后,“栏沉底”和“块沉底”分别表示盒子属性为栏沉底和块沉底。
在横向对齐后的三个图标中,用户可以通过点击的方式选择盒子的对齐方式,图中从左至右分别为:左对齐,居中和右对齐。
在实际应用中,对一篇文档进行排版时,对每一行排版都可以用步骤101至104提供的方法完成,即在排版每一行的过程中,均忽略盒子,仅对文字进行排版,因此,不会出现文字不够一行强行占满的情况。在一行结束后,在未排版数组中取出相应的盒子标识,并对对应的盒子进行排版。在当前页面未排版的空间大小不足以排放下一盒子时,或者,所述未排版数组中的盒子标识被清空时,可以继续按照步骤101至步骤104进行下一行的排版,直至整个文档排版结束。
本实施例提供的盒子排版方法,通过对当前行进行排版,排版过程中每遇到盒子,将盒子标识按顺序保存到未排版数组中,忽略所述盒子,继续根据所述盒子后面的文字进行排版,在排版当前行结束后,判断所述未排版数组中是否有盒子标识,若有盒子标识,则根据当前页面未排版的空间大小,按照进入所述未排版数组的顺序,对相应的盒子进行排版,并在未排版数组中删除已被排版的盒子标识,当前页面未排版的空间大小不足以排放下一盒子时,或者,所述未排版数组中的盒子标识被清空时,进行下一行的排版,能够有效避免半行强行撑满以及当前页面留下大量空白的问题,无需排版人员进行后期手工精调,提高了排版整体效率。
实施例二
本发明实施例二提供一种盒子排版装置。图3为本发明实施例二提供的盒子排版装置的结构框图。如图3所示,本实施例中的装置,可以包括:
第一排版模块201,用于对当前行进行排版,排版过程中每遇到盒子,将盒子标识按顺序保存到未排版数组中,忽略所述盒子,继续根据所述盒子后面的文字进行排版;
判断模块202,用于在排版当前行结束后,判断所述未排版数组中是否有盒子标识;
第二排版模块203,用于在有盒子标识时,根据当前页面未排版的空间大小,按照进入所述未排版数组的顺序,对相应的盒子进行排版,并在未排版数组中删除已被排版的盒子标识;
第三排版模块204,用于当前页面未排版的空间大小不足以排放下一盒子时,或者,所述未排版数组中的盒子标识被清空时,进行下一行的排版。
本实施例中的盒子排版装置,可以用于执行实施例一所述的盒子排版方法,其具体实现原理可以参照实施例一,本实施例中不再赘述。
本实施例提供的盒子排版装置,通过对当前行进行排版,排版过程中每遇到盒子,将盒子标识按顺序保存到未排版数组中,忽略所述盒子,继续根据所述盒子后面的文字进行排版,在排版当前行结束后,判断所述未排版数组中是否有盒子标识,若有盒子标识,则根据当前页面未排版的空间大小,按照进入所述未排版数组的顺序,对相应的盒子进行排版,并在未排版数组中删除已被排版的盒子标识,当前页面未排版的空间大小不足以排放下一盒子时,或者,所述未排版数组中的盒子标识被清空时,进行下一行的排版,能够有效避免半行强行撑满以及当前页面留下大量空白的问题,无需排版人员进行后期手工精调,提高了排版整体效率。
进一步地,所述第二排版模块203具体用于:
在有盒子标识时,根据当前页面未排版的空间大小,按照进入所述未排版数组的顺序,对相应的盒子进行排版;
在未排版数组中删除已被排版的盒子标识;
其中,对相应的盒子进行排版,包括:
若所述盒子的属性为行后,则判断当前页面的下边界值与当前页面已排版的高度之间的差值是否大于所述盒子的高度;
若大于,则将所述盒子紧随当前行或段之后放置。
进一步地,所述第二排版模块203还用于:
若所述盒子的属性为栏沉底,则判断当前页面的下边界值与当前页面已排版的高度之间的差值是否大于所述盒子的高度;
若大于,则将所述盒子排版到当前栏的最下端;
从已排版数组中查找当前栏中属性为栏沉底的盒子标识,将对应的盒子的位置上移当前盒子的高度;
将当前盒子的盒子标识及排版位置保存到已排版数组中;
将当前页面的下边界值更新为当前页面所有栏沉底和块沉底盒子所占区域的上边界值。
进一步地,所述第二排版模块203还用于:
若所述盒子的属性为块沉底,则判断当前页面的下边界值与当前页面已排版的高度之间的差值是否大于所述盒子的高度;
若大于,则将所述盒子排版到当前页面的最下端;
从已排版数组中查找当前页面中属性为栏沉底或块沉底的盒子标识,将对应的盒子的位置上移当前盒子的高度;
将当前盒子的盒子标识及排版位置保存到已排版数组中;
将当前页面的下边界值更新为当前页面所有栏沉底和块沉底盒子所占区域的上边界值。
进一步地,所述第三排版模块204还用于:
整个文档排版结束后,判断所述未排版数组中是否还有盒子标识;
若有,则按照顺序将对应的盒子排到文档中;
其中,先进入所述未排版数组中的盒子标识先进行排版,后进入所述未排版数组中的盒子标识后进行排版。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。