一种解析文档二进制格式的方法,系统,设备及可读存储介质技术方案

技术编号:23343247 阅读:34 留言:0更新日期:2020-02-15 03:51
本发明专利技术提供一种解析xls文档二进制格式,提取文件中图片的方法、系统、设备。通过读取二进制数据流的记录头,对所述记录头类型值进行判断;如果记录头类型值是第一类型值,则所述记录头所记录的图片信息数据结构为OfficeArtDggContainer信息;获取信息所对应的记录信息,判断图片数据是否全部存储在记录信息中;图片数据长度由MsoDrawingGroup的记录信息中blipStore.rh来决定;依次遍历blipStore.rgfb数据,根据预设算法对数据进行解析处理。本发明专利技术无需安装Excel或者封装Excel组件文件,不依赖任何第三方程序文件。二进制读取文件,分析文件格式,精确定位图片数据进行操作,系统效率显著提高。

A method, system, device and readable storage medium for parsing binary format of documents

【技术实现步骤摘要】
一种解析文档二进制格式的方法,系统,设备及可读存储介质
本专利技术涉及文档数据处理
,尤其涉及一种解析文档二进制格式的方法,系统,设备及可读存储介质。
技术介绍
MicrosoftOfficeExcel的版本均采用xls作为其表格文档存储格式。Xls文件格式和doc、ppt、格式类似,是一种复合文档,以流的方式来存储数据,可以存储文字、图片等多种形式的数据。由于某种业务需求,需要将xls文件中存储的图片数据提取出来时,现行方式主要有以下几点:1)利用Excel软件打开xls文件,在图片上点击鼠标右键进行复制,然后再粘贴到画图或其它软件中,或者另存为图片;2)利用Excel软件打开xls文件,另存为网页文件(html),然后从导出的资源文件中获取到文件中的图片。3)在装有Excel软件的操作系统上,采用编程的方式,调用Excel二次开发接口,枚举文件中的图片进行提取操作。上述几种操作方式存在以下缺点:1)操作系统必须安装有支持编辑xls文件的软件,否则无法操作。2)如果xls文件中存储的图片数据很多,手动方式提取图片工作量大,难以操作。3)利用Excel二次开发接口,容易出现兼容性问题,例如异常弹框,功能异常等问题,同时提取效率较低。
技术实现思路
本专利技术提供一种可同时处理多个xls文件中的图片,能够提高处理效率的解析文档二进制格式的方法,系统,设备及可读存储介质。其中,方法包括:步骤一,获取用户输入的xls文件路径以及图片保存文件夹路径;步骤二,打开xls文件,获取文件读操作句柄;步骤三,打开数据流,获取该数据流的操作句柄;步骤四,读取数据流的记录头,对所述记录头类型值进行判断;如果记录头类型值是第一类型值,则所述记录头所记录的图片信息数据结构为OfficeArtDggContainer信息;步骤五,获取OfficeArtDggContainer信息所对应MsoDrawingGroup的记录信息,判断图片数据是否全部存储在MsoDrawingGroup的记录信息中;步骤六,将图片数据全部存储在MsoDrawingGroup的记录信息中;将图片数据存储在OfficeArtDggContainer结构的blipStore成员中;将图片信息数据,偏移到blipStore处理;根据blipStore.rh成员获取总数据长度;依次遍历blipStore.rgfb数据,根据预设算法对数据进行解析处理;步骤七,重复上述步骤四至步骤六,直到数据流结束;当达到数据流结束位置,整个提取过程结束,释放资源。进一步需要说明的是,步骤四还包括:如果记录头类型值是第二类型值,则所述数据流已经处理结束,则跳转到步骤七操作;如果记录头类型值为非第一类型值和第二类型值时,则将文件流的读指针跳转到下一个记录的起始位置,重复步骤四操作。进一步需要说明的是,步骤五还包括:图片数据的总字节数为L;MsoDrawingGroup记录信息的容量为预设容量Y;如果图片数据全部存储在MsoDrawingGroup的记录信息中,则L小于等于预设容量Y;L大于预设容量Y,则图片数据存储在N个MsoDrawingGroup记录中,将N个MsoDrawingGroup记录均读取后,再跳转到第六步,继续分析操作。进一步需要说明的是,N值的确定方法包括:L对Y取余操作,结果记作M;若M=0,则N=L/Y;若M不等于0,则N=(L/Y)+1。进一步需要说明的是,步骤六中,根据blipStore.rh成员获取总数据长度;依次遍历blipStore.rgfb数据,根据预设算法对数据进行解析处理还包括:依次遍历blipStore.rgfb数据,如果rh.rcType=0xF007,则采用第一算法进行处理;第一算法包括:提取OfficeArtFBSE结构中图片数据;在OfficeArtFBSE结构中,固定长度为44个字节,成员cbName存储图片名称数据的长度值,记作N;根据rh.rcType和rh.rcInstance值,确定图片真实数据额外偏移的数据长度,该值记作M;图片真实数据的偏移位置O=44+N+M;每个rgfb从偏移O个字节开始,为图片真实数据,图片长度L=数据总长度–O;将图片数据直接存储到文件中,完成了图片的提取;继续下一个rgfb的解析。进一步需要说明的是,如果rh.rcType不等于0xF007,则采用第二算法进行处理;第二算法包括:提取OfficeArtBlip结构中图片数据,根据rh.rcType和rh.rcInstance值,确定图片真实数据在rgfb结构中偏移字节数,记作O;每个rgfb从偏移O个字节开始,为图片的真实数据,图片数据长度L=rc.recLen–O;将图片数据直接存储到文件中,完成了图片的提取,继续下一个rgfb的解析。本专利技术还提供一种解析文档二进制格式的系统,包括:数据获取模块,打开模块,操作句柄获取模块,记录头类型值判断模块,存储记录信息状态判断模块,解析处理模块以及资源释放模块;数据获取模块用于获取用户输入的xls文件路径以及图片保存文件夹路径;打开模块用于打开xls文件,获取文件读操作句柄;操作句柄获取模块用于打开数据流,获取该数据流的操作句柄;记录头类型值判断模块用于读取数据流的记录头,对所述记录头类型值进行判断;如果记录头类型值是第一类型值,则所述记录头所记录的图片信息数据结构为OfficeArtDggContainer信息;存储记录信息状态判断模块用于获取OfficeArtDggContainer信息所对应MsoDrawingGroup的记录信息,判断图片数据是否全部存储在MsoDrawingGroup的记录信息中;解析处理模块用于将图片数据全部存储在MsoDrawingGroup的记录信息中;将图片数据存储在OfficeArtDggContainer结构的blipStore成员中;将图片信息数据,偏移到blipStore处理;根据blipStore.rh成员获取总数据长度;依次遍历blipStore.rgfb数据,根据预设算法对数据进行解析处理;资源释放模块用于当达到数据流结束位置,则整个提取过程结束,释放资源。本专利技术还提供一种解析文档二进制格式的方法的设备,包括:存储器,用于存储计算机程序及解析文档二进制格式的方法;处理器,用于执行所述计算机程序及解析文档二进制格式的方法,以实现解析文档二进制格式的方法的步骤。本专利技术还提供一种具有解析文档二进制格式的方法的可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行以实现解析文档二进制格本文档来自技高网...

