数据结构论坛

首页 » 分类 » 常识 » 效率源技术视界Microsoft文档文
TUhjnbcbe - 2023/6/24 20:36:00

Microsoft文档是Microsoft公司的一个文件处理程序生成的文件格式。Microsoft文档在我们的工作生活中运用的非常广泛,因为它属于电子数据中的一类,所以也就具有电子数据的特性:无形性、多样性、真实性、易破坏性。因为其具有易破坏性,所以针对Microsoft文档文件的修复是本文所要论述的内容。

任何文档文件的修复都需要先了解其文档结构,针对Microsoft文档的文件结构,我们分为两类来讨论:

◆其中一类是DOC/XLS/PPT,是Microsoftoffice及之前的版本使用的文件格式,它们是复合文档,文件中包含文字、图片、电子表格数据、声音、视频图像以及其他信息。

◆另一类是DOCX/XLSX/PPTX,它们是Microsoftoffice之后版本使用的文件格式,是基于officeOpenXML标准的压缩文件格式,其中也包含文字、图片、电子表格数据、声音、视频图像等复合信息,但是它与复合文档不同之处在于,所有的文件信息都是基于XML文件进行存储之后,再对于所有的文件数据进行压缩处理。

复合文档

(DOC/XLS/PPT)

1.复合文档概述

复合文档(CompoundDocument)是一种不仅包含文本而且包括图形、电子表格数据、声音、视频图象以及其它信息的文档。可以把复合文档想象成一个所有者,它装着文本、图形以及多媒体信息如声音和图象。目前建立复合文档的趋势是使用面向对象技术,在这里,非标准信息如图像和声音可以作为独立的、自包含式对象包含在文档中。Document、Excel、PowerPoint等都是用这种格式存储的。

复合文档的原理就像一个文件系统(文件系统:如FAT与NTFS)。复合文档将数据分成许多流(Streams),这些流又存储在不同的仓库(Storages)里。将复合文档想象成你的D盘,D盘用的是NTFS(NTFileSystem)格式,流就相当于D盘里的文件,仓库就相当于D盘里的文件夹。

流和仓库的命名规则与文件系统相似,同一个仓库下的流及仓库不能重名,不同仓库下可以有同名的流。每个复合文档都有一个根仓库(rootstorage)。如图1所示:

图1复合文档仓库和流结构的关系

复合文档中所有的流又分成更小的数据块,叫做数据扇区(sectors)。Sectors可能包含控制数据或用户数据。整个文件由一个头(Header)结构以及其后的所有Sectors组成。Sectors的大小在头中确定,且每个Sectors的大小都相同,如图2所示:

图2复合文档sectors结构

2.lDOC文档结构

复合文档以sectors为基本单位对文件数据进行管理,如图2所示第一个数据扇区HEADER至关重要,其中存储了管理文件扇区内容的配置表信息,以及文件相关属性描述信息。整个文件的数据内容均是以HEADER数据扇区的内容为基础进行存储管理的。若该扇区被破坏,则会导致文件内容无法正常打开使用。而关于复合文档基于结构的文件修复方案,也是基于HEADER数据扇区管理的所有扇区内容展开的。

在复合文档中涉及多种扇区配置表的概念,其中包含三类扇区配置表:

一是主扇区配置表MSAT,管理文档所有用来存放扇区配置表的扇区数。

二是短扇区配置表SSAT,管理文档中小于指定流大小的短流扇区数。

三是扇区配置表SAT,管理所有用户流(短流除外)和内部控制流的扇区数。在复合文档中扇区数通过SID来表示,一个配置表就是一个SID链。

以doc文档为例说明复合文档基于结构的修复方案:

Doc文档的存储结构,如图3所示:

图3doc文档存储结构

图3中各部分结构在任一doc文档中并不一定按照该顺序存储,如图3中doc文档包含各部分的存储顺序和数据扇区排列方式,是以RootEntry为入口,构建一个独立的红黑树(red-blacktree),而图3中各部分在doc文档中的存储顺序就是以红黑树中各部分的节点描述信息进行排列存储的。

图3中各部分存储的内容介绍如表所示:

表3doc文档结构描述

3.复合文档修复方案

图4复合文档修复方案

复合文档文件修复方案有两种,一是基于扇区结构的修复方案,二是基于流数据的修复方案。

基于扇区结构的修复方案:

1、HEADER扇区受损

根据HEADER扇区的固定结构,对HEADER扇区中缺失或错误的字段内容进行修改处理,确保HEADER扇区的内容能够与文档的配置表信息、文档属性描述信息、文档扇区大小等信息正确对应。

HEADER扇区的数据内容结构如图5所示。

图5HEADER扇区

2、内部控制流扇区受损

内部控制流扇区一般指的是文档的配置表扇区内容被破坏,包括SAT、SSAT、MSAT这三类配置表扇区内包含的SID值与文档的实际情况不能一一的对应起来,则需要结合HEADER扇区和文档实际扇区内容的情况,对文档中所有的扇区进行解析,判断每个扇区内数据结构对内部控制流扇区进行修改处理,从而重新生成修复完成后的复合文档。

3、用户数据流扇区受损

用户数据流扇区一般指的是在生成文件时,因用户对文档的增删改等操作而改变的文档中存储的数据流扇区被破坏的情况下,对这部分扇区内容进行修复处理。对于这部分数据,则需要结合图3中描述的文件结构来确定文档中存储这些结构的扇区位置,然后判断是其中的哪些结构错误或缺失造成文件被破坏,再针对被破坏结构结合其中存储的固定信息内容进行修复处理。

基于流数据的修复方案:

对于基于流数据的修复方案,针对的是复合文档中基本的扇区结构已经被完全破坏,不能通过文档的扇区配置表以及目录数据流对文档的内容按照图3的结构进行判断处理的情况。

