背景技术
随着计算机的普及和信息技术的发展,人们日趋采用计算机排版方法来进行自动排版。其中,稿纸方式排版是中文特有的排版方式,而现有的文字处理技术采用的稿纸排版的方法都有所不同。
目前,实现了稿纸方式排版的现有技术主要有微软Office中的Word以及SUN OpenOffice中的Text Document。
一种现有技术采用的方法是通过模板创建稿纸文件,从而实现稿纸方式排版,即通过模板中的“稿纸向导”,设置文章的页面属性、段属性、字属性等各种属性,使得文字排列在预定的稿纸方格中,形成稿纸的式样。
但是,所述方法并不是真正意义上的稿纸方式排版,其不足之处在于:首先,该现有技术需要新建文档再进行选择排版方式的操作,导致浪费机器资源,同时也不利于已有文件直接使用稿纸模式进行排版方式的转换。
其次,该现有技术需要在主程序菜单的“文件”选项中“新建”文档,再选择“其他中文文档”,然后在出现的各种模板类型文档中,选择“稿纸向导”,设置稿纸的工作类型、大小尺寸和排版式样,其处理速度较慢,操作不够便捷。同时,如果要实现稿纸方式排版,则在新建文档时不能选择快捷栏上的新建按钮,因为新建按钮不能选择新建其他类型文档。
再次,该现有技术在处理禁则时容易出现字格错位现象。请参阅图1,由于正常排版是第二行行首出现标点,现有技术为处理禁则的情况引起第一行排版的错位。
另一种现有技术采用页面设置中设置稿纸模式的方法来实现稿纸排版,但其对文字的大小、间距与稿纸模式的大小、间距之间的关系的处理有时并不准确,导致无法保证输入的文字按格编排到稿纸中。请参阅图2,是现有技术中调整行间距引起的排版错位。请参阅图3,是现有技术中将文字设置为大字体后引起的排版错位。
此外,虽然现有技术的排版方法都可以在稿纸上插入图片、图形和表格,但是很难实现稿纸方式的图文混排。
发明内容
由于现有技术在实现稿纸排版时容易出现排版错位的情况,本发明解决的技术问题在于提供一种排版方法,可以克服稿纸方式下的排版错位问题。
在此基础上,本发明解决的另一技术问题是实现稿纸方式的图文混排。
为此,本发明解决技术问题的技术方案是:一种排版方法,用于实现稿纸方式的排版,包括:
1)新建页面的步骤,在排版结果数据结构中建立新的页对象,并添加到页链表中;
2)初始化稿纸的步骤,将文章内容数据结构中的当前排版位置设到文章开始,根据排版方式确定排版参数;
3)取待排文字的步骤,读取文章内容数据结构中的当前排版位置,依次取出段对象、句对象,再从句对象中取出待排文字的内容;
4)初始化字体和段属性的步骤,读取段对象和句对象的属性,设置到排版临时数据结构中;
5)取排版位置的步骤,根据排版结果数据结构的当前排版位置,判断页面的排版区域充足后,计算在页面的排版区域中可以开始排版的行的坐标位置,若不充足则回到步骤1);
6)排列文字的步骤,在排版结果数据结构生成行元,从待排的句对象中取出字符内容,根据排版临时数据结构中的属性排列至对应的行元中。
其中,在所述步骤5)和步骤6)之间还包括取实际排版位置的步骤:比较可排版的行的位置和页面对象的位置,如果两者有重叠,根据重叠的位置将行分割成自由排版空间。
其中,所述取实际排版位置的步骤还包括:判断页面对象的绕排类型,并根据绕排类型分割自由排版空间。
其中,所述取实际排版位置的步骤还包括:将页面对象的位置定位为尾随文字或尾随段。
其中,所述取实际排版位置的步骤还包括比较文字内容与页面对象的层次关系,并根据层次关系确定行的排版位置。
其中,在所述步骤6)中还包括禁则处理步骤:判断禁则符号的排版位置,如果禁则符号位于行首,则调整其排版位置,将其排列在上一行的末尾;如果行首连续出现至少两个禁则符号,则一并调整最后一个非禁则符号的排版位置,将其排列至所述行首。
其中,在所述步骤6)之后进一步判断当前段是否排完,如果排完,则从文章内容数据结构取出下一段待排文字继续处理;如果未排完,则从排版结果数据结构中取下一行排版位置继续处理。
其中,还包括显示步骤:整理排版结果数据结构并显示排版结果。
其中,所述排版结果按如下顺序显示:纸张、正文下对象、稿纸、正文、正文上对象。
相对于现有技术,本发明的有益效果是:首先,由于本发明在初始化字体和段属性的步骤中,从文章内容数据结构读取段对象和句对象的属性并设置到排版临时数据结构中,在编排文字的步骤中,从待排的句对象中取出字符内容,根据排版临时数据结构中的属性排列至对应的行元中,因此可以克服现有技术在稿纸排版时由于调整文字的大小和行间距引起的错位现象;其次,在图文混排方面,由于本发明在取实际排版位置的步骤中,用可排版的行的位置,和页面上的页面对象的位置进行比较,并根据重叠的位置和对象的绕排类型,将行切割成可自由排版的空间,然后排列文字,可以使文字自动对页面对象进行绕排;再次,本发明排版方法中可以定义对象之间的层次关系:如在文章正文下有正文下对象、在文章正文上有正文上对象,所述正文下对象可以在稿纸中实现水印的效果;再次,所述页面对象的位置可以快速定位,如定位在当前排版位置后面以尾随文字或是定位在当前排版位置下面以尾随文字段;再次,可以通过调整排版位置实现禁则处理,较好地解决现有技术的字格错位问题。另外,由于本发明排版方法通过将稿纸方式归属于“页面设置”,对保存好的文档,可以方便快捷地进行普通版面和稿纸版面之间的转换。
具体实施方式
本发明排版方法可以实现稿纸方式的排版,从而满足使用稿纸方式编排版面的办公需求。
请参考图4,是本发明排版的页面结构。其中,页是指显示的页面。排版区域是可以排放文章正文内容的区域,即正文内容将排列在此矩形区域中。行的含义在版式为横排或竖排时有所不同:如果版式为横排,行是指在排版区域中从左到右的一个矩形区域;如果版式为竖排,行为排版区域中从上到下的一个矩形区域,以下的叙述都以横排为例。行元是指存在行中的最小的矩形区域,一行中可以包含多个行元,同一行元中的字符有相同的字体属性,包括字体类型,颜色、粗体、斜体、底纹等等。不同属性的字符处于不同的行元中。
此外,页面上还可以排列页面对象,实现图文混排。所述页面对象是编辑文件,在文章中插入的图形、图像、表格或其它对象,如一段特殊格式的文字,即文字框对象。所述页面对象不随文章正文内容变化而改变位置,还可以具有绕排属性,以确定它对正文排版的影响方式,包括两边绕排、绕排一边、左上绕排、右下绕排、不绕排等属性。图4中是两边绕排的例子:即文章正文内容可以排列在对象的两边、但对象的地方不排列文字。
请参阅图5,本发明排版方法主要涉及到三部分数据结构:文章内容数据结构110,用以表示文章内容,包括文本内容以及图片对象;临时数据结构120,是排版过程中用到的临时数据;排版结果数据结构130,用以表示文章内容在页面上的显示位置。本发明排版方法主要包括步骤:从文章内容数据结构110获取待排版的文章内容;对前述文章内容进行数据处理并生成临时数据结构120;同时生成排版结果数据结构130;排版完成后根据排版结果数据结构130进行显示。
请参阅图6至图8,所述文章内容数据结构110中,文章正文数据表示应显示在文章正文中的文字,不包括各种文本框和各种对象内的文字。所述文章正文数据的结构按照文章、段、句的方式组织,其中,段包含于文章中、句又包含于段中。
请参阅图6,所述文章正文数据包括段链表、排版方式和当前排版位置;其中,段链表包含多个段对象;所述排版方式用以表示文章内容采用横排还是竖排等方式进行排版;所述当前位置即已经排到的段、句的位置,包括当前段位置、当前句位置和当前句内偏移,用以指示排版的位置。
请参阅图7,所述段对象包括句链表和段落的各种属性设置;所述句链表包含多个句对象;所述属性设置包括左、右缩进和首行缩进等等。
请参阅图8,所述句对象包括句内文字和句的各种属性设置,包括字体、颜色、字体修饰等等。
请参阅图9至图12,排版结果数据结构130中,排版后的数据按照页、行、行元的层次进行组织,每层数据中均包含自己的属性数据,页面对象保存在所在的页面中。
请参阅图9,所述排版结果数据包括由多个页对象构成的页链表、全文对象链表、当前页和当前排版位置。
请参阅图10,所述页对象包括页面对象链表、排版区域和页的各种属性数据;所述页面对象链表包括图片对象、文本框对象和图形对象;所述排版区域包括由多个行对象组成的行对象链表;所述属性数据包括页号、页面颜色等等。
请参阅图11,所述行对象包括由多个行元对象组成的行元对象链表和排版区域的当前位置。
请参阅图12,所述行元对象包括相对行对象的坐标位置、本行元对应正文位置和本行元在句内的结束位置。
请参阅图13,是本发明排版时使用的临时数据结构120,包括各种文字的属性和当前排版位置等。
请参阅图14,是本发明排版方法的流程图。本发明排版方法稿纸模式的设置归属于页面设置中,保证了文档在普通版面与稿纸版面之间的转换既方便又快捷。当用户选择稿纸方式排板或改动文档内容后,排版引擎将启动排版方法的流程。
首先实施步骤S1,新建页面;同时实施步骤S2,初始化稿纸;随后实施步骤S3,以段为单位取一段文字准备进行排版。
对一段文字排版时,首先实施步骤S4,初始化字体和段属性;然后实施步骤S5,以行(竖向纸张)或列(横向纸张)为单位取一行或一列的排版位置,此时,判断页面空间是否充足,如果不足则回到步骤S1,重新建立新的页面;如果页面空间充足,则实施步骤S6,通过对绕排的判断取实际排版位置;最后实施步骤S7,排列文字。
当一行或一列位置排版完毕后,判断是否排完整段,如果本段文字尚未排版完毕,则回到步骤S5,取下一行或下一列位置继续进行处理;如果一整段排版完毕,则回到步骤S3,继续取下一段文字准备进行排版。直到文章正文内容全部排版完毕,整理排版数据并进行显示。
其中,步骤S1具体包括:在排版结果数据结构130中创建新的页对象,并添加到页链表的尾部,同时设置排版结果数据结构130的当前排版位置。
步骤S2具体包括:将文章内容数据结构110中的当前排版位置设到文章开始,根据排版方式如稿纸的类型(横竖稿纸)、纸张的大小确定所能容纳的文字的大小、文字的方向等排版过程需要用到的参数。
步骤S3具体包括:读取文章内容数据结构110中的当前排版位置,即当前段、句编号以及句内偏移,然后根据段、句的编号依次取出段对象、句对象,再从句对象中取出待排文字的内容。
步骤S4具体包括:取出段对象中的首行缩进、段左缩进、段右缩进等属性设置到排版临时数据结构的段属性中,取出句对象中的字体属性,设置到排版临时数据结构的字属性中,并根据字体类型和字体属性得到英文和中文的字体宽度表,并将此表设置到排版临时数据结构的当前中文和英文字体宽度表中。
步骤S5具体包括:根据排版结果数据结构130的当前排版位置,即排版到当前页的第几行,判断页中的排版区域是否还有空间。如有,计算在排版区域中下一句可以开始排版的行的坐标位置,在已排版的行下面生成新的一行;如果没有返回到新建页面的步骤S1,新建一页再进行排版。
步骤S6具体包括:用可排版的行或者列的位置,和页面上的页面对象的位置进行比较。如果两者有重叠,根据重叠的位置和对象的绕排类型,将行切割成一组矩形区域,称为可以自由排版的空间。
所述页面对象的位置可以快速定位,如定位在当前排版位置后面,即尾随在某文字后面;或是定位在当前排版位置下面,即尾随在文字段。
请参阅图15,在切割自由排版空间时,本发明排版方法中可以定义对象之间的层次关系:如在文章正文下有正文下对象、在文章正文上有正文上对象,所述正文下对象可以在稿纸中实现水印的效果。
如行中间存在一个对象,且对象的绕排属性为两边绕排,则行被对象分为左右两个自由排版空间。请参阅图16,所切分出来的一组矩形空间是“取一行”,“或一列排版”和“位置”三段文字所在的矩形空间。
如果对象绕排属性为只绕排一边,则只有对象一边的空间可以作为自由排版空间。
步骤S7是排列文字,将取出的待排的句内文字内容中每个文字依次编排在矩形区域中,直到排完整句文字,或者用光所有矩形区域为止。具体包括步骤:取出可自由排版的空间,生成新的行元,从当前排版的句对象中取出句内文字内容即字符内容,依次对每个字符进行排版:如果字符是中文字符,则将该字符排列在一个稿纸格中,如果是英文字符,因为英文字符的每个宽度是不同的,而且粗体等属性也会影响字符的宽度,所以需要从排版临时数据结构120的当前字符宽度表中取出此字符的宽度,依次进行排列,直到句内的文字被排完,读取下一个句对象,继续处理;或者一个自由排版空间被排完,则取出下一个可自由排版的空间继续处理,直到排完整个行中的所有自由排版空间。
当一行或一列位置排版完毕后,判断是否排完整段,如果本段文字尚未排版完毕,则回到步骤S5,取下一行或下一列位置继续进行处理;如果一整段排版完毕,则回到步骤S3,继续取下一段文字准备进行排版。直到文章正文内容全部排版完毕,整理排版数据并进行显示。
显示是指在排版结束以后,将排版结果以图形的方式展示出来。显示是按照一定的顺序进行的,当不同的对象重叠时,后显示的对象会覆盖掉前面显示的对象,因此以特定的顺序显示不同的对象,可以达到层叠的效果。
本发明排版方法中,可以采用如下显示顺序:纸张,包括纸张的颜色、边框、阴影等;正文下对象,页面中的所有叠放位置“在文字下”的对象;稿纸,稿纸本身的边框线;正文,在稿纸中显示的正文;文字上对象,页面中所有叠放位置为“在文字上”的对象。
此外,本发明排版方法还可以严格按照中文稿纸书写规范来处理禁则。排版时,如果有一个禁则符号(如标点符号)出现在任意行的行首,则调整当前排版位置,将此符号排版在上一行的末尾,设置在最后一个稿纸格的外面,保证此行文字排版不会发生位置混乱等问题。
请参阅图17,如果连续出现两个或多禁则符号在行首,则在调整当前排版位置时,要连最后一个非禁则符号一起转到下一行继续排版。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。