【技术保护点】
1.一种解析文档二进制格式的方法,其特征在于,方法包括:/n步骤一,获取用户输入的xls文件路径以及图片保存文件夹路径;/n步骤二,打开xls文件,获取文件读操作句柄;/n步骤三,打开数据流,获取该数据流的操作句柄;/n步骤四,读取数据流的记录头,对所述记录头类型值进行判断;/n如果记录头类型值是第一类型值,则所述记录头所记录的图片信息数据结构为OfficeArtDggContainer信息;/n步骤五,获取OfficeArtDggContainer信息所对应MsoDrawingGroup的记录信息,判断图片数据是否全部存储在MsoDrawingGroup的记录信息中;/n步骤六,将图片数据全部存储在MsoDrawingGroup的记录信息中;/n将图片数据存储在OfficeArtDggContainer结构的blipStore成员中;/n将图片信息数据,偏移到blipStore处理;/n根据blipStore.rh成员获取总数据长度;依次遍历blipStore.rgfb数据,根据预设算法对数据进行解析处理;/n步骤七,重复上述步骤四至步骤六,直到数据流结束;/n当达到数据流结束位置,整个提取过程结束,释放资源。/n...

【技术特征摘要】
1.一种解析文档二进制格式的方法,其特征在于,方法包括:
步骤一,获取用户输入的xls文件路径以及图片保存文件夹路径;
步骤二,打开xls文件,获取文件读操作句柄;
步骤三,打开数据流,获取该数据流的操作句柄;
步骤四,读取数据流的记录头,对所述记录头类型值进行判断;
如果记录头类型值是第一类型值,则所述记录头所记录的图片信息数据结构为OfficeArtDggContainer信息;
步骤五,获取OfficeArtDggContainer信息所对应MsoDrawingGroup的记录信息,判断图片数据是否全部存储在MsoDrawingGroup的记录信息中;
步骤六,将图片数据全部存储在MsoDrawingGroup的记录信息中;
将图片数据存储在OfficeArtDggContainer结构的blipStore成员中;
将图片信息数据,偏移到blipStore处理;
根据blipStore.rh成员获取总数据长度;依次遍历blipStore.rgfb数据,根据预设算法对数据进行解析处理;
步骤七,重复上述步骤四至步骤六,直到数据流结束;
当达到数据流结束位置,整个提取过程结束,释放资源。


2.根据权利要求1所述的解析文档二进制格式的方法,其特征在于,
步骤四还包括:
如果记录头类型值是第二类型值,则所述数据流已经处理结束,则跳转到步骤七操作;
如果记录头类型值为非第一类型值和第二类型值时,则将文件流的读指针跳转到下一个记录的起始位置,重复步骤四操作。


3.根据权利要求1所述的解析文档二进制格式的方法,其特征在于,
步骤五还包括:图片数据的总字节数为L;MsoDrawingGroup记录信息的容量为预设容量Y;
如果图片数据全部存储在MsoDrawingGroup的记录信息中,则L小于等于预设容量Y;
L大于预设容量Y,则图片数据存储在N个MsoDrawingGroup记录中,将N个MsoDrawingGroup记录均读取后,再跳转到第六步,继续分析操作。


4.根据权利要求3所述的解析文档二进制格式的方法,其特征在于,
N值的确定方法包括:
L对Y取余操作,结果记作M;
若M=0,则N=L/Y;
若M不等于0,则N=(L/Y)+1。


5.根据权利要求1或2所述的解析文档二进制格式的方法,其特征在于,
步骤六中,根据blipStore.rh成员获取总数据长度;依次遍历blipStore.rgfb数据,根据预设算法对数据进行解析处理还包括:
依次遍历blipStore.rgfb数据,如果rh.rcType=0xF007,则采用第一算法进行处理;
第一算法包括:
提取OfficeArtFBSE结构中图片数据;
在OfficeArtFBSE结构中,固定长度为44个字节,成员cbName存储图片名称数据的长度值,...

【专利技术属性】
技术研发人员:李显程苗功勋崔新安王金国
申请(专利权)人:中孚安全技术有限公司中孚信息股份有限公司北京中孚泰和科技发展股份有限公司
类型:发明
国别省市:山东;37

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1