结合复合文档的概念,因为复合文档中存储的内容可能有文字、图片、视频、声音等类型的数据。而这些数据存储在文档中并没有进行再压缩操作,基于流数据的修复方案,就是利用这一点,针对文档中可能存在的不同类型的数据,按照这些类型的数据本身具备的数据结构特点,对文档进行逐字节解析判断。

图片、视频、声音这类的数据因其数据格式都有其固定的结构和标识,在对文档内容进行解析判断时,可结合这类型数据的结构特点进行分析判断。若满足这类数据的结构特点,则提取出来结合这类数据的结构重新保存生成新的文件;若不是,则判断这部分数据是否为文档的内部控制流数据或目录数据流,若都不是,则这部分数据为复合文档的文字数据,并将其提取出来保存为文本文件。

通过基于流数据修复方案修复完成的文档,会将修复出来的数据内容,按照其存储内容的数据类型进行分类保存。基于流数据的修复方案的流程图,如图6所示:

图6基于流数据的修复方案流程图

基于officeOpenXML标准压缩文件

(DOCX/XLSX/PPTX)

1.基于officeOpenXML标准压缩文件概念

基于officeOpenXML标准压缩文件本质上是一个ZIP压缩文件。它在结构上完全可以将其看做一个ZIP文件,但是它同时也具备特定的文件目录结构。所以它与其他的ZIP文件不同之处在于,基于officeOpenXML标准压缩文件解压后包含的文件目录结构具有特定的含义。

2.DOCX文档结构

以DOCX文档为例,DOCX有三个主要的组成部分:部件、内容类型和部件关系。针对这三个组成部分进行详细介绍如下:

A、部件:对应于DOCX文档解压后的一个个文件。这些文件都是包中的文档部件。

表2Docx文档部件

基于officeOpenXML标准压缩文件(DOCX/XLSX/PPTX)使用单独的文件(xml)来表示文档中的每个部分以及附加的内容。它们需要依赖于各部件之间的正确关系保证文件的完整和有效性,如果可以准确保持部件之间的关系,那么文件结构可以任意更改。以DOCX文档为例,它的openxml目录结构如图7所示:

图7DOCX文档openxml的文件目录结构

如图7所示,一个文档则是由一个文件夹(或者说容器),由内部的部件各自定义属性和数据,并相互依赖而产生的。一个文件可能会包含这些目录和组件,关于各个文件目录的关系描述如表3所示:

表3DOCX文档openxml的文件目录内容描述

B、内容类型

每个文档部件都有一个特定的内容类型。一个部件的内容类型描述了这种文件类型的内容。例如,XML部件包含了WordXML格式定义的标记,而内容类型可以用来分析文档的组成。

C、部件关系

部件关系记录了文档部件之间的逻辑连接,构建关系的方法是:每一个关系中都有一个源一个目的,源是关系命名的部件。例如,document.xml.rels中所有的关系都将document.xml作为它们的源。每个.rels文件都包含一个relationships元素,每个元素都对应一个ID,包括目标部件的内容类型。

3.基于officeOpenXML标准压缩文件修复方案

图8基于officeOpenXML标准压缩文件修复方案

基于ZIP结构的修复方案

基于ZIP结构的修复方案,对因ZIP结构上的错误或缺失损坏造成的基于officeOpenXML标准压缩文件无法正常使用的情况适用。对于该修复方案分为三步描述如下:

1)结合ZIP文件结构的特性,对基于officeOpenXML标准压缩文件的文件内容进行解析。

2)通过解析ZIP文件特定的三部分压缩源文件数据区、目录区、目录结束标志,对压缩源文件数据区文件头、压缩源文件目录区数据结构以及压缩源文件目录结束标志内容进行解析,从而判断出造成基于officeOpenXML标准压缩文件无法正常使用的原因。

3)对基于officeOpenXML标准压缩文件中错误、缺失部分结合ZIP压缩文件特定的结构,如数据压缩校验值,数据区、目录区内容的偏移位置和字节长度,压缩源文件目录总数等问题进行解析、判断、修复、完善,保存为新的文件。

基于压缩数据流的修复方案

该方案针对因为压缩数据流不完整造成的文件无法正常使用的情况,这里需要结合表3中描述的各个文件目录的作用对文件进行修复。这里分为两种情况:一是word文件夹下文件内容丢失或损坏;二是其他文件目录下XML文件数据丢失或损坏;

1)word文件夹下文件内容丢失或损坏

◆首先提取出为丢失部分文件数据,按照每个压缩源文件对提取出的文件数据进行解压缩算法实现,对未丢失数据进行解析提取保存到新文件。

◆然后解析出其他未丢失或损坏的XML文件,按照基于officeOpenXML标准压缩文件三个组成部分,重新组合出新的文件目录结构。

◆最后将重新组合生成的文件目录进行ZIP压缩,并对压缩后的ZIP文件修改文件后缀名(DOCX/XLSX/PPTX)。

2)其他文件目录下XML文件数据丢失或损坏

◆首先,提取出文件中未丢失的压缩源文件数据内容。

◆其次,结合图3中描述的基于officeOpenXML标准压缩文件完整的文件目录结构,对缺失的XML文件进行构造。

◆最后将重新组合生成的文件目录进行ZIP压缩,并对压缩后的ZIP文件修改文件后缀名(DOCX/XLSX/PPTX)。

本文主要介绍了有关Microsoft文档文件的不同文件格式的结构和修复方案,希望对您有一定的参考价值。

如对文中的操作、描述有任何疑问,或者有相关案件需要协助,欢迎拨打热线电话-或直接在

1
查看完整版本: 效率源技术视界Microsoft文档文