具体实施方式
本发明实施例提供了一种流式文档的处理方法及装置,用于将流式文档转化为版式文档,正确呈现目录;增强文档在不同设备上显示时的自适应性,提高用户体验。
参见图2,本发明实施例提供的一种流式文档的处理方法包括:
S201、确定流式文档中的目录,并从流式文档中获取目录的内容信息;其中包括每一目录项中描述信息的内容信息;
S202、通过排版确定每一目录项中描述信息的位置信息,每一目录项中引用页码的位置信息和排版后每一目录项所在的页码;
S203、根据所述每一目录项中描述信息的位置信息和引用页码的位置信息,以及每一目录项中描述信息的内容信息,确定每一目录项中制表符的属性信息;
S204、根据所述目录的内容信息,所述每一目录项中描述信息的位置信息、每一目录项中引用页码的位置信息和排版后每一目录项所在的页码,以及所述每一目录项中制表符的属性信息,将目录映射至版式文档。
较佳的,所述确定流式文档中的目录,包括:获取流式文档中的全部文字段落的内容信息;根据所述全部文字段落的内容信息和目录的特征,确定目录的开始区域和结束区域。由于流式文档中的目录具有开始和结束标记,因此能够直接分析找出流式文档中的目录。
较佳的,所述制表符的属性信息,包括:制表符的位置信息。根据引用页码的位置、描述信息的位置和描述信息的内容等信息,即可计算得到制表符开始位置和结束位置。确定制表符的位置信息用于后续映射为版式文档的图元对象。
较佳的,根据所述目录的内容信息,所述每一目录项中描述信息的位置信息、每一目录项中引用页码的位置信息和排版后每一目录项所在的页码,以及所述每一目录项中制表符的属性信息,将目录映射至版式文档,包括:根据所述目录的内容信息,所述每一目录项中描述信息的位置信息、每一目录项中引用页码的位置信息和排版后每一目录项所在的页码,以及所述每一目录项中制表符的属性信息,分别将每一目录项中的描述信息、制表符和引用页码映射为版式文档中不同的文本句;根据每一目录项中的不同的文本句,将该目录项关联上版式文档的页面对象的图元对象;根据所关联的图元对象生成该目录项对应的版流式目录信息。所述版流式目录信息,即是说,例如将Office流式文档的各项目录映射到版式文档的图元之后,还需要将版式文档的图元关联到版式文档中的流式段落对象,以流式结构化信息进行表达,即采取类似于流式文档的描述方式对图元进行结构化描述;版式文档的流式结构化信息也称作版流式信息,包含流式结构化信息的版式文档也叫做版流结合的版式文档,版流结合的版式文档对不同设备的适应性强于原始的版式文档。
较佳的,根据所述目录的内容信息,所述每一目录项中描述信息的位置信息、每一目录项中引用页码的位置信息和排版后每一目录项所在的页码,以及所述每一目录项中制表符的属性信息,分别将每一目录项中的描述信息、制表符和引用页码映射为版式文档中不同的文本句,包括:根据所述目录的内容信息和所述每一目录项中描述信息的位置信息,将每一目录项中的描述信息映射为版式文档中的描述信息文本句;以及,根据所述目录的内容信息和所述每一目录项中制表符的属性信息,将每一目录项中的制表符映射为版式文档中的制表符文本句;以及,根据所述目录的内容信息、每一目录项中引用页码的位置信息和排版后每一目录项所在的页码,将每一目录项中的引用页码映射为版式文档中的引用页码文本句。
本发明一实施例通过分别映射目录项各个部分来输出版流结合的版式文档,也就是说,将目录项的3部分(描述信息、制表符、引用页码)分别映射到不同的独立的版式图元,之后再分别将这三部分版式图元映射到版式结构化信息中。较佳的,所述根据每一目录项中的不同的文本句,将该目录项关联上版式文档的页面对象的图元对象,包括:将每一目录项中的不同的文本句分别关联上版式文档的不同的图元对象;将所述不同的图元对象关联到版式文档的页面对象。较佳的,根据所关联的图元对象生成该目录项对应的版流式目录信息,包括:将该目录项关联到版式文档中的流式段落对象;将该目录项的所述不同的图元对象关联在所述流式段落对象的一个片段的一个块中;其中,关联在所述流式段落对象的制表符的个数计为用于表示需要进行自动计算的值。表示需要进行自动计算的值通常为“auto”,即表示不确定到底是几个制表符,需要自动计算制表符,具体实现时由移动设备根据宽度等信息排版后计算处理。
另外,由于版式文档的逻辑结构化信息中记录有制表符的个数,因此也可以将版式文档中制表符的个数保持为原先的个数。较佳的,所述制表符的属性信息,还包括:每一目录项的制表符的个数。其中,根据制表符开始位置和结束位置,即可以确定制表符占用的总宽度,再根据制表符总宽度除以单个制表符宽度计算制表符的个数。较佳的,所述根据所关联的图元对象生成该目录项对应的版流式目录信息,包括:将该目录项关联到版式文档中的流式段落对象;将该目录项的所述不同的图元对象关联在所述流式段落对象的一个片段的一个块中;其中,关联在所述流式段落对象的制表符的个数为计算出的该目录项的制表符的个数。
本发明另一实施例则采取整体性识别流式目录结构信息的方法,将目录项整体性映射为版式文档中的复合图元,然后该复合图元再关联上版式文档中的流式结构化信息。较佳的,所述根据每一目录项中的不同的文本句,将该目录项关联上版式文档的页面对象的图元对象,包括:将每一目录项中的不同的文本句分别关联上版式文档的不同的图元对象;将所述不同的图元对象组合为一个复合图元;将该复合图元关联到版式文档的页面对象。较佳的,所述根据所关联的图元对象生成该目录项对应的版流式目录信息,包括:将该复合图元关联到版式文档中的具体页面的流式段落对象。因为目录项是整体性被映射到一个复合图元的,故无需再给出Tab个数,即Tab个数是固定的。
下面给出本发明的具体实施例。
参见图3,本发明具体实施例包括以下步骤:
A10、整体识别出流式等原始文档中的目录结构信息;
A20、按页将目录划分为若干条目块;
A30、将目录项块信息输出为版流目录结构。
图4为该目录的版流式逻辑结构化处理方法中A10步骤操作,包括以下步骤:
B10步骤为初始化识别环境:依据原始文档类型(*.docx,或书版软件的xml(Extensible Markup Language,可扩展标记语言)流式文档)初始化对应的应用程序二次开发接口环境或自开发的分析工具环境或相关的内核引擎,并加载该文档。通过现有开发环境或技术可以正确获取原始文档的全局性默认文字段落属性组(或段落式样)信息defaultParaMap,采用标准C++std::map<strAttributeName,strAttributeValue>defaultParaMap;即可承载这些信息,其中strAttributeName表示文字和段落的各属性名称,strAttributeValue表示文字和段落的各属性名称对应的值。如(fontSize,10.5)表示字体大小为10.5,(alignment,left)表示左对齐等。
B20步骤为目录对象的纯流式分析:在上述B10环境下获取文档版芯段落对象,分析出目录所在开始和结束区域:通常office等软件的目录信息是作为一个TOC(Table Of Contents,目录域)对象的形式挂载在或锚在段落下的,即Toc域的开始和结束标记通常分别位于第一个空段落和最后一个空段落,并有相关开始和结束标记。
每个目录项由若干文本句组成的目录项描述信息、中间的制表位Tab信息、页码引用域PAGEREF(引用页码)三大部分组成,另外目录项所在段落以及其三大部分的文本句都关联了属性和式样信息,这些信息通过现有开发环境或技术都可正确识别出来。
B30步骤为保存目录识别结果;例如可构造如下几个数据结构表:
1、所有目录项文字段落属性组信息结构,记为tocParaMap:采用标准C++std::map<pid,std::map<strAttributeName,strAttributeValue>>tocParaMap;即可承载这些信息,其中嵌套的std::map<strAttributeName,strAttributeValue>代表每个目录项文字段落的属性组信息;pidid用来标识该目录项引用的段落属性组。
2、目录项制表符,记为TabChar:用于记录并保存制表符的字符值,因为制表符都是一样的,只需要保存一个即可。
3、目录项描述信息结构,记为Array[struct Run]:{文本句,文本句属性组,x,y}数组。其中文本句记录目录项制表符之前的描述信息的文字,这些文字通常由若干小的文本句组成(如章节数字文本串和章节标题文本串)。每个小的文本句可能有用户特别设置的句属性,如字号,粗体等信息,若无则它们的句属性取值为该目录项所在段落对应的句属性,若无则向上引用至全局默认文本段落句属性。x,y表示该文本句排版后在该页面的坐标值,此时初始化为0,0。
4、目录项引用页码信息结构,记为struct pageNumber:{{引用页码的文本句,引用页码句属性组,x,y},该目录项排版后所在页码}。其中x、y、该目录项排版后所在页码此时全部初始化为0。而引用页码的文本句,引用页码句属性组类似于3中的文本句,文本句属性组。
5、最终整个目录识别结果,记为tocParaMap、TabChar和Array[{pid,Array[struct Run],struct pageNumber}]:即上述所有目录项文字段落属性组信息、制表符和由每个目录项中的{pid,目录项描述信息结构,目录项引用页码信息结构}构成的数组表达。其中pid用来标识该目录项引用的段落属性组(或段落式样),通常用段落式样名称表达,通过该pid就能够得到tocParaMap中对应pid的目录项文字段落的首行缩进等段落属性信息。
通过现有开发环境或技术可正确得到上述defaultParaMap、tocParaMap、TabChar和Array[{pid,Array[struct Run],struct pageNumber}]4个数据结构对应的纯流式信息。
图5为该目录的版流式逻辑结构化处理方法中A20步骤操作,包括以下步骤:
C10步骤为开始目录跨页分析:若上述A10识别出目录结构信息(即文档中存在目录),则开始对该目录进行是否跨页分析,对于跨页的目录进行以下操作,否则直接获取相关的位置信息。
C20步骤为连续多页目录识别:通过现有Office APIs中Selection选择和Range区域对象识别出每个目录项的段落所在的排版后的页码、目录项描述信息和引用页码的开始位置,即B30所述的数据结构中的(x,y)值;或者通过内核排版引擎自动获取该目录排版结果;也可以通过自己撰写的分析工具根据文档中的软分页符soft PageBreak直接获取页码值、描述信息和引用页码的起始位置(x,y);此外也可以通过自定义排版排版引擎分页计算得到每个目录项段落所在的排版后的页码、描述信息和引用页码的起始位置(x,y)。
C30步骤为保存跨页目录识别结果:将上述C20中的每个目录项段落所在的排版后的页码,以及描述信息和引用页码的起始位置记录到B30所述的该目录项排版后所在页码字段、描述信息的起始位置(x,y)字段和引用页码的起始位置(x,y)字段。
图6是该目录的版流式逻辑结构化处理方法中A30步骤操作,本发明具体实施例提供两种方案。
方案一包括以下步骤:
D10步骤为开始版式文档目录信息生成:依据上述操作得到的数组Array[{pid,Array[struct Run],struct pageNumber}],从该结构中按照各目录项排版后所在页码进行版式文档目录信息生成。具体生成映射操作是:
Step1、目录项描述信息映射:依次取Array[struct Run]目录项文本句信息(文本句、x,y坐标值)以及其中的文本句属性结合defaultParaMap、tocParaMap中的信息映射为版式文档中文本句(通常位于资源文件中,由对应的文本,绘制参数、字体信息等构成);
Step2、目录项制表符映射:首先根据Array[struct Run]计算最后一个文本句宽度加上该文本句的x坐标值得到制表位的起始位置x0,y值默认取该文本句y值,取struct pageNumber中的x值减去x0值得到整个制表位的宽度,依据该制表符(例如为”.”)及其defaultParaMap、tocParaMap中对应的文本句属性(如字体和字号大小等),将它们映射到一个完整的版式文档文本句;
Step3、目录项页码映射:取struct pageNumber中的排版后所在页码值、x,y坐标值以及其中的文本句属性结合defaultParaMap、tocParaMap中的信息映射为版式文档中文本句(通常位于资源文件中,由对应的文本,绘制参数、字体信息等构成)。
Step4、最后版式文档各页面级页面块对象(pageBlock)映射:将该页面内的所有上述每个目录项的描述信息、制表符信息、页码信息的版式文本句分别关联上一个版式文本图元对象(pageObject),最后将所有的这些目录项对应的文本图元关联到一个页面对象(pageBlock)。
D20步骤为生成版流式目录信息:具体生成映射操作是,首先为每个目录项关联一个版式文档中的流式段落对象并关联到具体页码,再将将上述目录项文字描述信息对应的文本图元对象+Tab控制符+上述目录项页码对应的文本图元对象关联在一个片段的一个块中。其中Tab控制符由上述TabChar制表符和“auto”自动计算并绘制流式制表符表达。TabChar表达的是具体的某个制表符的字符形式,如常见的“.”。这里的auto代表制表符的个数,即TabChar的个数,这个”自动”所不确定的个数是由应用程序具体呈现时依据各移动设备屏幕的不同宽度动态计算出来的。
方案二包括以下步骤:
D10步骤为开始版式文档目录信息生成:依据上述操作得到的数组Array[{pid,Array[struct Run],struct pageNumber}],从该结构中按照各目录项排版后所在页码进行版式文档目录信息生成。具体生成映射操作是:
Step1、目录项描述信息映射:依次取Array[struct Run]目录项文本句信息(文本句、x,y坐标值)以及其中的文本句属性结合defaultParaMap、tocParaMap中的信息映射为版式文档中文本句(通常位于资源文件中,由对应的文本,绘制参数、字体信息等构成);
Step2、目录项制表符映射:首先由Array[struct Run]中计算最后一个文本句宽度加上该文本句的x坐标值得到制表位的起始位置x0,y值默认取该文本句y值,取struct pageNumber中的x值减去x0值得到整个制表位的宽度,依据该制表符(例如为”.”)及其defaultParaMap、tocParaMap中对应的文本句属性(如字体和字号大小等)计算制表符的个数,最后将它们映射到一个完整的版式文档文本句;
Step3、目录项页码映射:取struct pageNumber中的排版后所在页码值、x,y坐标值以及其中的文本句属性结合defaultParaMap、tocParaMap中的信息映射为版式文档中文本句(通常位于资源文件中,由对应的文本,绘制参数、字体信息等构成)。
Step4、将该页面内的所有上述每个目录项的文字描述、制表符、页码信息的版式文本句分别关联上一个版式文本图元对象(pageObject),再将这些pageObject组合为一个整体性复合图元对象,最后将该复合图元对象关联到一个页面对象(pageBlock)。
D20步骤:将该复合图元对象关联到一个版式文档中的具体页面的流式段落对象。
上述目录的版流式逻辑结构化处理方法的具体实施例,解决了版式文档中目录存在的错误显示的问题;并且,由于采用了整体性识别流式目录结构信息,或基于自动计算制表符的基于段落的目录项来输出对应的版流结合的版式文档,在移动设备上具有很好的自适应性,提高了用户的阅读体验。
参见图7,本发明实施例提供的一种流式文档的处理装置包括:
识别模块71,用于确定流式文档中的目录,并从流式文档中获取目录的内容信息;其中包括每一目录项中描述信息的内容信息;
位置确定模块72,用于通过排版确定每一目录项中描述信息的位置信息,每一目录项中引用页码的位置信息和排版后每一目录项所在的页码;
制表符确定模块73,用于根据所述每一目录项中描述信息的位置信息和引用页码的位置信息,以及每一目录项中描述信息的内容信息,确定每一目录项中制表符的属性信息;
映射模块74,用于根据所述目录的内容信息,所述每一目录项中描述信息的位置信息、每一目录项中引用页码的位置信息和排版后每一目录项所在的页码,以及所述每一目录项中制表符的属性信息,将目录映射至版式文档。
较佳的,所述识别模块用于确定流式文档中的目录时,具体用于:获取流式文档中的全部文字段落的内容信息;根据所述全部文字段落的内容信息和目录的特征,确定目录的开始区域和结束区域。
较佳的,所述制表符的属性信息,包括:制表符的位置信息。
参见图8,较佳的,所述映射模块,包括:
文本句映射模块81,用于根据所述目录的内容信息,所述每一目录项中描述信息的位置信息、每一目录项中引用页码的位置信息和排版后每一目录项所在的页码,以及所述每一目录项中制表符的属性信息,分别将每一目录项中的描述信息、制表符和引用页码映射为版式文档中不同的文本句;
图元映射模块82,用于根据每一目录项中的不同的文本句,将该目录项关联上版式文档的页面对象的图元对象;
流式信息映射模块83,用于根据所关联的图元对象生成该目录项对应的版流式目录信息。
较佳的,所述文本句映射模块,具体用于:
根据所述目录的内容信息和所述每一目录项中描述信息的位置信息,将每一目录项中的描述信息映射为版式文档中的描述信息文本句;以及,根据所述目录的内容信息和所述每一目录项中制表符的属性信息,将每一目录项中的制表符映射为版式文档中的制表符文本句;以及,根据所述目录的内容信息、每一目录项中引用页码的位置信息和排版后每一目录项所在的页码,将每一目录项中的引用页码映射为版式文档中的引用页码文本句。
较佳的,所述图元映射模块,具体用于:将每一目录项中的不同的文本句分别关联上版式文档的不同的图元对象;将所述不同的图元对象关联到版式文档的页面对象。
较佳的,所述流式信息映射模块,具体用于:将该目录项关联到版式文档中的流式段落对象;将该目录项的所述不同的图元对象关联在所述流式段落对象的一个片段的一个块中;其中,关联在所述流式段落对象的制表符的个数计为用于表示需要进行自动计算的值。
较佳的,所述制表符的属性信息,还包括:每一目录项的制表符的个数。
较佳的。所述流式信息映射模块,具体用于:将该目录项关联到版式文档中的流式段落对象;将该目录项的所述不同的图元对象关联在所述流式段落对象的一个片段的一个块中;其中,关联在所述流式段落对象的制表符的个数为该目录项的制表符的个数。
较佳的,所述图元映射模块,具体用于:将每一目录项中的不同的文本句分别关联上版式文档的不同的图元对象;将所述不同的图元对象组合为一个复合图元;将该复合图元关联到版式文档的页面对象。
较佳的,所述流式信息映射模块,具体用于:将该复合图元关联到版式文档中的具体页面的流式段落对象。
综上所述,本发明实施例提供了一种流式文档的处理方法及装置,用于将流式文档转化为版式文档,正确呈现目录;并且通过将流式文档映射版流式文档以增强了文档在不同设备上显示时的自适应性,提高了用户体验。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。