具体实施方式
本发明方法适用于添加锚点对象互斥区域后将会导致锚点位置发生动态变化的互斥对象,主要目的是实现多种互斥方式的锚点对象的图文混合绕排的效果,同时保持锚点对象跟随锚点流动,从而解决现有技术中只有向下互斥的图文绕排效果的问题,丰富排版效果。以下,将结合附图和实施例对本发明进行详细描述。
图1是根据本发明的图文互斥的排版方法的流程图。参照图1,该方法包括以下步骤:
步骤S1、初始设置步骤
在该步骤中,用户设置锚点对象属性参数,然后根据锚点属性参数值获取锚点和锚点对象之间的相对偏移距离目标值以及锚点对象的初始排版位置。
其中,所述锚点对象属性参数用于对锚点对象进行定位,主要包括锚点对象的锚定类型和偏移参数、九宫位等。锚定类型定义锚点对象的参照对象,可设为页、锚点、栏、框架等。比如,当选择锚定类型为页时,偏移参数表示锚点对象相对于锚点所在页的偏移数值,当选择锚定类型为锚点时,偏移参数表示锚点对象相对于锚点的偏移数值。九宫位表示锚点对象参照锚定类型所指定的参照对象的参照点,包括左上点、中上点、右上点、左中点、中间点、右中点、左下点、中下点和右下点。由于本发明的目的是保持锚点和锚点对象之间的相对位置关系不变,所以优选设置锚定类型为锚点,九宫位选择锚点对象的左上点,此时,根据所设置的偏移参数就可获知所要达到的锚点和锚点对象之间的相对偏移距离目标值。
设置好锚点属性参数值之后,根据此时锚点的位置和所设置的偏移参数计算锚点对象的初始排版位置。比如,在设置锚定类型为锚点的情况下,对于向上互斥,锚点对象的初始排版位置即为设置锚点时锚点的纵向位置减去所设置的偏移参数。
步骤S2、试排步骤
在该步骤中,通过在当前排版区域内进行反复试排来寻找将锚点和锚点对象排在当前排版区域内的最佳排版位置。
具体地讲,在试排过程中判断在当前排版区域内能否按照用户设置的位置关系排下锚点和锚点对象,如果能排下,则寻找使锚点和锚点对象之间的相对偏移距离等于相对偏移距离目标值的锚点对象最佳排版位置,如果不能排下,则通过反复调整互斥区域大小、然后添加互斥区域进行试排来寻找使锚点和锚点对象能够在当前排版区域内排下的锚点对象最佳排版位置。
更具体地讲,首先,通过在当前排版区域内进行反复试排的方法来判断在当前排版区域内能否排下锚点和锚点对象。即,保持锚点对象位于当前位置不动,添加互斥区域,进行文字排版区域划分,计算重排点,然后从该重排点开始试排。当排版到锚点时,获取此时锚点和锚点对象的排版位置,并判断锚点是否和锚点对象在同一个排版区域内。可通过将锚点的横向排版位置和当前排版区域的横向区域做比较来进行判断。如果锚点的横向排版位置在当前排版横向区域范围内,则判断锚点和锚点对象在同一个排版区域内。如果确定在当前排版区域内不能排下锚点和锚点对象,则先减小互斥区域,再进行试排,并在该排版区域内寻找能在当前排版区域内排下锚点和锚点对象的最佳排版位置。如此重复执行试排、判断和重排点计算操作,直到将锚点和锚点对象在当前排版区域内排下。
这里,最佳排版位置有两种含义,在同一个排版区域内有足够空间按照用户设置的位置关系排下锚点和锚点对象的情况下,最佳排版位置是指使锚点和锚点对象之间的相对偏移距离等于相对偏移距离目标值的锚点对象位置,在同一个排版区域内没有足够空间按照用户设置的位置关系排下锚点和锚点对象的情况下,最佳排版位置是指尽量使锚点和锚点对象在同一个排版区域内排下的锚点对象位置。其中,添加互斥区域后进行文字排版区域划分属于现有技术,因此,省略其描述(可参见申请号为200610066880.8的中国专利申请“一种排版领域的图文绕排方法”)。
根据这种技术方案,通过反复试排来寻找锚点对象的最佳排版位置的步骤包括以下步骤:
第一步、通过反复添加互斥区域进行试排来寻找使锚点和锚点对象之间的相对偏移距离等于相对偏移距离目标值的锚点对象最佳排版位置,并在试排的过程中判断在当前排版区域内能否按照用户设置的位置关系排下锚点和锚点对象,如果能排下则继续重复此步骤进行试排寻找最佳位置,如果不能排下,则执行第二步;
第二步、通过反复调整互斥区域大小然后添加大小减小的互斥区域进行试排来寻找使锚点和锚点对象能够在当前排版区域内排下的锚点对象最佳排版位置。
步骤S3、重排点计算及重排步骤
在该步骤中,根据锚点对象最佳排版位置计算重排点,重新排版。具体地,保持锚点对象位于最佳排版位置,根据排版区域大小、互斥区域大小和锚点对象大小进行文字排版区域划分,计算受到影响的文字流的起始位置作为重排点。然后,从重排点开始按照文字排版区域划分进行排版。其中,区域划分与上述试排过程中的区域划分过程相同,从重排点开始按照区域划分进行排版属于现有技术,因此,省略其描述。利用重排点可设定从该点所在字符位置开始排版,这样对于不需要重新排版的文字可以不重新排版,而只对排版结果的位置发生变化的文字进行重新排版,能够提高排版效率。
以下,将参照图2和图3详细描述第一步和第二步中的试排步骤。首先,为了便于描述,设置以下参数:
h:锚点和锚点对象之间的相对偏移距离目标值;
y:锚点对象的排版位置;
z:锚点的排版位置;
H;锚点和锚点对象的排版位置之间的间距,即,相对偏移距离;
low:锚点对象的上限位置;
high:锚点对象的下限位置。
图2是第一步中试排过程的流程图。参照图2,在第一步中,每次试排执行以下步骤:
首先,在步骤S201中,设置锚点对象在当前排版区域内的上限位置和下限位置,以在上限位置和下限位置之间的区间内找到锚点对象的最佳排版位置。
如前所述,本发明旨在实现锚点对象向上互斥的图文绕排效果,而当在排版区域内添加这样的锚点对象时,由于互斥区域(在其区域内不允许排文字,文字在该区域周围形成绕排的效果)对排版区域的互斥,将会导致文字流内的锚点的位置发生动态变化,从而导致锚点和锚点对象之间的相对位置关系发生变化。因此,为了能够在当前排版区域内较快地找到锚点对象的最佳排版位置,可在一定的范围进行试排,然后逐步缩小范围进行多次试排。鉴于这种考虑,首先需要设置锚点对象在排版区域内的上限位置和下限位置。
在试排过程中,可以确定的是,只要锚点和锚点对象能够在当前排版区域内排下,那么锚点对象的位置一定是在排版区域内锚点对象可排的最靠前的上限位置和最靠后的下限位置之间。因此,在第一次试排时,可将锚点对象的上限位置low设为锚点对象在排版区域内的最靠前的位置,下限位置high设置锚点对象在排版区域内的最靠后的位置。在以后试排操作中,则要根据不同的情况调整锚点对象的上限位置low和下限位置high。
接着,在步骤S202中,启动试排,即,保持锚点对象位于当前排版位置,添加互斥区域,根据排版区域大小、互斥区域大小和锚点对象大小进行文字排版区域划分,计算受到影响的需要重新排版的文字流的起始位置作为重排点,并从该重排点位置开始试排。这里,重排点是指在该点位置之后的文字流需要按照添加互斥区域之后所划分的区域进行重新排版,而该位置之前的文字流则不需要再重新排版。比如,可将受到影响的文字流中的第一行文字流中的行首字符作为重排点。
当排版到锚点时,锚点的当前排版位置z相对于前一次试排或初始设置时锚点的位置一般都会发生偏移,从而导致锚点和锚点对象之间的相对位置关系发生动态变化。因此,在步骤S203中,获取锚点对象的当前排版位置y和锚点的当前排版位置z,并在步骤S204中判断当前区域内能否排下锚点和锚点对象。
如果确定不能排下,则转到图3所示的步骤S300,在步骤S300中,减小互斥区域的大小。
如果确定能够排下,则继续在图2的步骤S205中计算这两个排版位置之间的间距H。在步骤S205中计算当前锚点和锚点对象之间的间距H之后,在步骤S206中,判断间距H是否等于目标值h。如果H=h,则执行步骤S207。在步骤S207中,结束试排,并确定当前锚点对象位置即为最佳排版位置。如果H不等于h,则在步骤S208中判断H是否大于h。
如果H<h,则执行步骤S209。在步骤S209中,修改下限位置high,并锚点对象的当前排版位置y和当前上限位置low之间取得新的锚点对象位置。新的锚点对象位置的获取方法可以是,但不限于是,二分算法。然后,从步骤S201开始重复上述步骤。
如果H>h,则执行步骤S210。在步骤S210中,修改上限位置low,并在锚点对象的当前排版位置y和当前下限位置high之间取得新的锚点对象位置。新的锚点对象位置的获取方法可以是,但不限于是,二分算法。然后,从步骤S201开始重复上述步骤。
图3是第二步中试排过程的流程图。在第二步试排过程中,通过减小锚点对象互斥区域的大小来使锚点和锚点对象可在当前排版区域内排下。因此,首先,在步骤S300中,减小互斥区域大小。接着,在步骤S301中,可根据互斥区域的大小来设置上限位置low和下限位置high。比如,可将锚点对象的上限位置low设为减小的互斥区域的大小,下限位置high设置为锚点对象在排版区域内的最靠后的位置。然后,在步骤S302中,保持锚点对象位于当前排版位置不动,添加预留空间减小的互斥区域,根据排版区域大小、减小的互斥区域大小和锚点对象大小进行文字排版区域划分,计算重排点,并从该重排点位置开始试排。当排版到锚点时,在步骤S303中,获取此时锚点和锚点对象的位置,并在步骤S304中判断此时锚点和锚点对象是否在同一个排版区域内,如果不能在同一个排版内,则从步骤S300开始重复以上步骤,继续减小互斥区域大小,并再次进行试排。如果锚点和锚点对象能在同一个排版区域内排下,则转到图2的步骤S205,重复执行图2的步骤。减小互斥区域的方法可以是,但不限于是,每次减小排版一行的高度,或者利用二分法减小互斥区域的大小,即,每次减小互斥区域大小的一半。
通过图2和图3所示的试排方法,可保证在同一个排版区域内排下锚点和锚点对象,特别是在同一个排版区域内有足够空间按照用户设置的位置关系排下锚点和锚点对象的情况下,保持锚点和锚点对象之间的相对位置关系不变,而在同一个排版区域内没有足够空间按照用户设置的位置关系排下锚点和锚点对象的情况下,尽可能地通过减小互斥区域大小来保持锚点和锚点对象之间的相对位置关系不变,并保持锚点对象和锚点在同一个排版区域内。只是,这时已经不是用户所要求的预期效果了,可以提供提示信息给用户,以供用户选择是否继续。
以上参照图1、图2和图3对本发明方法进行了概括性说明。以下,将就锚点对象向上互斥进行举例说明。
(向上互斥的锚点对象)
如前所述,本发明的目的是在同一个排版区域内有足够空间排下锚点和锚点对象的情况下当锚点流动时保持锚点和锚点对象之间的相对偏移距离不变。对于向上互斥而言,就是说,保持锚点和锚点对象之间的相对纵向偏移距离不变。此时,上限位置low是指锚点对象的顶边上限位置,下限位置high是指锚点对象的底边下限位置加上排版区域的底部位置。此外,根据设置九宫位的不同,可进一步缩小上限和下限的范围,本发明以九宫位为左上点为例说明:对于九宫位设置为左上点,则上限位置即为锚点和锚点对象之间的相对偏移距离目标值的负值;下限位置即为排版区域的高度减去锚点和锚点对象之间的相对偏移距离目标值;其他九宫位情况与此类似。锚点对象的当前排版位置y是指锚点对象的顶边当前排版位置,锚点的当前排版位置z是指锚点的当前纵向排版位置,相对偏移距离是指锚点的当前纵向排版位置z和锚点对象的顶边当前排版位置y之间的偏移距离,相对偏移距离目标值的物理意义如图5中字母h所示。
首先,在步骤S1中,如图4所示,当排版到“伍德罗·威尔逊”时,将锚点位置设为“逊”后面的位置,即,图4中箭头所示位置。然后,根据此时锚点的纵向位置和所设置的锚点对象的偏移参数计算锚点对象的初始排版位置。具体地讲,对于向上互斥,锚点对象的初始排版位置为此时锚点的纵向位置坐标值减去偏移参数数值。
接着,在步骤S2中,通过试排寻找锚点对象的最佳排版位置。
具体地,在第一次试排时,考虑到锚点对象在当前整个排版区域内可排的最靠前的位置有可能超出排版区域上限,所以将锚点对象的顶边上限位置low设置为锚点对象高度的负值。另外,考虑到锚点对象在当前整个排版区域内可排的最靠后的位置有可能超过排版区域的下限,所以将锚点对象的底边下限位置high设为排版区域的底部位置加上锚点对象的高度。此外,如上所述,还可以根据九宫位的设置来缩小上限和下限的位置。比如,当九宫位设置为左上点时,上限位置即为锚点和锚点对象之间的相对偏移距离目标值的负值,下限位置即为排版区域的高度减去锚点和锚点对象之间的相对偏移距离目标值。
接着,保持锚点对象不动,添加互斥区域进行试排。当排版到锚点时,获取锚点对象的顶边当前排版位置y和锚点的当前纵向排版位置z,并计算这两个纵向排版位置之间的间距H。如果H<h,则修改下限位置high,并锚点对象的当前纵向排版位置y和当前上限位置low之间取得新的锚点对象位置。优选地,采用二分算法,即,令high=y,y=(y+low)/2。如果H>h,则修改上限位置low,并在锚点对象的当前纵向排版位置y和当前下限位置high之间取得新的锚点对象位置。优选地,采用二分算法,即,令low=y,y=(high+y)/2。经过反复多次试排,直到H=h。
在获取最佳排版位置之后,保持锚点对象位于该位置不动,添加互斥区域,根据排版区域大小、互斥区域大小和锚点对象大小进行文字排版区域的划分,并计算重排点,然后从该重排点开始按照所划分的区域进行排版。图4所示排版文件中添加向上互斥的锚点对象的效果如图5所示。从图5可看出,在当前排版区域内有足够空间排下锚点和锚点对象的情况下,能够实现预期的向上互斥的图文绕排效果,同时保持二者之间的相对纵向偏移距离恒为h。图4所示排版文件为横向排版,但是,本发明同样适用于纵向排版。
对于在试排过程中判断当前排版区域内不能按照所设置的位置关系排下锚点和锚点对象时,则通过减小互斥区域大小来将锚点和锚点对象排下同一个排版区域内。
图6是待添加向上互斥的锚点对象的排版文件,在该排版文件中,将锚点设置在“伍德罗·威尔逊”的后面的字符处。但是,由于锚点位置在当前排版区域内过于靠后,因此,必须通过减小互斥区域的方法来使锚点和锚点对象在当前排版区域内排下,其效果图如图7所示。
从以上方法可看出,本发明通过反复试排,可以达到当锚点和锚点对象在同一个排版区域内流动时二者之间的纵向距离保持相对不变、横向绝对位置不变的图文绕排效果。
图8是按照向上互斥方法对一个简历模板生成的向右互斥的效果图。从图8可看出,锚点设置在“姓名”的前面(如箭头所示),锚点对象照片锚定在锚点的右侧,当锚点流动时,锚点对象将保持图示相对位置关系随锚点一起流动,并对锚点对象周围的文字形成绕排。
同样,图9也是向上互斥的一个例子,锚点对象互斥了锚点右侧的文字内容。
相应地,本发明提供一种支持图文互斥的排版系统。如图10所示,该系统包括锚点参数设置界面10、图文互斥处理单元20、排版单元30和输出单元40。其中,图文互斥单元20进一步包括:试排单元21根据用户通过锚点参数设置界面10设置的锚点属性参数值获取锚点和锚点对象之间的相对偏移距离目标值以及锚点对象的初始排版位置,通过在当前排版区域内添加互斥区域进行反复试排来寻找将锚点和锚点对象排在当前排版区域内的最佳排版位置,在试排过程中如果发现在当前排版区域内不能排下锚点和锚点对象,则通过减小互斥区域的方法进行反复试排来寻找锚点和锚点对象排在该排版区域内的最佳排版位置,并将最佳排版位置发送给重排计算单元22;重排计算单元22,保持锚点对象位于最佳排版位置,添加互斥区域,根据互斥预留空间、锚点对象大小以及文字流内容进行文字排版区域划分,计算受到影响的文字流的起始位置作为重排点,并将重排点和所划分的区域发送给排版单元30。排版单元30从重排点开始按照所划分的区域进行排版,并将排版结果发送给输出单元40。这里,试排单元21和重排计算单元22的操作与上述方法中相应步骤相同,因此,省略其描述。
从以上描述可看出,本发明在排版过程中通过反复添加互斥区域进行试排来寻找最佳排版位置,以使锚点对象能够跟随锚点流动,始终保持在同一个排版区域内排版,尤其是在同一个排版区域内能够有足够的空间按照用户所设置的位置关系排下锚点和锚点对象的情况下,保持当锚点对象随锚点流动时二者之间的相对位置关系不变。即使同一个排版区域内没有足够的空间排下锚点和锚点对象时,也尽可能通过减小互斥区域大小来使锚点和锚点对象能够在该排版区域内按照所设置的位置关系排版。通过这种方法,实现了多种互斥方式的锚点对象的图文绕排效果,极大地丰富了现有的图文互斥效果。
以上参考实施例描述了本发明。但是,本领域的技术人员应该理解,本发明不限于所公开的实施例,在不脱离本发明的基本原理的情况下,任何类似的修改、替换或变形都应包括在本发明的保护范围内。