一种pdf文件恢复方法及装置制造方法

文档序号:6526786阅读:176来源:国知局
一种pdf文件恢复方法及装置制造方法【专利摘要】本发明提供一种PDF文件恢复方法及装置,包括:根据文件头特征标识和文件尾特征标识在存储介质上查找文件头碎片和文件尾碎片,根据所述文件头碎片中信息和所述文件尾碎片中信息,查找与所述文件头碎片中信息相匹配的所述文件尾碎片,将匹配的所述文件头碎片和所述文件尾碎片作为待恢复文件的完整碎片,根据所述完整碎片恢复所述待恢复文件。通过使用以上方法,可以结合PDF文件的结构特征,实现在对PDF文件的正确恢复,提高恢复的效果,方便用户的使用。【专利说明】—种PDF文件恢复方法及装置【
技术领域
】[0001]本发明涉及电子文件读写【
技术领域
】,特别涉及一种PDF文件恢复方法及装置。【
背景技术
】[0002]PDF文件作为一种广泛使用的编辑文件格,已经在计算机及互联网中被广大用户所使用。PDF全称为PortableDocumentFormat,翻译为“便携文档格式”,是一种电子文件格式。这种格式与操作系统平台无关,而正是这一独特的性能使它成为在Internet上进行电子文档发行和数字化信息传播的理想文档格式。越来越多的电子图书、产品说明、公司文告、网络资料、电子邮件开始使用PDF格式文件。[0003]与此同时,随着人们对PDF文件使用的增多,与PDF文件使用相关的问题也就接踵而来。例如:人们在日常对电脑进行操作时,都可能会碰到因为手误或不知情等非主观原因下误删除文件的情况。在这种情况下,用户一般会借助于文件恢复软件来对PDF文件进行恢复。[0004]但由于PDF文件的结构特点,在使用现有技术中的恢复软件进行恢复时效果都不是很好,恢复出的文件经常出现无法打开、乱码或内容丢失的情况。[0005]因此,需要提供一种PDF文件恢复方法及装置来解决以上的问题。【
发明内容】[0006]本发明要解决的技术问题是提供一种PDF文件恢复方法及装置,提高对PDF文件的恢复效果,方便用户的使用。[0007]一种PDF文件恢复方法,其特征在于,包括:根据文件头特征标识和文件尾特征标识在存储介质上查找文件头碎片和文件尾碎片;根据所述文件头碎片中信息和所述文件尾碎片中信息,查找与所述文件头碎片中信息相匹配的所述文件尾碎片,将匹配的所述文件头碎片和所述文件尾碎片作为待恢复文件的完整碎片;根据所述完整碎片恢复所述待恢复文件。[0008]优选地,所述根据所述文件头碎片中信息和所述文件尾碎片中信息,查找与所述文件头碎片中信息相匹配的所述文件尾碎片,将匹配的所述文件头碎片和所述文件尾碎片作为待恢复文件的完整碎片,具体为:根据所述文件头碎片中包含的对象编号数组和对象偏移量数据,查找是否存在匹配的文件尾碎片;所述匹配的文件尾碎片中记录的对象编号数组和对象偏移量数组包含了所述文件头碎片中包含的所述对象编号数组和所述对象偏移量数组;若查找到所述匹配的文件尾碎片,判断所述文件头碎片中包含的所述对象编号数组和所述对象偏移量数组是否全部包含了所述匹配的文件尾碎片中记录的所述对象编号数组和所述对象偏移量数组;若所述文件头碎片中包含的所述对象编号数组和所述对象偏移量数组全部包含所述匹配的文件尾碎片中记录的所述对象编号数组和所述对象偏移量数组,将所述文件头碎片与所述匹配的文件尾碎片作为所述待恢复文件的完整碎片。[0009]优选地,还包括:若查找到若干个所述匹配的文件尾碎片,将距离所述文件头碎片的存储地址最近的文件尾碎片作为所述匹配的文件尾碎片。[0010]优选地,还包括:根据对象特征标识在存储介质上查找对象碎片;若所述文件头碎片中包含的所述对象编号数组和所述对象偏移量数组没有全部包含所述匹配的文件尾碎片中记录的所述对象编号数组和所述对象偏移量数组,将所述文件头碎片与所述对象碎片合并组成新文件头碎片,判断所述新文件头碎片中包含的所述对象编号数组和所述对象偏移量数组是否全部包含所述匹配的文件尾碎片中记录的所述对象编号数组和所述对象偏移量数组。[0011]优选地,将所述文件头碎片与所述对象碎片合并组成新文件头碎片,具体为:查找所述对象碎片,所述对象碎片中记录的所述对象编号数组和所述对象偏移量数组包括在所述匹配的文件尾碎片记录的对象编号数组和所述对象偏移量数组中,且没有包括在所述文件头碎片中包含的所述对象编号数组和所述对象偏移量数组中;将所述文件头碎片的容量与所述对象碎片的容量相加,作为所述新文件头碎片的容量;将所述文件头碎片中的对象编号数组与所述对象碎片的对象编号数组进行组合,作为所述新文件头的对象编号数组;将所述文件头碎片中的对象偏移量数组与所述对象碎片中的对象偏移量数组进行组合,作为所述新文件头碎片的对象偏移量数组。[0012]一种PDF文件恢复装置,包括:文件头尾碎片查找模块,完整碎片查找模块和文件恢复模块;所述文件头尾碎片查找模块,用于根据文件头特征标识和文件尾特征标识在存储介质上查找文件头碎片和文件尾碎片;所述完整碎片查找模块,用于根据所述文件头碎片中信息和所述文件尾碎片中信息,查找与所述文件头碎片中信息相匹配的所述文件尾碎片,将匹配的所述文件头碎片和所述文件尾碎片作为待恢复文件的完整碎片;所述文件恢复模块,用于根据所述完整碎片恢复所述待恢复文件。[0013]优选地,所述完整碎片查找模块,包括:文件尾匹配子模块、文件头尾比较子模块和完整碎片组合子模块;所述文件尾匹配子模块,用于根据所述文件头碎片中包含的对象编号数组和对象偏移量数据,查找是否存在匹配的文件尾碎片;所述匹配的文件尾碎片中记录的对象编号数组和对象偏移量数组包含了所述文件头碎片中包含的所述对象编号数组和所述对象偏移量数组;所述文件头尾比较子模块,用于若查找到所述匹配的文件尾碎片,判断所述文件头碎片中包含的所述对象编号数组和所述对象偏移量数组是否全部包含了所述匹配的文件尾碎片中记录的所述对象编号数组和所述对象偏移量数组;所述完整碎片组合子模块,用于若所述文件头碎片中包含的所述对象编号数组和所述对象偏移量数组全部包含所述匹配的文件尾碎片中记录的所述对象编号数组和所述对象偏移量数组,将所述文件头碎片与所述匹配的文件尾碎片作为所述待恢复文件的完整碎片。[0014]优选地,所述完整碎片查找模块,还包括:文件尾碎片选择子模块;所述文件尾碎片选择子模块,用于若查找到若干个所述匹配的文件尾碎片,将距离所述文件头碎片的存储地址最近的文件尾碎片作为所述匹配的文件尾碎片。[0015]优选地,还包括:对象碎片查找模块;所述对象碎片查找模块,用于根据对象特征标识在存储介质上查找对象碎片;在文件头尾比较子模块,还包括:新文件头碎片组合子模块;所述新文件头碎片组合子模块,用于若所述文件头碎片中包含的所述对象编号数组和所述对象偏移量数组没有全部包含所述匹配的文件尾碎片中记录的所述对象编号数组和所述对象偏移量数组,将所述文件头碎片与所述对象碎片合并组成新文件头碎片,判断所述新文件头碎片中包含的所述对象编号数组和所述对象偏移量数组是否全部包含所述匹配的文件尾碎片中记录的所述对象编号数组和所述对象偏移量数组。[0016]优选地,所述新文件头碎片组合子模块,还包括:对象碎片匹配子模块、新容量计算子模块、对象编号组合子模块和对象偏移量组合子模块;所述对象碎片匹配子模块,用于查找所述对象碎片,所述对象碎片中记录的所述对象编号数组和所述对象偏移量数组包括在所述匹配的文件尾碎片记录的对象编号数组和所述对象偏移量数组中,且没有包括在所述文件头碎片中包含的所述对象编号数组和所述对象偏移量数组中;所述新容量计算子模块,用于将所述文件头碎片的容量与所述对象碎片的容量相加,作为所述新文件头碎片的容量;所述对象编号组合子模块,用于将所述文件头碎片中的对象编号数组与所述对象碎片的对象编号数组进行组合,作为所述新文件头的对象编号数组;所述对象偏移量组合子模块,用于将所述文件头碎片中的对象偏移量数组与所述对象碎片中的对象偏移量数组进行组合,作为所述新文件头碎片的对象偏移量数组。[0017]与现有技术相比,本发明具有以下优点:在本发明中,首先根据特征标识获得文件头碎片和文件尾碎片,之后根据文件头碎片中的信息查找相匹配的文件尾碎片作为待恢复文件的完整碎片,最后根据完整碎片恢复文件。通过使用以上方法,可以结合PDF文件的结构特征,实现在对PDF文件的正确恢复,提高恢复的效果,方便用户的使用。【专利附图】【附图说明】[0018]图1是PDF文件的文件结构图;图2是本发明提供的一种PDF文件恢复方法第一实施例的流程图;图3是本发明提供的一种PDF文件恢复方法第二实施例的流程图;图4是本发明提供的一种PDF文件恢复方法第三实施例的流程图;图5是本发明提供的一种PDF文件恢复方法第四实施例的流程图;图6是本发明提供的一种PDF文件恢复装置第一实施例的原理框图;图7是本发明提供的一种PDF文件恢复装置第二实施例的原理框图;图8是本发明提供的一种PDF文件恢复装置第四实施例的原理框图。【具体实施方式】[0019]为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明的【具体实施方式】做详细的说明。[0020]为了方便对本发明中进行介绍,首先对PDF文件的文件结构进行说明:一个PDF文件主要由四个部分组成:文件头、对象集合、交叉引用表以及文件尾部组成。其中,文件头部主要记录一些该文件所遵从的PDF规范的版本号;对象集合是PDF文件的主要部分,由一系列的对象组成;交叉引用表,是一个间接对象的地址索引表,主要是为了能够对间接对象进行随机的存取;文件尾部声明了交叉引用表的地址,即指明了对象集合的根对象,从而能够找到PDF文件中各个对象体的位置,另外还保存了PDF文件的加密等安全信息。逻辑上一个PDF文件的交叉引用表和尾部是相邻的,且存储的信息都比较小。因此,大多数情况下一个PDF文件的交叉引用表和尾部之间一般不会存在碎片。PDF的整体结构参见图1。[0021]其中:文件头的特征标识为“%PDF-”。[0022]对象的特征标识为“对象ID+0x20+对象修改次数+0x20+表项个数”为起始,以“endobj”为结束标识。[0023]文件尾以交叉弓I用表和尾部数据组成。[0024]交叉引用表以“xref+OxOA+起始对象ID+0x20+表项个数”为起始标识,之后紧跟尾部数据。[0025]尾部的特征标识为以固定的“traiIer”为开头并以“%%E0F”为结尾。[0026]参见图2,该图为本发明提供的一种PDF文件恢复方法第一实施例的流程图。[0027]在本实施例中,包括:S201:根据文件头特征标识和文件尾特征标识在存储介质上查找文件头碎片和文件尾碎片。[0028]S202:根据所述文件头碎片中信息和所述文件尾碎片中信息,查找与所述文件头碎片中信息相匹配的所述文件尾碎片,将匹配的所述文件头碎片和所述文件尾碎片作为待恢复文件的完整碎片。[0029]S203:根据所述完整碎片恢复所述待恢复文件。[0030]在需要对文件进行恢复时,首先根据PDF文件的结构特点对存储介质进行查找扫描,以文件结构中的文件头特征标识、对象特征标识和文件尾特征标识作为识别不同碎片段的依据。[0031]如在存储介质中查找文件头特征标识%PDF_”,如果能够找到以文件头特征标识,则将文件头特征标识中标注出的数据段作为文件头碎片,并记录文件头碎片的有关信息,包括:文件头碎片容量大小HeadFragSizeH、文件头碎片中包含的对象编号数组ObjIDListH、对象偏移量数组ObjStartLiStH和存储地址OffsetH等。对象编号数组ObjIDListH、对象偏移量数组ObjStartListH和存储地址OffsetH是相互对应的。其中,对象编号数组ObjIDListH和对象偏移量数组ObjStartListH是由查找结果形成,文件头碎片容量大小HeadFragSizeH为扇区大小(即HeadFragSizeH=SectorSize),存储地址OffsetH为头部特征所在存储介质的偏移扇区数与扇区大小的乘积(即OffsetH=SectorNumber*SectorSize)。[0032]同理,在存储介质中查找符合文件尾特征标识(即交叉引用表以“xref+OxOA+起始对象ID+0x20+表项个数”为起始标识,之后紧跟尾部数据。尾部数据的特征标识为以固定的“trailer”为开头并以“%%E0F”为结尾。)的数据段,作为文件尾碎片,并且记录文件尾碎片中的有关信息。包括:对象编号数组ObjIDListT、对象偏移量数组StartListT和存储地址OffsetT等。[0033]之后,根据得到的文件头碎片中的信息查找相匹配的文件尾碎片。其中,可以使用关键字判断方法查找匹配的文件尾碎片,如将文件头碎片中的对象编号数组ObjIDListH和对象偏移量数组StartListH等作为关键字,查找匹配的文件尾碎片。[0034]如果能够查找到匹配的文件尾碎片,则认为该文件头碎片和文件尾碎片是在同一文件中,将该文件头碎片和文件尾碎片作为文件的完整碎片。[0035]根据收集到的完整碎片进行文件恢复。[0036]在本实施例中,首先根据特征标识获得文件头碎片和文件尾碎片,之后根据文件头碎片中的信息查找相匹配的文件尾碎片作为待恢复文件的完整碎片,最后根据完整碎片恢复文件。通过使用以上方法,可以结合PDF文件的结构特征,实现在对PDF文件的正确恢复,提高恢复的效果,方便用户的使用。[0037]参见图3,该图为本发明提供的一种PDF文件恢复方法第二实施例的流程图。[0038]本实施例中的步骤S301和S305与一种PDF文件恢复方法第一实施中的步骤S201和S203相同,在此不再重复进行介绍。[0039]在本实施例中,所述根据所述文件头碎片中信息和所述文件尾碎片中信息,查找与所述文件头碎片中信息相匹配的所述文件尾碎片,将匹配的所述文件头碎片和所述文件尾碎片作为待恢复文件的完整碎片,具体为:S302:根据所述文件头碎片中包含的对象编号数组和对象偏移量数组,查找是否存在匹配的文件尾碎片;所述匹配的文件尾碎片中记录的对象编号数组和对象偏移量数组包含了所述文件头碎片中包含的所述对象编号数组和所述对象偏移量数组。[0040]S303:若查找到所述匹配的文件尾碎片,判断所述文件头碎片中包含的所述对象编号数组和所述对象偏移量数组是否全部包含了所述匹配的文件尾碎片中记录的所述对象编号数组和所述对象偏移量数组。[0041]S304:若所述文件头碎片中包含的所述对象编号数组和所述对象偏移量数组全部包含所述匹配的文件尾碎片中记录的所述对象编号数组和所述对象偏移量数组,将所述文件头碎片与所述匹配的文件尾碎片作为所述待恢复文件的完整碎片。[0042]在通过特征标识查找到相应的文件头碎片和文件尾碎片后,首先可以根据文件头碎片中包含的对象编号数组和对象偏移量数组来查找匹配的文件尾碎片。由于在文件头碎片中记录了对象编号数组ObjIDListH、对象偏移量数组ObjStartListH等信息,而在文件尾碎片中记录了对象编号数组ObjIDListT、对象偏移量数组ObjStartListT等信息。[0043]因此,可以以文件头碎片中的对象编号数组ObjIDListH、对象偏移量数组ObjStartListH为依据,查找匹配的文件尾碎片。其中,查找到的文件尾碎片中记录的对象编号数组ObjIDListT包含了文件头碎片中对象编号数组ObjIDListH,并且文件尾碎片中对应的对象偏移量数组ObjStartListT包含了文件头碎片中对象偏移量数组ObjStartListH0[0044]如果能够查找到匹配的文件尾碎片,则进一步判断文件头碎片中记录对象编号数组ObjIDListH和对象偏移量数组ObjStartListH是否全部包含了所述匹配的文件尾碎片中记录的对象编号数组ObjIDListT和对象偏移量数组ObjStartListT,即在文件尾碎片中的每一个对象编号都存在于文件头碎片的对象编号数组中,在文件尾碎片中的每一个对象偏移量都存在于文件头碎片包括的对象偏移量数组中。[0045]如果文件头碎片包括的对象编号数组ObjIDListH和对象偏移量数组ObjStartListH全部包含了匹配的文件尾碎片中的对象编号数组ObjIDListT和对象偏移量数组ObjStartListT,可以认为该文件头碎片和该匹配的文件尾碎片可以构成待恢复文件的完整碎片,可以依据该完整碎片对文件进行恢复。[0046]在本实施例中,还包括:若查找到若干个所述匹配的文件尾碎片,将距离所述文件头碎片的存储地址最近的文件尾碎片作为所述匹配的文件尾碎片。[0047]由于在使用文件头碎片中的信息进行匹配查找时可能会查找到若干个匹配的文件尾碎片,因此可以设置规则在查找到若干个匹配的文件尾碎片时,使用其中距离文件头碎片的存储地址最近的文件尾碎片作为查找到的匹配的文件尾碎片。[0048]在本实施例中,首先根据文件头碎片中信息查找匹配的文件尾碎片,如果能够查找到,则判断文件头碎片中对象编号数组和对象偏移量数组是否全部包含匹配的文件尾碎片中的对象编号数组和对象偏移量数组,如果包含了全部的对象编号数组和对象偏移量数组,则将文件头碎片与匹配的文件尾碎片作为待恢复文件的完整碎片。通过使用以上方法,可以根据文件头碎片和文件尾碎片中的信息进行匹配查找和完整性确认,从而实现对HF文件的正确恢复,方便用户的使用。[0049]参见图4,该图为本发明提供的一种PDF文件恢复方法第三实施例的流程图。[0050]本实施例中的步骤S401-S405与一种PDF文件恢复方法第一实施中的步骤S301-S305相同,在此不再重复进行介绍。[0051]在本实施例中,还包括:S406:根据对象特征标识在存储介质上查找对象碎片。[0052]S407:若所述文件头碎片中包含的所述对象编号数组和所述对象偏移量数组没有全部包含所述匹配的文件尾碎片中记录的所述对象编号数组和所述对象偏移量数组,将所述文件头碎片与所述对象碎片合并组成新文件头碎片,判断所述新文件头碎片中包含的所述对象编号数组和所述对象偏移量数组是否全部包含所述匹配的文件尾碎片中记录的所述对象编号数组和所述对象偏移量数组。[0053]在根据文件头特征标识和文件尾特征标识查找文件头碎片和文件尾碎片时,还可以根据对象特征标识对对象碎片进行查找。[0054]具体为,在存储介质中查找符合对象特征标识(即“对象ID+0x20+对象修改次数+0x20+表项个数”和“endobj”)的数据,将该对象特征标识中的数据段所在的扇区作为对象碎片,并记录对象碎片的有关信息,包括:对象碎片容量大小HeadFragSizeO、对象碎片中包含的对象编号数组ObjIDListO、对象偏移量数组ObjStartListO和存储地址数组OffsetO等信息。其中,对象编号数组ObjIDListO和对象偏移量ObjStartListO是由查找结果形成,文件头碎片容量大小HeadFragSizeO为扇区大小(即HeadFragSizeO=SectorSize),存储地址OffsetO为头部特征所在存储介质的偏移扇区数与扇区大小的乘积(即OffsetO=SectorNumber氺SectorSize)。[0055]如果判断文件头碎片中对象编号数组ObjIDListH和对象偏移量数组ObjStartListH没有全部包含匹配的文件尾碎片中的对象编号数组ObjIDListT和对象偏移量数组ObjStartListT,则认为文件头碎片中的数据不完整。此时,可以将文件头碎片和查找到的对象碎片进行组合,成为了一个新的文件头碎片。将新的文件头碎片与匹配的文件尾碎片重新进行比较,判断新的文件头碎片中对象编号数组ObjIDListH和对象偏移量数组ObjStartListH是否全部包含了匹配的文件尾碎片中的对象编号数组ObjIDListT和对象偏移量数组0bjStartListT。[0056]如果新的文件头碎片中对象编号数组ObjIDListH和对象偏移量数组ObjStartListH全部包含了匹配的文件尾碎片中的对象编号数组ObjIDListT和对象偏移量数组ObjStartListT,则认为新的文件头碎片与匹配的文件尾碎片构成了完整碎片。否则可以将新的文件头碎片再与其它的对象碎片组合,并再次与匹配的文件尾碎片比较,直至与文件尾碎片构成了完整碎片或者没有对象碎片可以再组合。[0057]在本实施例中,如果判断文件头碎片中对象编号数组和对象偏移量数组没有全部包含匹配的文件尾碎片中的对象编号数组和对象偏移量数组,则将文件头碎片与对象碎片合并组成新文件头碎片并再次判断是否包含。通过使用以上方法,可以在文件头碎片不完整时使用对象碎片对文件头碎片进行补充,以实现与文件尾构成完整碎片进行文件恢复,增强了文件恢复效果,方便了用户的使用。[0058]参见图5,该图为本发明提供的一种PDF文件恢复方法第四实施例的流程图。[0059]在本实施例中,所述将所述文件头碎片与所述对象碎片合并组成新文件头碎片,具体为:S501:查找所述对象碎片,所述对象碎片中记录的所述对象编号和所述对象偏移量包括在所述匹配的文件尾碎片记录的对象编号数组和所述对象偏移量数组中,且没有包括在所述文件头碎片中包含的所述对象编号数组和所述对象偏移量数组中。[0060]S502:将所述文件头碎片的容量与所述对象碎片的容量相加,作为所述新文件头碎片的容量。[0061]S503:将所述文件头碎片中的对象编号数组与所述对象碎片的对象编号数组进行组合,作为所述新文件头的对象编号数组。[0062]S504:将所述文件头碎片中的对象偏移量数组与所述对象碎片中的对象偏移量数组进行组合,作为所述新文件头碎片的对象偏移量数组。[0063]由于在将文件头碎片与对象碎片进行组合是为了满足与文件尾碎片构成完整碎片的要求。因此,在选择对象碎片时也需要根据一定条件选择对象碎片。[0064]具体的,可以选择对象碎片的对象编号既包括在所述匹配的文件尾碎片所记录的对象编号数组中,又没有包括在所述文件头碎片包括的对象编号数组中。这样,将选择的对象碎片与文件头碎片进行组合后,可以使得组合成的新的文件头碎片符合文件尾碎片的要求。[0065]其中,为了保证能够在查找合适的对象碎片,可以扩展n个扇区进行查找,n为扇区的倍数。[0066]因此,n的确定方法为:获取对象碎片中ObjIDListO,ObjStartListO的第一个ObjIDO和ObjStartO,根据ObjIDO在文件尾碎片中获取对应的ObjStartT。如果ObjStartT>0bjstartO,并且(ObjStartT-0bjStartO)%SectorSize=0,则n=(0bjstartT-ObjStartO)/SectorSize,否则n不存在。[0067]在具体进行组合时,可以将文件头碎片中的容量HeadFragSizeH与对象碎片中的容量HeadFragSizeO相加,作为新文件头碎片的容量。将文件头碎片中的对象编号数组ObjIDListH与对象碎片中的对象编号数组ObjIDListO进行连接组合,作为新文件头的对象编号数组。将文件头碎片中的对象偏移量数组与对象碎片中的对象偏移量数组进行连接组合,作为新文件头的对象偏移量数组。[0068]使用文件头碎片和对象碎片组成新的文件头碎片的公式为:N(HeadFragSizeN,ObjIDListN,ObjStartListN)=H(HeadFragSizeH,ObjIDListH,ObjStartListH)+0(HeadFragSizeO,ObjIDListO,ObjStartListO)其中,N为新文件头碎片,H为文件头矿片,0为对象碎片。[0069]HeadFragSizeN=HeadFragSizeH+HeadFragSizeO,即将容量大小相加即可。[0070]ObjIDListN=ObjIDListH+0bjIDListO,即将两个对象编号数组进行连接组合。[0071]ObjStartListN=ObjStartListH+ObjStartListO,即将两个对象偏移量数组进行连接组合。[0072]其中,由于文件头碎片中的对象偏移量数组与对象碎片中的对象偏移量数组可能还需要使用偏移修正系数对对象碎片中的对象偏移量进行修正,以实现对偏移量的统一。即将ObjStartListO中的地址加上HeadFrageSizeH。[0073]并且,在将对象编号数组和对象偏移量数组进行连接组合后,在新的文件头碎片中的对象编号数组和对象偏移量数组还需要按照顺序逐一对应。[0074]在本实施例中,首先查找对象碎片,之后将文件头碎片的容量与对象碎片的容量相加,作为新文件头碎片的容量,将文件头碎片中的对象编号数组与对象碎片的对象编号数组进行组合,作为新文件头的对象编号数组,将文件头碎片中的对象偏移量数组与对象碎片中的对象偏移量数组进行组合,作为新文件头的对象偏移量数组。通过使用以上方法,可以实现按照指定规则查找对象碎片并以此组合成新的文件头碎片,从而达到构成完整碎片的要求。[0075]参见图6,该图为本发明提供的一种PDF文件恢复装置第一实施例的原理框图。[0076]本实施例中包括:文件头尾碎片查找模块601,完整碎片查找模块602和文件恢复模块603。[0077]所述文件头尾碎片查找模块601,用于根据文件头特征标识和文件尾特征标识在存储介质上查找文件头碎片和文件尾碎片。[0078]所述完整碎片查找模块602,用于根据所述文件头碎片中信息和所述文件尾碎片中信息,查找与所述文件头碎片中信息相匹配的所述文件尾碎片,将匹配的所述文件头碎片和所述文件尾碎片作为待恢复文件的完整碎片。[0079]所述文件恢复模块603,用于根据所述完整碎片恢复所述待恢复文件。[0080]在需要对文件进行恢复时,文件头尾碎片查找模块601首先根据PDF文件的结构特点对存储介质进行查找扫描,以文件结构中的文件头特征标识、对象特征标识和文件尾特征标识作为识别不同碎片段的依据。[0081]如在存储介质中查找文件头特征标识%PDF_”,如果能够找到以文件头特征标识,则将文件头特征标识中标注出的数据段作为文件头碎片,并记录文件头碎片的有关信息,包括:文件头碎片容量大小HeadFragSizeH、文件头碎片中包含的对象编号数组ObjIDListH、对象偏移量数组ObjStartLiStH和存储地址OffsetH等。对象编号数组ObjIDListH、对象偏移量数组ObjStartListH和存储地址OffsetH是相互对应的。其中,对象编号数组ObjIDListH和对象偏移量数组ObjStartListH是由查找结果形成,文件头碎片容量大小HeadFragSizeH为扇区大小(即HeadFragSizeH=SectorSize),存储地址OffsetH为头部特征所在存储介质的偏移扇区数与扇区大小的乘积(即OffsetH=SectorNumber*SectorSize)。[0082]同理,在存储介质中查找符合文件尾特征标识(即交叉引用表以“xref+OxOA+起始对象ID+0x20+表项个数”为起始标识,之后紧跟尾部数据。尾部数据的特征标识为以固定的“trailer”为开头并以“%%E0F”为结尾。)的数据段,作为文件尾碎片,并且记录文件尾碎片中的有关信息。包括:对象编号数组ObjIDListT、对象偏移量数组StartListT和存储地址OffsetT等。[0083]之后,完整碎片查找模块602根据得到的文件头碎片中的信息查找相匹配的文件尾碎片。其中,可以使用关键字判断方法查找匹配的文件尾碎片,如将文件头碎片中的对象编号数组ObjIDListH和对象偏移量数组StartListH等作为关键字,查找匹配的文件尾碎片。[0084]如果能够查找到匹配的文件尾碎片,则认为该文件头碎片和文件尾碎片是在同一文件中,将该文件头碎片和文件尾碎片作为文件的完整碎片。[0085]最后,文件恢复模块603根据收集到的完整碎片进行文件恢复。[0086]在本实施例中,首先文件头尾碎片查找模块根据特征标识获得文件头碎片和文件尾碎片,之后完整碎片查找模块根据文件头碎片中的信息查找相匹配的文件尾碎片作为待恢复文件的完整碎片,最后文件恢复模块根据完整碎片恢复文件。通过使用以上装置,可以结合PDF文件的结构特征,实现在对PDF文件的正确恢复,提高恢复的效果,方便用户的使用。[0087]参见图7,该图为本发明提供的一种PDF文件恢复装置第二实施例的原理框图。[0088]在本实施例中,所述完整碎片查找模块602,包括:文件尾匹配子模块701、文件头尾比较子模块702和完整碎片组合子模块703。[0089]所述文件尾匹配子模块701,用于根据所述文件头碎片中包含的对象编号数组和对象偏移量数组,查找是否存在匹配的文件尾碎片;所述匹配的文件尾碎片中记录的对象编号数组和对象偏移量数组包含了所述文件头碎片中包含的所述对象编号数组和所述对象偏移量数组。[0090]所述文件头尾比较子模块702,用于若查找到所述匹配的文件尾碎片,判断所述文件头碎片中包含的所述对象编号数组和所述对象偏移量数组是否全部包含了所述匹配的文件尾碎片中记录的所述对象编号数组和所述对象偏移量数组。[0091]所述完整碎片组合子模块703,用于若所述文件头碎片中包含的所述对象编号数组和所述对象偏移量数组全部包含所述匹配的文件尾碎片中记录的所述对象编号数组和所述对象偏移量数组,将所述文件头碎片与所述匹配的文件尾碎片作为所述待恢复文件的完整碎片。[0092]在通过特征标识查找到相应的文件头碎片和文件尾碎片后,文件尾匹配子模块701首先可以根据文件头碎片中包含的对象编号数组和对象偏移量数组来查找匹配的文件尾碎片。由于在文件头碎片中记录了对象编号数组ObjIDListH,对象偏移量数组ObjStartListH等信息,而在文件尾碎片中记录了对象编号数组ObjIDListT、对象偏移量数组ObjStartListT等信息。[0093]因此,可以以文件头碎片中的对象编号数组ObjIDListH、对象偏移量数组ObjStartListH为依据,查找匹配的文件尾碎片。其中,查找到的文件尾碎片中记录的对象编号数组ObjIDListT包含了文件头碎片中对象编号数组ObjIDListH,并且文件尾碎片中对应的对象偏移量数组ObjStartListT包含了文件头碎片中对象偏移量数组ObjStartListH0[0094]如果能够查找到匹配的文件尾碎片,则由文件头尾比较子模块702进一步判断文件头碎片中记录对象编号数组ObjIDListH和对象偏移量数组ObjStartListH是否全部包含了所述匹配的文件尾碎片中记录的对象编号数组ObjIDListT和对象偏移量数组ObjStartListT,即在文件尾碎片中的每一个对象编号数组都存在于文件头碎片的对象编号数组中,在文件尾碎片中的每一个对象偏移量数组都存在于文件头碎片包括的对象偏移量数组中。[0095]如果文件头碎片包括的对象编号数组ObjIDListH和对象偏移量数组ObjStartListH全部包含了匹配的文件尾碎片中的对象编号数组ObjIDListT和对象偏移量数组ObjStartListT,由完整碎片组合子模块703将该文件头碎片和该匹配的文件尾碎片构成待恢复文件的完整碎片,可以依据该完整碎片对文件进行恢复。[0096]在本实施例中,还包括:文件尾碎片选择子模块。[0097]所述文件尾碎片选择子模块,用于若查找到若干个所述匹配的文件尾碎片,将距离所述文件头碎片的存储地址最近的文件尾碎片作为所述匹配的文件尾碎片。[0098]由于在使用文件头碎片中的信息进行匹配查找时可能会查找到若干个匹配的文件尾碎片,因此可以设置规则在查找到若干个匹配的文件尾碎片时,使用其中距离文件头碎片的存储地址最近的文件尾碎片作为查找到的匹配的文件尾碎片。[0099]在本实施例中,完整碎片查找模块包括:文件尾匹配子模块、文件头尾比较子模块和完整碎片组合子模块。文件尾匹配子模块首先根据文件头碎片中信息查找匹配的文件尾碎片,如果能够查找到,则文件头尾比较子模块判断文件头碎片中对象编号数组和对象偏移量数组是否全部包含匹配的文件尾碎片中的对象编号数组和对象偏移量数组,如果包含了全部的对象编号数组和对象偏移量数组,则完整碎片组合子模块将文件头碎片与匹配的文件尾碎片作为待恢复文件的完整碎片。通过使用以上装置,可以根据文件头碎片和文件尾碎片中的信息进行匹配查找和完整性确认,从而实现对PDF文件的正确恢复,方便用户的使用。[0100]本实施例为本发明提供的一种PDF文件恢复装置的第三实施例。[0101]在本实施例中,还包括:对象碎片查找模块;在所述文件头尾比较子模块中,还包括:新文件头碎片组合子模块802;所述对象碎片查找模块,用于根据对象特征标识在存储介质上查找对象碎片;所述新文件头碎片组合子模块,用于若所述文件头碎片中包含的所述对象编号数组和所述对象偏移量数组没有全部包含所述匹配的文件尾碎片中记录的所述对象编号数组和所述对象偏移量数组,将所述文件头碎片与所述对象碎片合并组成新文件头碎片,判断所述新文件头碎片中包含的所述对象编号数组和所述对象偏移量数组是否全部包含所述匹配的文件尾碎片中记录的所述对象编号数组和所述对象偏移量数组。[0102]在根据文件头特征标识和文件尾特征标识查找文件头碎片和文件尾碎片时,还可以使用对象碎片查找模块根据对象特征标识对对象碎片进行查找。[0103]具体为,在存储介质中查找符合对象特征标识(S卩“对象ID+0x20+对象修改次数+0x20+表项个数”和“endobj”)的数据,将该对象特征标识中的数据段所在的扇区作为对象碎片,并记录对象碎片的有关信息,包括:对象碎片容量大小HeadFragSizeO、对象碎片中包含的对象编号数组ObjIDListO、对象碎片的偏移量数组ObjStartLiStO和存储地址数组OfTsetO等信息。其中,对象编号数组ObjIDListO和对象偏移量数组ObjStartListO是由查找结果形成,文件头碎片容量大小HeadFragSizeO为扇区大小(即HeadFragSizeO=SectorSize),存储地址OffsetO为对象特征所在存储介质的偏移扇区数与扇区大小的乘积(即0ffset0=SectorNumber*SectorSize)。[0104]如果判断文件头碎片中对象编号数组ObjIDListH和对象偏移量数组ObjStartListH没有全部包含匹配的文件尾碎片中的对象编号数组ObjIDListT和对象偏移量数组ObjStartListT,则认为文件头碎片中的数据不完整。此时,新文件头碎片组合子模块可以将文件头碎片和查找到的对象碎片进行组合,成为了一个新的文件头碎片。将新的文件头碎片与匹配的文件尾碎片重新进行比较,判断新的文件头碎片中对象编号数组ObjIDListH和对象偏移量数组ObjStartListH是否全部包含了匹配的文件尾碎片中的对象编号数组ObjIDListT和对象偏移量数组ObjStartListT。[0105]如果新的文件头碎片中对象编号数组ObjIDListH和对象偏移量数组ObjStartListH全部包含了匹配的文件尾碎片中的对象编号数组ObjIDListT和对象偏移量数组ObjStartListT,则认为新的文件头碎片与匹配的文件尾碎片构成了完整碎片。否则可以将新的文件头碎片再与其它的对象碎片组合,并再次与匹配的文件尾碎片比较,直至与文件尾碎片构成了完整碎片或者没有对象碎片可以再组合。[0106]在本实施例中,如果判断文件头碎片中对象编号数组和对象偏移量数组没有全部包含匹配的文件尾碎片中的对象编号数组和对象偏移量数组,则新文件头碎片组合子模块将文件头碎片与对象碎片合并组成新文件头碎片并再次判断是否包含。通过使用以上装置,可以在文件头碎片不完整时使用对象碎片对文件头碎片进行补充,以实现与文件尾构成完整碎片进行文件恢复,增强了文件恢复效果,方便了用户的使用。[0107]参见图8,该图为本发明提供的一种PDF文件恢复装置第四实施例的原理框图。[0108]在本实施例中,所述新文件头碎片组合子模块800,还包括:对象碎片匹配子模块801、新容量计算子模块802、对象编号组合子模块803和对象偏移量组合子模块904。[0109]所述对象碎片匹配子模块801,用于查找所述对象碎片,所述对象碎片中记录的所述对象编号数组和所述对象偏移量数组包括在所述匹配的文件尾碎片记录的对象编号数组和所述对象偏移量数组中,且没有包括在所述文件头碎片中包含的所述对象编号数组和所述对象偏移量数组中。[0110]所述新容量计算子模块802,用于将所述文件头碎片的容量与所述对象碎片的容量相加,作为所述新文件头碎片的容量;所述对象编号组合子模块803,用于将所述文件头碎片中的对象编号数组与所述对象碎片的对象编号数组进行组合,作为所述新文件头的对象编号数组。[0111]所述对象偏移量组合子模块804,用于将所述文件头碎片中的对象偏移量数组与所述对象碎片中的对象偏移量数组进行组合,作为所述新文件头碎片的对象偏移量数组。[0112]由于在将文件头碎片与对象碎片进行组合是为了满足与文件尾碎片构成完整碎片的要求。因此,在选择对象碎片时可以使用对象碎片匹配子模块801根据一定条件选择对象碎片。[0113]具体的,可以选择对象碎片的对象编号既包括在所述匹配的文件尾碎片所记录的对象编号数组中,又没有包括在所述文件头碎片包括的对象编号数组中。这样,将选择的对象碎片与文件头碎片进行组合后,可以使得组合成的新的文件头碎片附合文件尾碎片的要求。[0114]其中,为了保证能够在查找合适的对象碎片,可以扩展n个扇区进行查找,n为扇区的倍数。[0115]因此,n的确定方法为:获取对象碎片中ObjIDListO,ObjStartListO的第一个ObjIDO和ObjStartO,根据ObjIDO在文件尾碎片中获取对应的ObjStartT。如果ObjStartT>0bjstartO,并且(ObjStartT-0bjStartO)%SectorSize=0,则n=(0bjstartT-ObjStartO)/SectorSize,否则n不存在。[0116]在具体进行组合时,可以使用新容量计算子模块802将文件头碎片中的容量HeadFragSizeH与对象碎片中的容量HeadFragSizeO相加,作为新文件头碎片的容量。可以使用对象编号组合子模块803将文件头碎片中的对象编号数组ObjIDListH与对象碎片中的对象编号数组ObjIDListO进行连接组合,作为新文件头的对象编号数组。可以使用对象偏移量组合子模块804将文件头碎片中的对象偏移量数组与对象碎片中的对象偏移量数组进行连接组合,作为新文件头的对象偏移量数组。[0117]使用文件头碎片和对象碎片组成新的文件头碎片的公式为:N(HeadFragSizeN,ObjIDListN,ObjStartListN)=H(HeadFragSizeH,ObjIDListH,ObjStartListH)+0(HeadFragSizeO,ObjIDListO,ObjStartListO)其中,N为新文件头碎片,H为文件头矿片,O为对象碎片。[0118]HeadFragSizeN=HeadFragSizeH+HeadFragSizeO,即将容量大小相加即可。[0119]ObjIDListN=ObjIDListH+ObjIDListO,即将两个对象编号数组进行连接组合。[0120]ObjStartListN=ObjStartListH+ObjStartListO,即将两个对象偏移量数组进行连接组合。[0121]其中,由于文件头碎片中的对象偏移量与对象碎片中的对象偏移量可能还需要使用偏移修正系数对对象碎片中的对象偏移量进行修正,以实现对偏移量的统一。即将ObjStartListO中的地址加上HeadFragSizeH。[0122]并且,在将对象编号数组和对象偏移量数组进行连接组合后,在新的文件头碎片中的对象编号数组和对象偏移量数组还需要按照顺序逐一对应。[0123]在本实施例中,新文件头碎片组合子模块还包括:对象碎片匹配子模块、新容量计算子模块、对象编号组合子模块和对象偏移量组合子模块。对象碎片匹配子模块首先查找对象碎片,之后新容量计算子模块将文件头碎片的容量与对象碎片的容量相加,作为新文件头碎片的容量,对象编号组合子模块将文件头碎片中的对象编号数组与对象碎片的对象编号数组进行组合,作为新文件头的对象编号数组,对象偏移量组合子模块将文件头碎片中的对象偏移量数组与对象碎片中的对象偏移量数组进行组合,作为新文件头的对象偏移量数组。通过使用以上方法,可以实现按照指定规则查找对象碎片并以此组合成新的文件头碎片,从而达到构成完整碎片的要求。【权利要求】1.一种PDF文件恢复方法,其特征在于,包括:根据文件头特征标识和文件尾特征标识在存储介质上查找文件头碎片和文件尾碎片;根据所述文件头碎片中信息和所述文件尾碎片中信息,查找与所述文件头碎片中信息相匹配的所述文件尾碎片,将匹配的所述文件头碎片和所述文件尾碎片作为待恢复文件的完整碎片;根据所述完整碎片恢复所述待恢复文件。2.根据权利要求1所述的方法,其特征在于,所述根据所述文件头碎片中信息和所述文件尾碎片中信息,查找与所述文件头碎片中信息相匹配的所述文件尾碎片,将匹配的所述文件头碎片和所述文件尾碎片作为待恢复文件的完整碎片,具体为:根据所述文件头碎片中包含的对象编号数组和对象偏移量数组,查找是否存在匹配的文件尾碎片;所述匹配的文件尾碎片中记录的对象编号数组和对象偏移量数组包含了所述文件头碎片中包含的所述对象编号数组和所述对象偏移量数组;若查找到所述匹配的文件尾碎片,判断所述文件头碎片中包含的所述对象编号数组和所述对象偏移量数组是否全部包含了所述匹配的文件尾碎片中记录的所述对象编号数组和所述对象偏移量数组;若所述文件头碎片中包含的所述对象编号数组和所述对象偏移量数组全部包含所述匹配的文件尾碎片中记录的所述对象编号数组和所述对象偏移量数组,将所述文件头碎片与所述匹配的文件尾碎片作为所述待恢复文件的完整碎片。3.根据权利要求2所述的方法,其特征在于,还包括:若查找到若干个所述匹配的文件尾碎片,将距离所述文件头碎片的存储地址最近的文件尾碎片作为所述匹配的文件尾碎片。4.根据权利要求2所述的方法,其特征在于,还包括:根据对象特征标识在存储介质上查找对象碎片;若所述文件头碎片中包含的所述对象编号数组和所述对象偏移量数组没有全部包含所述匹配的文件尾碎片中记录的所述对象编号数组和所述对象偏移量数组,将所述文件头碎片与所述对象碎片合并组成新文件头碎片,判断所述新文件头碎片中包含的所述对象编号数组和所述对象偏移量数组是否全部包含所述匹配的文件尾碎片中记录的所述对象编号数组和所述对象偏移量数组。5.根据权利要求4所述的方法,其特征在于,将所述文件头碎片与所述对象碎片合并组成新文件头碎片,具体为:查找所述对象碎片,所述对象碎片中记录的所述对象编号数组和所述对象偏移量数组包括在所述匹配的文件尾碎片记录的对象编号数组和所述对象偏移量数组中,且没有包括在所述文件头碎片中包含的所述对象编号数组和所述对象偏移量数组中;将所述文件头碎片的容量与所述对象碎片的容量相加,作为所述新文件头碎片的容量;将所述文件头碎片中的对象编号数组与所述对象碎片的对象编号数组进行组合,作为所述新文件头的对象编号数组;将所述文件头碎片中的对象偏移量数组与所述对象碎片中的对象偏移量数组进行组合,作为所述新文件头碎片的对象偏移量数组。6.一种PDF文件恢复装置,其特征在于,包括:文件头尾碎片查找模块,完整碎片查找模块和文件恢复模块;所述文件头尾碎片查找模块,用于根据文件头特征标识和文件尾特征标识在存储介质上查找文件头碎片和文件尾碎片;所述完整碎片查找模块,用于根据所述文件头碎片中信息和所述文件尾碎片中信息,查找与所述文件头碎片中信息相匹配的所述文件尾碎片,将匹配的所述文件头碎片和所述文件尾碎片作为待恢复文件的完整碎片;所述文件恢复模块,用于根据所述完整碎片恢复所述待恢复文件。7.根据权利要求6所述的装置,其特征在于,所述完整碎片查找模块,包括:文件尾匹配子模块、文件头尾比较子模块和完整碎片组合子模块;所述文件尾匹配子模块,用于根据所述文件头碎片中包含的对象编号数组和对象偏移量数据,查找是否存在匹配的文件尾碎片;所述匹配的文件尾碎片中记录的对象编号数组和对象偏移量数组包含了所述文件头碎片中包含的所述对象编号数组和所述对象偏移量数组;所述文件头尾比较子模块,用于若查找到所述匹配的文件尾碎片,判断所述文件头碎片中包含的所述对象编号数组和所述对象偏移量数组是否全部包含了所述匹配的文件尾碎片中记录的所述对象编号数组和所述对象偏移量数组;所述完整碎片组合子模块,用于若所述文件头碎片中包含的所述对象编号数组和所述对象偏移量数组全部包含所述匹配的文件尾碎片中记录的所述对象编号数组和所述对象偏移量数组,将所述文件头碎片与所述匹配的文件尾碎片作为所述待恢复文件的完整碎片。8.根据权利要求7所述的装置,其特征在于,所述完整碎片查找模块,还包括:文件尾碎片选择子模块;所述文件尾碎片选择子模块,用于若查找到若干个所述匹配的文件尾碎片,将距离所述文件头碎片的存储地址最近的文件尾碎片作为所述匹配的文件尾碎片。9.根据权利要求7所述的装置,其特征在于,还包括:对象碎片查找模块;所述对象碎片查找模块,用于根据对象特征标识在存储介质上查找对象碎片;在文件头尾比较子模块,还包括:新文件头碎片组合子模块;所述新文件头碎片组合子模块,用于若所述文件头碎片中包含的所述对象编号数组和所述对象偏移量数组没有全部包含所述匹配的文件尾碎片中记录的所述对象编号数组和所述对象偏移量数组,将所述文件头碎片与所述对象碎片合并组成新文件头碎片,判断所述新文件头碎片中包含的所述对象编号数组和所述对象偏移量数组是否全部包含所述匹配的文件尾碎片中记录的所述对象编号数组和所述对象偏移量数组。10.根据权利要求9所述的装置,其特征在于,所述新文件头碎片组合子模块,还包括:对象碎片匹配子模块、新容量计算子模块、对象编号组合子模块和对象偏移量组合子模块;所述对象碎片匹配子模块,用于查找所述对象碎片,所述对象碎片中记录的所述对象编号数组和所述对象偏移量数组包括在所述匹配的文件尾碎片记录的对象编号数组和所述对象偏移量数组中,且没有包括在所述文件头碎片中包含的所述对象编号数组和所述对象偏移量数组中;所述新容量计算子模块,用于将所述文件头碎片的容量与所述对象碎片的容量相加,作为所述新文件头碎片的容量;所述对象编号组合子模块,用于将所述文件头碎片中的对象编号数组与所述对象碎片的对象编号数组进行组合,作为所述新文件头的对象编号数组;所述对象偏移量组合子模块,用于将所述文件头碎片中的对象偏移量数组与所述对象碎片中的对象偏移量数组进行组合,作为所述新文件头碎片的对象偏移量数组。【文档编号】G06F11/14GK103645974SQ201310747950【公开日】2014年3月19日申请日期:2013年12月31日优先权日:2013年12月31日【发明者】沈长达,钱镜洁,林艺滨申请人:厦门市美亚柏科信息股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1