CN104881409B - 一种文档加载的方法及装置 - Google Patents
一种文档加载的方法及装置 Download PDFInfo
- Publication number
- CN104881409B CN104881409B CN201410069307.7A CN201410069307A CN104881409B CN 104881409 B CN104881409 B CN 104881409B CN 201410069307 A CN201410069307 A CN 201410069307A CN 104881409 B CN104881409 B CN 104881409B
- Authority
- CN
- China
- Prior art keywords
- document
- block
- document block
- file
- unit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Document Processing Apparatus (AREA)
Abstract
本发明涉及信息显示技术领域,具体公开了一种文档加载的方法及装置;包括:将Open XPS原文档拆分成三类文档块,文档块包含应用所需文档块、图片资源文档块和内容载体文档块;先获取应用所需文档块的字节流,同时并行获取图片资源文档块的字节流;在获取应用所需文档块的字节流完成后,发起虚拟文档的封装,其中虚拟文档根据客户端要求的页面向远程服务器获取页面中的内容载体文档块的字节流,虚拟文档存储有获取完成的三个文档块的字节流以及直接定位这些字节流的能力,封装完成后的虚拟文档作为一个完整的文档提供给客户端。本发明通过按类型拆分及并行获取方式,文档依次提供给阅读器,减少了文档加载时间,提高了用户阅读体验。
Description
技术领域
本发明涉及信息显示技术领域,尤其是涉及一种基于拆分再虚拟化的文档加载的方法及装置。
背景技术
目前,在线阅读器都是通过把各种格式的原始文档,如Word,PowerPoint,Excel,Txt,转换成某种中间文档,通过对中间文档的阅读支持,从而实现了大部分格式的在线阅读。
中间文档的选择,一般地有几个原则,一是其它原始文档能比较方便、快速地转化为中间文档;二是中间文档的内容排版要尽可能与原始文档的呈现一致;三是为了使在线阅读器的应用更加广泛,要求中间文档利于Internet传输,支持跨平台等。通常选择的是Open XML Paper Specification(Open XPS)格式文档。
Open XPS文件格式属于国际标准,标准号为Ecma-388。Open XPS是微软XPS的标准化版本。Open XPS文档是具有版面配置固定的电子文件格式,并且其自身包括了所需的全部数据和资源的压缩格式(ZIP)文件。Open XPS文档的一个显著特性是它通过目录结构和内容XML中指定的相对路径,有序的组织数据和资源,形成含有多层树型的逻辑结构。
一般地,压缩格式文件需要保证其完整性,才能提取里面的数据;在线阅读器在加载一个Open XPS文档时,Open XPS文档也要被完整获取,才能提取里面的数据,进行正常显示。
而在实现上述文档加载过程中,现有技术存在以下问题:1、需要将Open XPS文档完整的获取之后才能显示,当文档越大时,从开始获取至最终呈现的时间就会越长,并且内存占用也会越大,这样用户在可阅读前的等待时间将会过长,从而影响了用户的阅读体验;2、用户有时有可能只需要阅读文档的部分内容,通过简单的将文档大小顺序分块,然后并行下载,最后再组合的方式,虽然可以加快文档获取速度,但文档最终还是要还原为完整的压缩文件才能被使用,没有实现按需要获取,从根本上对阅读体验的改善效果不明显。
目前还没有有效的方案来解决上述问题。
发明内容
本发明所解决的技术问题是提供一种基于文档拆分再虚拟化的文档加载的方法及装置,本发明通过按类型拆分及并行获取方式,依次提供文档所阅读部分的内容,文档并非一次性全部提供给阅读器,达到减少文档加载时,需要等待过长时间的目的,极大的提高了用户阅读体验。
为了解决上述技术问题,本发明提供了一种文档加载的方法,包括:
步骤一:将Open XPS原文档拆分成三类文档块,所述文档块包含应用所需文档块、图片资源文档块和内容载体文档块;
步骤二:先获取所述应用所需文档块的字节流,同时并行获取所述图片资源文档块的字节流;
步骤三:在获取所述应用所需文档块的所述字节流完成后,发起虚拟文档的封装;其中所述虚拟文档根据所述客户端要求的页面向远程服务器获取所述页面中的所述内容载体文档块的所述字节流;所述虚拟文档存储有获取完成的所述应用所需文档块、所述图片资源文档块和所述内容载体文档块的所述字节流以及直接定位所述应用所需文档块、所述图片资源文档块和所述内容载体文档块的所述字节流的能力;封装完成后的所述虚拟文档作为一个完整的文档提供给客户端。
优选的,所述步骤一中,所述拆分的过程包括:解压所述原文档、处理解压后的文件和将待压缩目录压缩成分档块;处理解压后的所述文件的过程包括:创建待压缩目录、抽取所述文件、添加新控制文件和转换图片格式。
更加优选的,在抽取所述文件的过程中,抽取所述应用所需文档块、所述图片资源文档块和所述内容载体文档块对应的文件后缀的所述文件;根据所述文件后缀进行遍历查找并移动到新的待压缩目录中;所述应用所需文档块对应的文件后缀包括:文档定义序列文件.fdseq、引用关系文件.rels、文档页面序列文件.fdoc、字体文件.odttf和内容类型文件.xml;所述图片资源文档块对应的文件后缀是:.jpeg,.jPg,和.png;所述内容载体文档块对应的文件后缀是:.fpage。
更加优选的,在压缩所述待压缩目录成为分档块之前,在所述应用所需文档块的根目录下添加一个分块描述文件block.config,所述分块描述文件用以指导虚拟文档的封装。
更加优选的,所述分块描述文件包含所述原文档的总页数、预设所述内容载体文档块的最大页数和所述内容载体文档块的页面编号。
更加优选的,所述步骤二中,每个所述应用所需文档块、所述图片资源文档块和所述内容载体文档块在获取时,将先被分配一个执行优先级别数值,并在一个独立线程中进行,通过线程池来调度和管理所述线程的执行;所述线程池通过一个堆栈缓存所述文档块的获取请求,在没超过最大并发数时,所述获取请求被立即执行;在超过最大并发数时,所述获取请求优先级别值高的先执行;相同优先级别值的所述获取请求,后入栈的先执行;对同一个所述文档块的获取请求只被执行一次;所述最大并发数为2倍的所述客户端的CPU个数。
更加优选的,所述步骤二中,获取所述应用所需文档块、所述图片资源文档块和所述内容载体文档块的字节流完成时,触发对应的完成事件通知给所述客户端。
更加优选的,所述步骤二中,在获取所述图片资源文档块的字节流时,当所述图片资源文档块所对应的内容载体文档块不存在时,则实时获取缺失的所述内容载体文档块的字节流。
更加优选的,所述步骤三中,进行所述虚拟文档的封装时,为所述应用所需文档块、所述图片资源文档块和所述内容载体文档块分配唯一标识符,并记录所述应用所需文档块、所述图片资源文档块和所述内容载体文档块的状态;所述状态包括:初始未获取、获取中、获取成功和获取失败。
更加优选的,在所述步骤二之后或所述步骤三中所述应用所需文档块、所述图片资源文档块和所述内容载体文档块获取成功之后,还包括:在所述获取成功后,虚拟文档完成事件通知启动解析和渲染;所述图片资源文档块准备完成后,获取所述图片资源文档块的字节流的获取成功或获取失败通知启动补充渲染;获取所述图片资源文档块的字节流的获取成功或获取失败通知启动后续异步操作,通知所述客户端。
更加优选的,所述步骤三中,封装后的所述虚拟文档作为一个完整的文档提供给客户端之前,封装后的所述虚拟文档进行解析和渲染;先将获得的所述应用所需文档块、所述图片资源文档块和所述内容载体文档块的所述字节流解析成符合Open XPS文件格式的内存对象,并将所述内存对象渲染成象;在渲染过程中,先对所述应用所需文档块和所述内容载体文档块进行渲染;待所述图片资源文档块中的字节流获取成功后再进行补充渲染。
更加优选的,在所述虚拟文档进行解析时,当所述图片资源文档块的图片资源在初始未获取、获取中和获取失败的状态时,所述虚拟文档的解析正常进行,仅将缺失的所述图片资源的名称记录在解析后的所述内存对象中。
更加优选的,所述步骤三中,所述虚拟文档由一个所述应用所需文档块,一个所述图片资源文档块和N个所述内容载体文档块组成;所述N由从所述应用所需文档块中的所述分块描述文件block.config获取到的原文档总页数PAGE_COUNT和预设的所述内容载体文档块最大页数BLOCK_SIZE共同决定,其公式为:(PAGE_COUNT-1)/BLOCK_SIZE+1。
更加优选的,所述应用所需文档块是指所述Open XPS原文档的目录结构和分块描述文件的文件集合。
更加优选的,所述图片资源文档块是指文档内所有图片的文件集合,所述图片资源文档块包括缩略图和页面内图像。
更加优选的,所述内容载体文档块是指文档内所有页面内容定义.fpage的文件集合,所述.fpage是页面内容定义、排版、布局的文件;每一个页面对应一个.fpage文件;所述内容载体文档块是文档内容实际存储的容器。
本发明还提供了一种文档加载的装置,包括:
解压单元,用于解压ZIP格式的文件和文件夹;
抽取单元,用于在解压出的所述文件和所述文件夹中,根据文档块的类型指定的文件后缀,形成待压缩的指定文件夹;
压缩单元,用于以ZIP格式压缩所述指定文件夹,从而压缩成文档块;
虚拟文档单元,用于虚拟文档的管理,将压缩后的所述文档块封装成一个整体;
线程池管理单元,用于对封装后的所述文档块获取线程并发控制,同时提供线程执行的优先级别控制以及线程过滤控制;
文档块获取单元,用于获取线程池管理单元处理后的所述文档块的内容;
事件通知单元,用于所述虚拟文档单元和所述文档块获取单元在获取过程中进行事件通知给客户端。
优选的,所述抽取单元还包括:
类型后缀映射存储单元,用于存储文档块类型与文件后缀的对应关系,一个类型可以对应多个文件后缀;
文件遍历查找单元,用于遍历指定文件夹,并查找出具有指定文件后缀的文件;
文件移动单元,用于把文件从原文件夹移动到指定文件的功能;
分块信息存储单元,用于记录内容载体抽取时的细节信息;
分块信息写入单元,用于把分块信息存储单元序列化到block.config文件中,并写入应用所需文档块。
更加优选的,所述虚拟文档单元还包括:
文档块容器管理单元,用于根据block.config定义的内容,组织内容载体文档块的存储容器;
缓存内容载体文档块最大值判断单元,用于判断已加载的内容载体文档块是否已超过最大缓存值,若已超过最大缓存值,则移除离当前文档块最远的文档块;若未超过最大缓存值,则加入堆栈的末端;
最远文档块查找单元,用于查找离当前文档块最远的已缓存文档块。
更加优选的,所述线程池管理单元还包括:
线程缓存堆栈单元,用于保存文档块获取线程存储单元的信息;
线程优先级别判断单元,用于判断线程执行先后顺序,在未达到最大并发数前,优先级别值高的先执行,优先级别相同的后进的先执行;所述最大并发数为2倍的所述客户端的CPU个数;
线程并发判断单元,用于判断当前并发线程与最大并发线程的关系;
文档块去重单元,用于使同一个文档块的获取请求只被执行一次。
更加优选的,所述文档块获取单元还包括:文档块获取线程存储单元,用于保存获取的文档块编号,优先级别定义。
更加优选的,所述文档块的类型包含应用所需文档块、图片资源文档块和内容载体文档块。
更加优选的,所述事件通知单元还包括:事件参数存储单元,用于指定本次事件触发的虚拟文档实例、文档块编号和文档内容。
其中,XML是可扩展标记语言(英语:eXtensible Markup Language,简称:XML),是一种标记语言。标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。如何定义这些标记,既可以选择国际通用的标记语言,比如HTML,也可以使用像XML这样由相关人士自由决定的标记语言,这就是语言的可扩展性。XML是从标准通用标记语言(SGML)中简化修改出来的。它主要用到的有可扩展标记语言、可扩展样式语言(XSL)、XBRL和XPath等。Open XPS的全称是“Open XML Paper Specification”(开放式XML文件规范),是在Windows8M3Build8102预览版中新引入的一种文件格式,是微软提供的与PDF格式竞争的新的基于XML的文件格式。Open XPS基于欧洲板纸制造者协会(ECMA)的ECMA388标准规范而来。
其中,所述字体文件.odttf的总大小一般不会太大,且变化幅度也不会太大,另外它是文档内所有文字都必须引用的资源,所以预先加载字体资源,即可保证文档的基本内容效果。
其中,所述ZIP是一个计算机文件的压缩的算法,原名Deflate(真空),发明者为菲尔·卡茨(Phil Katz)),他于1989年1月公布了该格式的资料。ZIP通常使用后缀名“.zip”,它的MIME格式为application/zip。目前,ZIP格式属于几种主流的压缩格式之一,其竞争者包括RAR格式以及开放源码的7-Zip格式。从性能上比较,RAR格式较ZiP格式压缩率较高,而7-Zip由于提供了免费的压缩工具而逐渐在更多的领域得到应用。Win Mount可以把ZIP挂载到虚拟盘,无需解压,随即读取,这又是另一大创新。
本发明与现有技术相比,具有如下有益效果:
本发明提供了一种文档加载的方法及装置,本发明先对原文档拆分,接着进行文档块获取,然后进行虚拟文档创建,把文档块组织起来;一方面通过并行控制,提高了整体的获取,另一方面通过拆分后的文档块类型划分,使得不必获取整个文档即可启动解析,使用户可以按需下载文档部分内容,而无需将文档全部下载,即可以进行查看;而且虚拟文档又保证了使用时与现有技术的无差异性,因此,本发明体现了按需获取模式带来的好处,使得加载文档能更加节省内存,更加快捷,从而提高了大文档的呈现速度,可以使原需等待较长时间才能在线阅读的文档,快速呈现,特别是对于大文档,这种效果更加明显,减少了阅读前的等待时间,有效的改善了用户的阅读体验。
附图说明
图1为本发明实施例一文档加载的方法的流程图;
图2为本发明实施例二文档拆分装置的示意图;
图3为本发明实施例二文档加载装置的示意图;
图4为本发明实施例二与现有技术方案的对比示意图;
图5为本发明实施例二文档虚拟的内存结构示意图。
具体实施方式
为了更好的理解本发明所解决的技术问题、所提供的技术方案,以下结合附图及实施例,对本发明进行进一步详细说明。此处所描述的具体实施例仅用以解释本发明的实施,但并不用于限定本发明。
为提高在线阅读器加载文档的速度,改善用户阅读体验,本发明实施例一提供了一种文档加载方法,具体流程详见图1。首先,通过文档拆分11把文档进行拆分,拆分出不同类型的文档块,然后,通过文档块获取12根据需要有选择性地获取拆分后的文档块,最后,阅读器通过虚拟文档13把文档块组织起来,,为阅读器后续流程,如解析流程,提供一个虚拟的,完整的文档应用。在整个获取过程中,通过线程池管理,完成事件通知等技术支撑,保证了并行获取的有序进行。在虚拟文档13中,当请求的文档块还未下载,自动通过文档块获取12以远程获取,屏蔽了复杂的获取控制,为后续的解析流程提供了极大便利。
通过上述描述可以看出,当用户使用在线阅读器时,由于文档被拆分为多个文档块,并通过并行获取技术,加快了获取速度,同时由于拆分符合OpenXPS文件的规范定义,使得阅读器只需要获取部分文档块,即可以启动正常的解析、渲染流程。所以利用本发明实施例的技术方案,文档能被按需下载,使得大文档能快速呈现,减少了阅读前的等待时间,从而有效的改善了用户的阅读体验。
以下结合具体的实施例二,详细描述本发明是如何实现文档加载的方法及装置。
如图2所示,在文档被加载之前,先完成文档的拆分,具体包括:
通过解压单元21,XPS文档先被解压,以获取里面的文件夹及文件。
通过抽取单元22,解压后的文件按照原来的目录结构,依据不同的文档块类型对应不同的文件后缀方式,查找符合条件的文件到不同的待解压文件夹中。文档块类型包括有:应用所需,图片资源,内容载体。
其中应用所需类以.rels、.fdseq、.fdoc、.odttf为后缀的文件;
图片资源类是指所有图片格式的文件集合,如.png、.jpg、.jpeg等;
内容载体以.fpage为后缀的文件;
其中应用所需文档块和图片资源文档块只会被拆成一个,而内容载体则是根据XPS文档的页数动态变化的。具体的将会通过下面的公式决定整个文档被拆分为几个内容载体文档块:
BLOCK_NUM=(PAGE_COUNT-1)/BLOCK_SIZE+1
其中,PAGE_COUNT指所述文档的页数,BLOCK_SIZE指预设的内容载体文档块包括的最大页数,BLOCK_NUM指内容载体文档块的数量,所以所述文档将最终为拆分为2+BLOCK_NUM块。
抽取过程,就是根据上述的文件后缀,遍历解压目录,查找符合条件的文件,并移动到待压缩文件夹中的过程。需要另外注意的是,在抽取内容载体时,需要根据上述公式做好截取分块准备,并把总页数,预设分块页数,以及每个分块对应的页面名称记录在block.config,并最终把这一个文件写入应用所需的待压缩文件夹的根目录下。
通过压缩单元23,把待解压的文件夹重新压缩为ZIP文件,并以其所属文档块编号为命名,以示区分。
下面以《Open XPS的规范说明书》文件为例,通过上述拆分后得到的文档块如下表:
表1:
文档块名称 | 文档块大小 |
XPS_1_0.xps.control.zip | 815K |
XPS_1_0.xps.resource.zip | 1035K |
XPS_1_0.xps.pages_1.zip | 571K |
XPS_1_0.xps.pages_2.zip | 745K |
XPS_1_0.xps.pages_3.zip | 487K |
XPS_1_0.xps.pages_4.zip | 483K |
XPS_1_0.xps.pages_5.zip | 598K |
XPS_1_0.xps.pages_6.zip | 611K |
XPS_1_0.xps.pages_7.zip | 885K |
XPS_1_0.xps.pages_8.zip | 266K |
XPS_1_0.xps.pages_9.zip | 680K |
XPS_1_0.xps.pages_10.zip | 37K |
如图3所示,文档块拆分完毕后,在线阅读器进行文档加载,具体包括:
虚拟文档单元31被建立。先并行获取应用所需文档块和图片资源文档块。虚拟文档在应用所需文档块被获取完成后生效,因为只有在这之后,才能确认文档的页数,从而确认文档拆分情况。而图片资源文档块在获取完成后会有事件通知,可以在此事件中去进行解析流程中缺失图片的显示工作。
虚拟文档中每个文档块都将被分配一个获取状态标识符(READY_FLAG),当本单元被请求时,先判断内容所处的文档块编号(BLOCK_ID),然后再判断对应的文档块的READY_FLAG是否为已准备,是的话直接返回文档块字节流,如果不是,把文档块编号(BLOCK_ID)和自定义的优先级别数值(EXECUTE_LEVEL)提供给线程池管理单元32,由后者判断是否需要启动或者是在什么合适时间启动文档块获取动作。当获取完成后,一方面在本单元记录此文档块的内容并修改获取状态标识符,另一方面触发事件通知单元34。本单元在内存的组织形式如图5。
另外,考虑到原文档可能很大,如果所有已获取的文档块都被缓存起来,这将会造成内存占用过大,所以本单元还可以通过参数(BLOCK_CACHE_NUM)来控制最大缓存数。在上述获取完成后记录此文档块时,先判断当前缓存数+1是否大于(BLOCK_CACHEE_NUM),如果是,需要先把离当前请求文档块编号最远的已缓存的文档块先清除,再进行添加动作。
考虑到当前请求编号,就是用户当前关注所在。而文档内容一般是连续性的,所以离此关注文档块越近的文档内容,越容易被用户重新查看。为了降低这种因为清除缓存而带来的重新获取文档块的可能,所以推荐的是离当前请求文档块编号最远的先被清除。
通过线程池管理单元32,以控制文档块有序的,并发的获取。本单元同时提供了获取线程的执行优先级控制。文档块获取线程池单元32内置了一个文档块获取单元33的执行堆栈,并且可以为每个文档块获取单元33分配一个优先级别数值(EXECUTE_LEVEL),优先级别值高的先执行,优先级别值相同的,则后进的先执行。还可以通过最大并发数(MAX_PARALLEL_NUM)进并发控制。
通过文档块获取单元33,可以进行文档块的远程获取。同时为了保证阅读器界面的正常响应,后台以异步方式开启指定文档块获取,在完成获取之后,触发事件通知单元34。
事件通知单元34是一个公共单元,主要为文档块获取单元33和虚拟文档单元31提供事件通知功能。事件通知的类型包括有:文档块获取完成事件,虚拟文档准备完毕事件,图片补充渲染事件。
以XPS规范定义文件为例,如图4所示,利用本实例技术方案,在线阅读器只需要加载表1中的第一和第三文档块,即可以实现对文档前50页的基本查看。这时占用的内存仅为815K+571K=1386K,而等待图片资源文档块获取完成后,即可实现完全查看。而对于现有技术,不管查看多少页,都需要7686K内存。所以利用本发明实施例的技术方案,相对于现有技术,可节省7686K-1386K=6300K内存。并且当原文档越大,页数越多,拆分出来的内容载体文档块则越多,这种按需获取模式带来的内存节省就越大。而最坏情况,当原文档的页数大于小于50页时,节省的内存虽然为0,但通过图片资源文档块的并行获取,所花时间也比一次性获取原文档的要快。
综上所述,本发明实施例提供的文档加载的方法及装置,首先通过对原文档拆分,接着进行文档块获取,然后进行虚拟文档创建,把文档块组织起来,一方面通过并行控制,提高了整体的获取,另一方面通过拆分后的文档块类型划分,使得不必获取整个文档即可启动解析,最后虚拟文档又保证了使用时与现有技术的无差异性,因此,利用本发明实施例,切实体现了按需获取模式带来的好处,使得加载文档能更加节省内存,更加快捷,从而提高了大文档的呈现速度,减少了阅读前的等待时间,有效的改善了用户的阅读体验。
具体实施例:
比如对于某个Open XPS文件:《Open XPS的规范说明书》,原大小为7686K,通过拆分(内容载体以50页为一单元),最终可形成:应用所需文档块:815K,内容载体文档块:571K,图片资源文档块:1035K,(1-50页)。这样只需要获取815K+571K=1386K即可实现对前50页的基本查看;而实现完全查看也仅需要等待图片资源文档块获取完成,即是与1386K+1035K=2421K。比起原文档大小的7686K,所需大小大大减少(节省了7686K-1386K=6300K)。
假设在1M带宽下,用户查看上述文档的前50页内容,通过现有技术,将要下载7686K内容,以128K/S的理论网速计算:需要7686/128=60s;而通过本发明提供的技术方案,则只需要1386/128=10.8s。加载时间减少了60s-10.8s=49.2s,大大提升了用户的阅读体验。
从上述方法,我们同时还可以推断出:按需下载的落脚点在内容载体文档块上。当文档越大,页数越多,内容载体文档块相对于原文档的比例就越小,从而这种方法的优势就越明显;并且,这种按需获取的方式可以更加有效的利用网络带宽资源,避免浪费。
以上通过具体的和优选的实施例详细的描述了本发明,但本领域技术人员应该明白,本发明并不局限于以上所述实施例,凡在本发明的基本原理之内,所作的任何修改、组合及等同替换等,均包含在本发明的保护范围之内。
Claims (19)
1.一种文档加载的方法,其特征在于,包括:
步骤一:将Open XPS原文档拆分成三类文档块,所述文档块包含应用所需文档块、图片资源文档块和内容载体文档块;
步骤二:先获取所述应用所需文档块的字节流,同时并行获取所述图片资源文档块的字节流;
步骤三:在获取所述应用所需文档块的所述字节流完成后,发起虚拟文档的封装;其中所述虚拟文档根据客户端要求的页面向远程服务器获取所述页面中的所述内容载体文档块的所述字节流;所述虚拟文档存储有获取完成的所述应用所需文档块、所述图片资源文档块和所述内容载体文档块的所述字节流以及直接定位所述应用所需文档块、所述图片资源文档块和所述内容载体文档块的所述字节流的能力;封装完成后的所述虚拟文档作为一个完整的文档提供给客户端。
2.根据权利要求1所述的文档加载的方法,其特征在于,所述步骤一中,所述拆分的过程包括:解压所述原文档、处理解压后的文件和将待压缩目录压缩成分档块;处理解压后的所述文件的过程包括:创建待压缩目录、抽取所述文件、添加新控制文件和转换图片格式;在抽取所述文件的过程中,抽取所述应用所需文档块、所述图片资源文档块和所述内容载体文档块对应的文件后缀的所述文件;根据所述文件后缀进行遍历查找并移动到新的待压缩目录中;所述应用所需文档块对应的文件后缀包括:文档定义序列文件.fdseq、引用关系文件.rels、文档页面序列文件.fdoc、字体文件.odttf和内容类型文件.xml;所述图片资源文档块对应的文件后缀是:.jpeg,.jpg,和.png;所述内容载体文档块对应的文件后缀是:.fpage。
3.根据权利要求2所述的文档加载的方法,其特征在于,在压缩所述待压缩目录成为分档块之前,在所述应用所需文档块的根目录下添加一个分块描述文件block.config,所述分块描述文件用以指导虚拟文档的封装。
4.根据权利要求3所述的文档加载的方法,其特征在于,所述分块描述文件包含所述原文档的总页数、预设所述内容载体文档块的最大页数和所述内容载体文档块的页面编号。
5.根据权利要求1所述的文档加载的方法,其特征在于,所述步骤二中,每个所述应用所需文档块、所述图片资源文档块和所述内容载体文档块在获取时,将先被分配一个执行优先级别数值,并在一个独立线程中进行,通过线程池来调度和管理所述线程的执行;所述线程池通过一个堆栈缓存所述文档块的获取请求,在没超过最大并发数时,所述获取请求被立即执行;在超过最大并发数时,所述获取请求优先级别值高的先执行;相同优先级别值的所述获取请求,后入栈的先执行;对同一个所述文档块的获取请求只被执行一次;所述最大并发数为2倍的所述客户端的CPU个数。
6.根据权利要求1所述的文档加载的方法,其特征在于,所述步骤二中,获取所述应用所需文档块、所述图片资源文档块和所述内容载体文档块的字节流完成时,触发对应的完成事件通知给所述客户端。
7.根据权利要求1所述的文档加载的方法,其特征在于,所述步骤二中,在获取所述图片资源文档块的字节流时,当所述图片资源文档块所对应的内容载体文档块不存在时,则实时获取缺失的所述内容载体文档块的字节流。
8.根据权利要求1所述的文档加载的方法,其特征在于,所述步骤三中,进行所述虚拟文档的封装时,为所述应用所需文档块、所述图片资源文档块和所述内容载体文档块分配唯一标识符,并记录所述应用所需文档块、所述图片资源文档块和所述内容载体文档块的状态;所述状态包括:初始未获取、获取中、获取成功和获取失败。
9.根据权利要求8所述的文档加载的方法,其特征在于,在所述步骤二之后或所述步骤三中所述应用所需文档块、所述图片资源文档块和所述内容载体文档块获取成功之后,还包括:在所述获取成功后,虚拟文档完成事件通知客户端启动解析和渲染;所述图片资源文档块准备完成后,获取所述图片资源文档块的字节流的获取成功或获取失败通知所述客户端启动补充渲染;获取所述图片资源文档块的字节流的获取成功或获取失败通知启动后续异步操作,通知所述客户端。
10.根据权利要求1所述的文档加载的方法,其特征在于,所述步骤三中,封装后的所述虚拟文档作为一个完整的文档提供给客户端,完整的所述文档供所述客户端进行解析和渲染;进行解析和渲染时,先将获得的所述应用所需文档块、所述图片资源文档块和所述内容载体文档块的所述字节流解析成符合Open XPS文件格式的内存对象,并将所述内存对象渲染成象;在渲染过程中,先对所述应用所需文档块和所述内容载体文档块进行渲染;待所述图片资源文档块中的字节流获取成功后再进行补充渲染。
11.根据权利要求10所述的文档加载的方法,其特征在于,在所述虚拟文档进行解析时,当所述图片资源文档块的图片资源在初始未获取、获取中和获取失败的状态时,所述虚拟文档的解析正常进行,仅将缺失的所述图片资源的名称记录在解析后的所述内存对象中。
12.根据权利要求1所述的文档加载的方法,其特征在于,所述步骤三中,所述虚拟文档由一个所述应用所需文档块,一个所述图片资源文档块和N个所述内容载体文档块组成;所述N由从所述应用所需文档块中的分块描述文件block.config获取到的原文档总页数PAGE_COUNT和预设的所述内容载体文档块最大页数BLOCK_SIZE共同决定,其公式为:(PAGE_COUNT–1)/BLOCK_SIZE+1。
13.一种文档加载的装置,其特征在于,包括:
解压单元,用于解压ZIP格式的文件和文件夹;
抽取单元,用于在解压出的所述文件和所述文件夹中,根据文档块的类型指定的文件后缀,形成待压缩的指定文件夹;
压缩单元,用于以ZIP格式压缩所述指定文件夹,从而压缩成文档块;
虚拟文档单元,用于虚拟文档的管理,将压缩后的所述文档块封装成一个整体;
线程池管理单元,用于对封装后的所述文档块获取线程并发控制,同时提供线程执行的优先级别控制以及线程过滤控制;
文档块获取单元,用于获取线程池管理单元处理后的所述文档块的内容;
事件通知单元,用于所述虚拟文档单元和所述文档块获取单元在获取过程中进行事件通知给客户端。
14.根据权利要求13所述的文档加载的装置,其特征在于,所述抽取单元还包括:
类型后缀映射存储单元,用于存储文档块类型与文件后缀的对应关系,一个类型可以对应多个文件后缀;
文件遍历查找单元,用于遍历指定文件夹,并查找出具有指定文件后缀的文件;
文件移动单元,用于把文件从原文件夹移动到指定文件的功能;
分块信息存储单元,用于记录内容载体抽取时的细节信息;
分块信息写入单元,用于把分块信息存储单元序列化到block.config文件中,并写入应用所需文档块。
15.根据权利要求13所述的文档加载的装置,其特征在于,所述虚拟文档单元还包括:
文档块容器管理单元,用于根据block.config定义的内容,组织内容载体文档块的存储容器;
缓存内容载体文档块最大值判断单元,用于判断已加载的内容载体文档块是否已超过最大缓存值,若已超过最大缓存值,则移除离当前文档块最远的文档块;若未超过最大缓存值,则加入堆栈的末端;
最远文档块查找单元,用于查找离当前文档块最远的已缓存文档块。
16.根据权利要求13所述的文档加载的装置,其特征在于,所述线程池管理单元还包括:
线程缓存堆栈单元,用于保存文档块获取线程存储单元的信息;
线程优先级别判断单元,用于判断线程执行先后顺序,在未达到最大并发数前,优先级别值高的先执行,优先级别相同的后进的先执行;所述最大并发数为2倍的所述客户端的CPU个数;
线程并发判断单元,用于判断当前并发线程与最大并发线程的关系;
文档块去重单元,用于使同一个文档块的获取请求只被执行一次。
17.根据权利要求13所述的文档加载的装置,其特征在于,所述文档块获取单元还包括:文档块获取线程存储单元,用于保存获取的文档块编号,优先级别定义。
18.根据权利要求13所述的文档加载的装置,其特征在于,所述文档块的类型包含应用所需文档块、图片资源文档块和内容载体文档块。
19.根据权利要求13所述的文档加载的装置,其特征在于,所述事件通知单元还包括:事件参数存储单元,用于指定本次事件触发的虚拟文档实例、文档块编号和文档内容。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410069307.7A CN104881409B (zh) | 2014-02-27 | 2014-02-27 | 一种文档加载的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410069307.7A CN104881409B (zh) | 2014-02-27 | 2014-02-27 | 一种文档加载的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104881409A CN104881409A (zh) | 2015-09-02 |
CN104881409B true CN104881409B (zh) | 2018-04-20 |
Family
ID=53948904
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410069307.7A Active CN104881409B (zh) | 2014-02-27 | 2014-02-27 | 一种文档加载的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104881409B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106095506A (zh) * | 2016-06-14 | 2016-11-09 | 乐视控股(北京)有限公司 | 一种页面加载方法及装置 |
CN106649716A (zh) * | 2016-12-21 | 2017-05-10 | 北京致远互联软件股份有限公司 | 一种基于多线程的文件格式在线转换方法及系统 |
CN107479960B (zh) * | 2017-08-25 | 2021-02-19 | 阿里巴巴(中国)有限公司 | 一种单元视图的显示方法和装置 |
CN110109869B (zh) * | 2018-01-22 | 2021-01-12 | 上海鹰信智能技术有限公司 | 一种快速定位连接设备文档的方法 |
CN108959200A (zh) * | 2018-07-10 | 2018-12-07 | 山东中孚安全技术有限公司 | 一种提取ppt文档中的图片的方法及系统 |
CN109492195B (zh) * | 2018-11-27 | 2023-02-14 | 武汉斗鱼网络科技有限公司 | 一种字体加载方法、装置、终端及存储介质 |
CN110674082B (zh) * | 2019-09-24 | 2023-03-14 | 北京字节跳动网络技术有限公司 | 移除在线文档的方法、装置、电子设备及计算机可读介质 |
CN111651418B (zh) * | 2020-05-29 | 2022-03-08 | 腾讯科技(深圳)有限公司 | 一种文档内容下载方法、装置、计算机设备和存储介质 |
CN114372024A (zh) * | 2021-01-03 | 2022-04-19 | 上海天庸科技发展有限公司 | 一种电子文件容器、编码生成方法与装置 |
CN114218896B (zh) * | 2021-11-22 | 2022-09-02 | 慧之安信息技术股份有限公司 | 对uof文档进行分块转换的方法 |
CN116566965B (zh) * | 2023-07-11 | 2023-09-26 | 山东英围特智能科技有限公司 | 一种ofd大文件的处理方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101520770A (zh) * | 2008-02-29 | 2009-09-02 | 国际商业机器公司 | 分析、转换和拆分结构化数据的方法和装置 |
CN102467488A (zh) * | 2011-02-25 | 2012-05-23 | 中标软件有限公司 | 一种文字处理文档异步加载的方法 |
CN102708336A (zh) * | 2012-05-02 | 2012-10-03 | 四川建设网有限责任公司 | 基于关键数据和定制模板分离的电子文档处理方法及系统 |
CN102929849A (zh) * | 2012-11-07 | 2013-02-13 | 中标软件有限公司 | 一种文档加载方法及其装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7464330B2 (en) * | 2003-12-09 | 2008-12-09 | Microsoft Corporation | Context-free document portions with alternate formats |
CN101640694B (zh) * | 2008-07-30 | 2013-03-20 | 国际商业机器公司 | 生成简单对象访问协议消息的方法及流程引擎 |
-
2014
- 2014-02-27 CN CN201410069307.7A patent/CN104881409B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101520770A (zh) * | 2008-02-29 | 2009-09-02 | 国际商业机器公司 | 分析、转换和拆分结构化数据的方法和装置 |
CN102467488A (zh) * | 2011-02-25 | 2012-05-23 | 中标软件有限公司 | 一种文字处理文档异步加载的方法 |
CN102708336A (zh) * | 2012-05-02 | 2012-10-03 | 四川建设网有限责任公司 | 基于关键数据和定制模板分离的电子文档处理方法及系统 |
CN102929849A (zh) * | 2012-11-07 | 2013-02-13 | 中标软件有限公司 | 一种文档加载方法及其装置 |
Also Published As
Publication number | Publication date |
---|---|
CN104881409A (zh) | 2015-09-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104881409B (zh) | 一种文档加载的方法及装置 | |
US9176887B2 (en) | Compressed level two block buffer metadata cache | |
CN101276367B (zh) | 用于在数据存储器上数字地存储数据的方法 | |
CA2775911C (en) | A tiered data management method and system for high performance data monitoring | |
US8639723B2 (en) | Spooling strategies using structured job information | |
US9558216B2 (en) | Moving tables across nodes in an in-memory database instance | |
CN104881466B (zh) | 数据分片的处理以及垃圾文件的删除方法和装置 | |
US20080231885A1 (en) | Direct printing method using ram storage for spooled printer files | |
CN104102695B (zh) | 智能设备启动过程的数据处理方法及智能设备 | |
CN108108394A (zh) | Apfs文件系统的压缩文件恢复方法及存储介质 | |
KR102175227B1 (ko) | Xml 파일 축약 | |
JP2008022559A5 (zh) | ||
JP3672608B2 (ja) | フォント・データの圧縮・伸長装置 | |
CN102520994A (zh) | 流式加载虚拟文件方法及系统 | |
CN106503186A (zh) | 一种数据管理方法、客户端及系统 | |
US8782105B1 (en) | Finer granted data organization using data sublayers | |
US8984028B2 (en) | Systems and methods for storing data and eliminating redundancy | |
US9110874B2 (en) | Document conversion apparatus and document conversion method | |
CN106156191B (zh) | 基于ePub文件的试读方法和基于ePub文件的试读系统 | |
Gu et al. | N-docker: A NVM-HDD hybrid docker storage framework to improve docker performance | |
CN115495020A (zh) | 文件处理方法、装置、电子设备和可读存储介质 | |
CN115269511A (zh) | 一种泛电子文件封装方法及装置 | |
JP5244770B2 (ja) | 画像形成装置 | |
CN114490881A (zh) | 同步数据处理方法、装置、设备及存储介质 | |
CN114817160A (zh) | 文件解压方法、装置、电子设备及计算机可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |