一种处理PDF文件的方法及装置与流程

文档序号:13727976阅读:200来源:国知局

技术领域
本发明涉及文件处理
技术领域
,特别是指一种处理PDF文件的方法及装置。
背景技术
:PDF全称PortableDocumentFormat,即“便携文档格式”,是一种电子文档格式。这种格式与操作平台无关,跨平台特点突出,可在几乎所有的平台上使用。这一特性使它成为在Internet上进行电子文档发行和数字化信息传播的首选文档格式。越来越多的图书文献资料首选PDF作为其电子发布的形式,如电子图书、产品说明、公司公告、网络资料、电子邮件等。PDF格式已成为用于将信息数字化的一个事实上的工业标准。PDF格式有其鲜明的技术特色,如跨平台性优越;可集成多种媒体信息出版和发布,可集成超文本链接、声音及动态影像等电子信息;提供了对网络信息发布的支持。其中,在PDF的可信可靠,维护信息完整性与一致性及保持信息安全性上,最为使用者所称道的则是其安全性,数字签名或使用密码保护。而其他格式则很容易地可以修改或编辑。PDF的安全性首先保证了PDF文档不能被编辑,至少不能被轻易修改;其次可通过设置权限,限制用户的内容打印、内容复制甚至是评论或批注的添加、修改或删除。PDF文档只供阅读,不能被修改,确保了内容的完整性与其他特性。PDF格式设计的初衷不是用来编辑的,对PDF文件内的小部分变动可能问题不大,但对PDF文档中的整块文字或影像的修改就相当困难。即便使用市场上的有关工具,也无法避开这类限制。在使用PDF文档的过程中,经常不可避免地要对PDF文档中的文字进行抽取或复制。在对PDF格式的文档进行内容抽取时,或对PDF格式的文档进行拷贝粘贴时,几乎不可避免的出现样的现象:看来明明是一段完整的文字段落,但抽取出来时,被抽取的内容被划分成了多个块;选中段落,拷贝,粘贴出来时,同样的问题,完整的一段文字被分成了若干部分,并非期望的整体。行不再是完整的行,而段也不再是正常的段。这种拷贝出的或抽取出的段落,被分为了若干部分,显得支离破碎,破坏了原逻辑关系,甚至一句完整的语句都不存在,破坏了原段落的组织结构,导致了使用者不知其所云,不明白原段落表达的内容。对原段落组织结构的破坏,一方面使使用者不知段落所表达的内容,失去了段落原本承载的语用功能,使用户不能清楚地理解原段落要表达的意思;另一方面,为后续的加工处理造成了不少的障碍,人为的调整,难免不会不出现与原段落不符的情况。技术实现要素:本发明要解决的技术问题是提供一种处理PDF文件的方法及装置,解决现有技术中在PDF文件处理过程中段落不能够被完整抽取出来的问题。为了解决上述技术问题,本发明实施例提供一种处理PDF文件的方法,包括:获取所需页面;获取所述所需页面中的内容流对象;解析所述内容流对象得到所需段落。其中,获取所需页面的步骤包括:抽取PDF文档对象模型;在所述PDF文档对象模型中查找目录对象;在所述目录对象中通过第一预设键值查找页面树对象;在所述页面树对象中查找第二预设键值所对应的对象,得到一个页面数组;通过所述页面数组中的数据,索引到所需页面。其中,获取所述所需页面中的内容流对象的步骤包括:处理所述所需页面的内容得到所述所需页面的页面对象;从所述页面对象中获取第三预设键值对应的所述所需页面的内容流对象。其中,解析所述内容流对象得到所需段落的步骤包括:从所述内容流对象中获取第四预设键值与第五预设键值之间的内容;从所述第四预设键值与第五预设键值之间的内容中获取以第六预设键值引导的预设键值对之间的内容项对象;从所述内容项对象中获取预设括号对包裹的所需段落的内容。其中,解析所述内容流对象得到所需段落的步骤还包括:若所述预设括号对与所述第六预设键值之间存在预设标记,则将获取的该内容项对应的内容附加到上一个内容项对应的内容中,构成完整的段落。本发明还提供了一种处理PDF文件的装置,包括:第一获取模块,用于获取所需页面;第二获取模块,用于获取所述所需页面中的内容流对象;解析模块,用于解析所述内容流对象得到所需段落。其中,所述第一获取模块包括:抽取子模块,用于抽取PDF文档对象模型;第一查找子模块,用于在所述PDF文档对象模型中查找目录对象;第二查找子模块,用于在所述目录对象中通过第一预设键值查找页面树对象;第三查找子模块,用于在所述页面树对象中查找第二预设键值所对应的对象,得到一个页面数组;索引子模块,用于通过所述页面数组中的数据,索引到所需页面。其中,所述第二获取模块包括:处理子模块,用于处理所述所需页面的内容得到所述所需页面的页面对象;第一获取子模块,用于从所述页面对象中获取第三预设键值对应的所述所需页面的内容流对象。其中,所述解析模块包括:第二获取子模块,用于从所述内容流对象中获取第四预设键值与第五预设键值之间的内容;第三获取子模块,用于从所述第四预设键值与第五预设键值之间的内容中获取以第六预设键值引导的预设键值对之间的内容项对象;第四获取子模块,用于从所述内容项对象中获取预设括号对包裹的所需段落的内容。其中,所述解析模块还包括:附加子模块,用于若所述预设括号对与所述第六预设键值之间存在预设标记,则将获取的该内容项对应的内容附加到上一个内容项对应的内容中,构成完整的段落。本发明的上述技术方案的有益效果如下:上述方案中,所述处理PDF文件的方法通过获取所需页面,进而获取所述所需页面中的内容流对象,然后解析所述内容流对象得到所需段落,可以完整的获取PDF文件中的段落,保留原有的架构,解决了技术中在PDF文件处理过程中段落不能够被完整抽取出来的问题。附图说明图1为本发明实施例的处理PDF文件的方法步骤示意图;图2为本发明实施例的处理PDF文件的装置结构示意图。具体实施方式为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。本发明针对现有的技术中在PDF文件处理过程中段落不能够被完整抽取出来的问题,提供一种处理PDF文件的方法,如图1所示,包括:步骤11:获取所需页面;步骤12:获取所述所需页面中的内容流对象;步骤13:解析所述内容流对象得到所需段落。本发明实施例提供的所述处理PDF文件的方法通过获取所需页面,进而获取所述所需页面中的内容流对象,然后解析所述内容流对象得到所需段落,可以完整的获取PDF文件中的段落,保留原有的架构,解决了技术中在PDF文件处理过程中段落不能够被完整抽取出来的问题。具体的,获取所需页面的步骤包括:抽取PDF文档对象模型;在所述PDF文档对象模型中查找目录对象;在所述目录对象中通过第一预设键值(比如PAGES)查找页面树对象;在所述页面树对象中查找第二预设键值(比如KIDS)所对应的对象,得到一个页面数组;通过所述页面数组中的数据,索引到所需页面。进一步的,获取所述所需页面中的内容流对象的步骤包括:处理所述所需页面的内容得到所述所需页面的页面对象;从所述页面对象中获取第三预设键值(比如Contents)对应的所述所需页面的内容流对象。更进一步的,解析所述内容流对象得到所需段落的步骤包括:从所述内容流对象中获取第四预设键值(比如“BT”-BeginText)与第五预设键值(比如“ET”-EndText)之间的内容;从所述第四预设键值与第五预设键值之间的内容中获取以第六预设键值(比如Para)引导的预设键值对(比如BDC和EMC对)之间的内容项对象;从所述内容项对象中获取预设括号对(比如小括号对)包裹的所需段落的内容。以第六预设键值引导的内容项对象,通常都是一个完整的段落,但有时也不尽然,所以本发明实施例提供的所述方法中解析所述内容流对象得到所需段落的步骤还包括:若所述预设括号对与所述第六预设键值之间存在预设标记(比如T*),则将获取的该内容项对应的内容附加到上一个内容项对应的内容中,构成完整的段落。下面对本发明实施例提供的所述处理PDF文件的方法进行详细分析。对PDF文档的处理,采用逐页处理的方式。对每页的处理过程中,逐一处理页内的各类对象,这些对象即页内对象,从用户的角度看,包括多种如页眉、页脚、表格及图片,其中也包括段落。PDF中的标识内容(Markedcontent),是对文档中的内容,按照其属性及在PDF文档中的角色,对PDF文档中这部分内容进行分类,标记为一个标识对象,可以是章、节、图形、表格、页眉或段落等。PDF文档内的组成形式可看作是由PDF对象构成的层级结构。这种层级结构的ROOT,或叫基点,对应PDF文档的CATALOG字典(目录字典)。PDF文档的其他对象,作为CATALOG字典的条目保存在CATALOG字典中。这些条目在大多也以字典的形式存在。PDF的结构化对象也以CATALOG字典的条目存在于PDF中。首先,基于PDF格式自身结构,提取PDF本身所具有的CATALOG,主要是分析PDF自身的树形层次结构,查找与PDF文档对应的CATALOG部分,进行提取。解析PDF文档的体系结构,得到PDF本身的交叉索引表;再通过检索所得到的交叉索引表,得到PDF自身的TRAILER字典(文件尾部字典);通过对TRAILER字典分析,查找键值“ROOT”,得到ROOT所对应对象,这个对象就是PDF文档所自身的CATALOG对象,这个对象包括了诸多信息如关于页面的内部信息、页面对应的编码树、文档及PDF的大纲OUTLINES等等。页面抽取,检索获取的CATALOG对象,键值“Pages”(页码)对应的对象就是PDF页面树。通过页面树,可以访问整个PDF文档所包含的所有页面。分析页面内容,可以得到对应的页内对象,其中包括段。页面内标记内容序列的抽取,首先抽取结构化元素。检索获取的CATALOG对象,键值“StructTreeRoot”对应的对象就是PDF文档对应的逻辑结构的根结点。这个根结点也是一个字典,其中根节点下键值“K”对应的对象是一个或多个子字典。当字典的数目只有一个时,这单个字典对应是一个具体的结构化元素。当子字典有多个时,每个子字典可能又是字典或具体的结构化元素。对字典的逐级递推查找,会返回对应的子结构化元素,其在字典中对应的键值是“StructElem”。每个结构化元素又是一个字典,包括多个对象,其中:1.键值“S”对应的是结构化元素的类型,表明了结构化元素的本性及其在PDF文档中的角色。2.键值“K”对应的是结构化类型的子元素,是下列四种情况之一:(1)字典,表示子对象是一个结构化元素;(2)整数标记符,表示一个标记内容序列;(3)标记引用字典,表示一个标记内容序列;(4)对象引用,表示对一个对象的引用。除了最顶级的字典外,其他各层级的字典中上述的这四种对象称为内容项。3.键值“T”对应结构化元素的标题,以可读的形式出现,如“Chapter1”(章节1)等。4、结构化的内容,对应键值“K”所对应的内容项,可以包含有多个,但内容项仅限于下列两种类型:(1)标记内容序列,存在于内容流中。这种情况下,对象是以关键字(键值)“BMC”(标记内容开始)和“EMC”(标记内容结束)对及“BDC”(带有属性列表的标记内容开始)和“EMC”(标记内容结束)对包裹起来的内容,其中可能包括“MP”(标记内容点)和“DP”(标记内容属性)的相关内容。这些对象均存在于内容流中,同时它们也不再是简单的字节流,而是一个完整的图形对象(completegraphicsobjects),借助于这种对象,PDF逻辑结构设施将相应的内容与结构化元素相关联。(2)完整的PDF对象,采用了对象引用的办法来处理内容项。这种情况下,对象只关联到具体的页,而不是直接添加到页的内容流中,在结构化元素的字典中,通过键值“K”对应的对象引用字典加以标识。对象引用字典通常包括以下几项:①属性“Type”(类型),取值OBJR(对象引用),说明当前是对象引用;②属性“Pg”(页码),表明对象在那个页面上引用;③属性“Obj”(对象),引用的具体对象,不限。在对象引用处理时,由于具体的内容流不能包含对象的引用,所标记的内容项无法反向引用到自己的父结构元素,从而导致了PDF在内容上的断裂,会有一些内容项找不到自己所属的上级元素。为了处理个问题,PDF引入了另一个机制,结构化父树(structuralparenttree),这是一个数字树,树的键值(Keys)都是整数,而非常见的字符串。在取得PDF文档的结构树后,结构化树中键值“ParentTree”对应的就是这个结构化数字父树。如果一个对象是一个结构化元素的内容项,这个对象在这个结构化数字父树中就有一个对应的记录,而这个对象本身的键值“StructParent”或“StructParents”对应的就是其本身的父结构化元素对应编号或称为键值。如果内容流中包含有标记内容序列或者是内容项,这个内容流在这个结构化数字父树中也有一条对应的记录,内容流本身的键值“StructParent”或“StructParents”对应的就是其本身的父结构化元素对应编号或称为键值。5、父结构化元素的查找(1)标记为对象引用的内容项在其对象字典中查找“StructParent”键对应的值,利用得到的值再去结构化对象父树中查找具有这值的对象,从而就能得到这个内容项的父结构化元素。(2)内容项为标记内容序列标记内容序列,本身不是一个对象,其父结构化元素的找查定位与对象引用相似,但有所不同。标记内容序列,或存在于页对象中,或存在于其他内容流中,通达查找标记内容序列所在的页对象的“StructParent”键对应的值,或所在内容流的“StructParent”键对应的值,就可以得到父结构化元素数组,而非单个对象的引用。利用标记内容项的标识符,来检索这个数组,就可能得到对应的父结构元素。以同样的方式,通过检索父结构化元素自己的父结构化元素。这种操作可一直向上层查找,直到PDF文档的根。PDF文档,均以页面为基本单位展示给用户。在PDF的组织形式,PDF的页面对象通常也包括了多项内容,也就是说一个PDF页面中有多种对象,他们又分属于不同的类。每个类都有一个对应的键值与其对应,利用这个关键字来检索这个页面,即可得到这个页面中所有属于这个类的对象。PDF的段落属于显示给用户的内容,其对应的关键字即为“Contents”(内容),通过关键字“Contents”,只有通过关键字“Contents”才可能检索出页面中的内容。当通过关键字“Contents”检索且页面没有任何内容显示给用户时,则是没有内容被检索出来。对于有内容显示出来的页面,其检索的内容,通常是一个或多个流即流数组。所取得的内容流中,就包括段落信息。段落的标记头键字为“Para”,过滤页面内容流中的“Para”对象,可得取页面段对象。PDF文档中,展现给人们阅读的具体内容,均以标记内容序列出现,结构化元素实现了对这些内容的有效管理及组织。PDF文件中的段落通常由多个Text文本对象(TextObject)组成。文本对象包括了文字字符串,文字字符串的位置信息,文字字符串的状态信息等等。其中的文字字符串,就是要抽取的,用以组成段落的文字;而其他的信息,则用来协助抽取文本字符串。每一个Text文本对象(TextObject),由关键字BT开头,以ET结尾。BT与ET之间的所有内容即是对应的Text文本对象(TextObject)的内容。Text文本对象中对读者有实际意义的内容,均以“(”“)”对包裹。抽取出所有的“(”与“)”之间的字符,即可取得段落内容。通常段落的首行都缩进2个字符,通过检查字符的位置信息,则可以确定段落的位置信息,进而区分不同的段落。下面对本发明实施例提供的所述处理PDF文件的方法进行举例说明。对段落的完整抽取,以页面为基本单位。打开PDF文档后,抽取PDF文档对象模型。在PDF文档对象模型中,查找CATALOG对象(目录对象)。在CATALOG对象中通过键值“PAGES”(页码-第一预设键值)查找页面树对象。在页面树对象中,查找键值“KIDS”(页面内的所有对象-第二预设键值)所对应的对象,得到一个页面数组。其中,页面数组其中的每一项对应一个页面的索引项。通过页面索引可得到对应的页面。通过页面数组中的数据,可索引到PDF中的每一个页面,获得页面后,可逐一处理各个页面PAGE。PDF文档的具体内容,最终以各种PDF结构化对象的形式存在于页对象PAGE中。通过技术分析,ID(身份信息)树,PDF结构化树结合页面中的对象结构,处理页面的内容,如媒体框,资源信息包括字体信息,文字内容特别是段落。在所取得的页面对象中,获取键值“Contents”(内容-第三预设键值)对应的内容流对象,页面的文字性信息都以流的形势存在于这个内容流对象中。解析所获得页面内容流对象,可以得到页面中的具体文字内容及在PDF中的角色,或为章,或为标题,或为段,或为页眉,或为页脚,不一而足。分解所得到的内容流对象,“BT”(文本开始/BeginText-第三四预设键值)与“ET”(文本结束/EndText-第四五预设键值)之间的内容,即是PDF页面对应的内容信息,这些内容信息,如上所述已进行了一系列的结构化处理,成为了标记内容序列对象或标记属性序列对象。在“BT”与“ET”对之间,以“Para”(段落-第五六预设键值)引导的“BDC”和“EMC”对(预设键值对)之间的内容是对应的具体的内容项对象。这个内容项对象包括了与其自身相关的多项具体信息,如字体、字号、颜色、以及在PDF页面排版中的与布局相关的坐标位置信息。其中最重的具体的内容,是以一对小括号“(”“)”裹的部分。也就是说“Para”、“BDC”、“(”、“)”和“EMC”依次排列,“(”和“)”之间的内容为PDF正文内容,也是用户要抽取的具体字符内容。以“Para”引导的内容项对象,通常都是一个完整的段落,但有时也不尽然。如果一个“Para”引导的内容项对象中,在“(”“)”对之前,有“T*”标记,则表明这个内容项对象不是一个独立的段对象,而是上一个“Para”内容项的一部分,在处理时,应附加到下上一个对象中去。这样一个完整的PDF段落就被完整地抽取了出来。抽取文本对象的位置信息,区别不同的段落。为了解决上述技术问题,本发明实施例还提供了一种处理PDF文件的装置,如图2所示,包括:第一获取模块,用于获取所需页面;第二获取模块,用于获取所述所需页面中的内容流对象;解析模块,用于解析所述内容流对象得到所需段落。本发明实施例提供的所述处理PDF文件的装置通过获取所需页面,进而获取所述所需页面中的内容流对象,然后解析所述内容流对象得到所需段落,可以完整的获取PDF文件中的段落,保留原有的架构,解决了技术中在PDF文件处理过程中段落不能够被完整抽取出来的问题。具体的,所述第一获取模块包括:抽取子模块,用于抽取PDF文档对象模型;第一查找子模块,用于在所述PDF文档对象模型中查找目录对象;第二查找子模块,用于在所述目录对象中通过第一预设键值查找页面树对象;第三查找子模块,用于在所述页面树对象中查找第二预设键值所对应的对象,得到一个页面数组;索引子模块,用于通过所述页面数组中的数据,索引到所需页面。进一步的,所述第二获取模块包括:处理子模块,用于处理所述所需页面的内容得到所述所需页面的页面对象;第一获取子模块,用于从所述页面对象中获取第三预设键值对应的所述所需页面的内容流对象。更进一步的,所述解析模块包括:第二获取子模块,用于从所述内容流对象中获取第四预设键值与第五预设键值之间的内容;第三获取子模块,用于从所述第四预设键值与第五预设键值之间的内容中获取以第六预设键值引导的预设键值对之间的内容项对象;第四获取子模块,用于从所述内容项对象中获取预设括号对包裹的所需段落的内容。以第六预设键值引导的内容项对象,通常都是一个完整的段落,但有时也不尽然,所以本发明实施例提供的所述装置中所述解析模块还包括:附加子模块,用于若所述预设括号对与所述第六预设键值之间存在预设标记,则将获取的该内容项对应的内容附加到上一个内容项对应的内容中,构成完整的段落。其中,上述处理PDF文件的方法的所述实现实施例均适用于该处理PDF文件的装置的实施例中,也能达到相同的技术效果。以上所述的是本发明的优选实施方式,应当指出对于本
技术领域
的普通人员来说,在不脱离本发明所述原理前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1