《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 顯示光電 > 設(shè)計(jì)應(yīng)用 > 電子書的PPT格式引擎設(shè)計(jì)和優(yōu)化
電子書的PPT格式引擎設(shè)計(jì)和優(yōu)化
摘要: 根據(jù)目前主流電子紙閱讀器硬件資源有限,、要求功耗小,、灰階顯示等特點(diǎn),,提出了一種PPT格式文檔解析方案,。聚焦于滿足人們對于移動(dòng)閱讀的基本需求,選取了文字,、圖形,、圖像作為基本解析對象,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)適合電子紙閱讀器的PPT格式引擎,,并進(jìn)行了多重優(yōu)化以提升性能體驗(yàn),,在低端的硬件配置和有限的運(yùn)行時(shí)間內(nèi)完成格式解析。
Abstract:
Key words :

  引言

  PPT(Microsoft Office PowerPoint),,是微軟公司開發(fā)的編輯演示文稿的辦公軟件,。該格式相對于txt、chm等,信息量更大,,結(jié)構(gòu)也更加復(fù)雜,,導(dǎo)致其對硬件配置要求較高。然而,,目前嵌入式終端配置低,,因此本文聚焦于滿足人們對于移動(dòng)閱讀的基本需求,暫不考慮視頻,、音頻和外部對象等特性支持,。本解析器在開源環(huán)境下,基于Linux操作系統(tǒng)實(shí)現(xiàn),?;谇度胧蕉喔袷浇馕鲆嫦到y(tǒng)架構(gòu)和中間格式理論,具有平臺無關(guān)性,、高效性的特點(diǎn),。

  1 系統(tǒng)特點(diǎn)

  該解析引擎兼容版本多,包括Microsoft PowerPoint 972003等版本,。下面介紹一下系統(tǒng)特點(diǎn),。

  ① 不依賴于圖形服務(wù)器,。解析引擎擁有自己的專用的矢量圖形繪制器,。不依賴于特定的底層圖形服務(wù)器。例如,,我們的實(shí)驗(yàn)系統(tǒng)的圖形服務(wù)器由nanoX改為Qt時(shí),,該解析引擎不需要修改。

 ?、?高效性,。對于一般的格式解析器,樣本文件越大,,打開速度越慢,,而該解析器可以做到文件打開速度與文件大小基本無關(guān)。

 ?、?平臺無關(guān)性,。解析引擎并不是直接在顯示設(shè)備上繪制圖形和文字,而是把各種格式元素繪制在一段內(nèi)存區(qū)域上,,然后把這段內(nèi)存數(shù)據(jù)映射到物理設(shè)備上,。即輸入是文件,輸出是屏幕大小的位圖,。

 ?、?配置靈活,。解析引擎的模塊化設(shè)計(jì)便于移植和裁剪。所有數(shù)據(jù)類型采用宏定義,,便于根據(jù)平臺配置,。

  ⑤ 支持手寫批注,。 解析器只做內(nèi)容抽取和顯示,,不支持編輯和保存,支持手寫批注,。手寫批注不改變原文檔,,而是新建xml描述文件。

 ?、?個(gè)性化交互方式,。利用電子紙控制器的16通道和黑白刷,實(shí)現(xiàn)動(dòng)畫切換效果,。

  2 格式分析

  2.1 總體結(jié)構(gòu)

  Microsoft PowerPoint使用OLE2組合文檔存儲(chǔ),。和文件系統(tǒng)結(jié)構(gòu)類似,它包含容器和流,,并組成的樹狀結(jié)構(gòu),。各種流獨(dú)立存儲(chǔ),便于載入和快速保存,。如表1所列,,PPT文件包括以下5種流式數(shù)據(jù)。

  表1 PowerPoint文件結(jié)構(gòu)

  

  PPT存儲(chǔ)格式采用十六進(jìn)制,,small endian字節(jié)序,,分為若干個(gè)大數(shù)據(jù)塊和小數(shù)據(jù)塊,大小分別為512字節(jié)和64字節(jié),,第一個(gè)數(shù)據(jù)塊為初始數(shù)據(jù)塊,,存儲(chǔ)了數(shù)據(jù)塊索引表。

  2.2 圖像流結(jié)構(gòu)

  PPT中包含矩形,、圖片框,、文本框、線,、橢圓等204種形式的元素,統(tǒng)稱為Shape,。每種Shape有一個(gè)唯一的實(shí)例碼與之相應(yīng),。

  多媒體數(shù)據(jù)的層次結(jié)構(gòu)如圖1所示。

  

  圖1 容器層次結(jié)構(gòu)

  Drawing GROUP為組合圖形存儲(chǔ)結(jié)構(gòu),,它包含了一組圖形對象,。Drawing為圖形存儲(chǔ)結(jié)構(gòu),Shape和Solver為兩組圖形屬性元數(shù)據(jù)。Blip Store為插入的圖片對象,。Property Table為缺省屬性表,。Client Data為一組元數(shù)據(jù)信息,包含坐標(biāo),,文本和OLE數(shù)據(jù)和用戶自定義屬性表,。

  屬性項(xiàng)采用idvalue結(jié)構(gòu),自定義屬性表的長度可變,。各項(xiàng)屬性相對位置不變,。自定義屬性表中出現(xiàn)的屬性將覆蓋默認(rèn)屬性。

  Drawing為一組描述來管理容器中的圖形對象的規(guī)則集合,,包括對齊方式,、標(biāo)尺等。

  摘要: 根據(jù)目前主流電子紙閱讀器硬件資源有限,、要求功耗小,、灰階顯示等特點(diǎn),提出了一種PPT格式文檔解析方案,。聚焦于滿足人們對于移動(dòng)閱讀的基本需求,,選取了文字、圖形,、圖像作為基本解析對象,,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)適合電子紙閱讀器的PPT格式引擎,并進(jìn)行了多重優(yōu)化以提升性能體驗(yàn),,在低端的硬件配置和有限的運(yùn)行時(shí)間內(nèi)完成格式解析,。

  引言

  PPT(Microsoft Office PowerPoint),是微軟公司開發(fā)的編輯演示文稿的辦公軟件,。該格式相對于txt,、chm等,信息量更大,,結(jié)構(gòu)也更加復(fù)雜,,導(dǎo)致其對硬件配置要求較高。然而,,目前嵌入式終端配置低,,因此本文聚焦于滿足人們對于移動(dòng)閱讀的基本需求,暫不考慮視頻,、音頻和外部對象等特性支持,。本解析器在開源環(huán)境下,基于Linux操作系統(tǒng)實(shí)現(xiàn),?;谇度胧蕉喔袷浇馕鲆嫦到y(tǒng)架構(gòu)和中間格式理論,,具有平臺無關(guān)性、高效性的特點(diǎn),。

  1 系統(tǒng)特點(diǎn)

  該解析引擎兼容版本多,,包括Microsoft PowerPoint 972003等版本。下面介紹一下系統(tǒng)特點(diǎn),。

 ?、?不依賴于圖形服務(wù)器。解析引擎擁有自己的專用的矢量圖形繪制器,。不依賴于特定的底層圖形服務(wù)器,。例如,我們的實(shí)驗(yàn)系統(tǒng)的圖形服務(wù)器由nanoX改為Qt時(shí),,該解析引擎不需要修改,。

  ② 高效性,。對于一般的格式解析器,,樣本文件越大,打開速度越慢,,而該解析器可以做到文件打開速度與文件大小基本無關(guān),。

  ③ 平臺無關(guān)性,。解析引擎并不是直接在顯示設(shè)備上繪制圖形和文字,,而是把各種格式元素繪制在一段內(nèi)存區(qū)域上,然后把這段內(nèi)存數(shù)據(jù)映射到物理設(shè)備上,。即輸入是文件,,輸出是屏幕大小的位圖。

 ?、?配置靈活,。解析引擎的模塊化設(shè)計(jì)便于移植和裁剪。所有數(shù)據(jù)類型采用宏定義,,便于根據(jù)平臺配置,。

  ⑤ 支持手寫批注,。 解析器只做內(nèi)容抽取和顯示,,不支持編輯和保存,支持手寫批注,。手寫批注不改變原文檔,,而是新建xml描述文件。

 ?、?個(gè)性化交互方式,。利用電子紙控制器的16通道和黑白刷,實(shí)現(xiàn)動(dòng)畫切換效果,。

  2 格式分析

  2.1 總體結(jié)構(gòu)

  Microsoft PowerPoint使用OLE2組合文檔存儲(chǔ),。和文件系統(tǒng)結(jié)構(gòu)類似,它包含容器和流,,并組成的樹狀結(jié)構(gòu),。各種流獨(dú)立存儲(chǔ),便于載入和快速保存,。如表1所列,,PPT文件包括以下5種流式數(shù)據(jù)。

  表1 PowerPoint文件結(jié)構(gòu)

  

  PPT存儲(chǔ)格式采用十六進(jìn)制,,small endian字節(jié)序,,分為若干個(gè)大數(shù)據(jù)塊和小數(shù)據(jù)塊,大小分別為512字節(jié)和64字節(jié),,第一個(gè)數(shù)據(jù)塊為初始數(shù)據(jù)塊,,存儲(chǔ)了數(shù)據(jù)塊索引表。

  2.2 圖像流結(jié)構(gòu)

  PPT中包含矩形,、圖片框,、文本框、線,、橢圓等204種形式的元素,,統(tǒng)稱為Shape。每種Shape有一個(gè)唯一的實(shí)例碼與之相應(yīng),。

  多媒體數(shù)據(jù)的層次結(jié)構(gòu)如圖1所示,。

  

  圖1 容器層次結(jié)構(gòu)

  Drawing GROUP為組合圖形存儲(chǔ)結(jié)構(gòu),它包含了一組圖形對象,。Drawing為圖形存儲(chǔ)結(jié)構(gòu),,Shape和Solver為兩組圖形屬性元數(shù)據(jù)。Blip Store為插入的圖片對象,。Property Table為缺省屬性表,。Client Data為一組元數(shù)據(jù)信息,包含坐標(biāo),,文本和OLE數(shù)據(jù)和用戶自定義屬性表,。

  屬性項(xiàng)采用idvalue結(jié)構(gòu),自定義屬性表的長度可變,。各項(xiàng)屬性相對位置不變,。自定義屬性表中出現(xiàn)的屬性將覆蓋默認(rèn)屬性。

  Drawing為一組描述來管理容器中的圖形對象的規(guī)則集合,,包括對齊方式,、標(biāo)尺等,。

  3 軟件設(shè)計(jì)

  本設(shè)計(jì)以嵌入式多格式解析引擎系統(tǒng)架構(gòu)為基礎(chǔ)。解析引擎是負(fù)責(zé)對源文件進(jìn)行解析,,生成中間格式需要的數(shù)據(jù)的模塊,。

  解析引擎的內(nèi)部架構(gòu)如圖2所示。

  

  圖2 解析引擎架構(gòu)

  3.1 語法分析器

  語法分析器為輸入流數(shù)據(jù),,輸出為結(jié)構(gòu)化數(shù)據(jù)供各模塊使用,。PPT格式的記錄采用idvalue結(jié)構(gòu),id和value占據(jù)規(guī)定的字節(jié)數(shù),,語法分析器負(fù)責(zé)識別記錄id,,并抽取value。

  3.2 導(dǎo)航器

  負(fù)責(zé)把數(shù)據(jù)從文件系統(tǒng)調(diào)入內(nèi)存,,并把I/O流轉(zhuǎn)換成結(jié)構(gòu)化數(shù)據(jù),,即用DOM結(jié)構(gòu)描述文件的整體架構(gòu)。

  該模塊具有頁面導(dǎo)航作用,。PPT使用OLE2組合文檔存儲(chǔ),。容器和結(jié)點(diǎn)只存儲(chǔ)粗粒度索引信息,對于不需要立即顯示的頁,,只存儲(chǔ)容器結(jié)點(diǎn),,暫時(shí)不展開,需要顯示該頁時(shí),,再從該結(jié)點(diǎn)向下展開,,從而減少了不必要的文件讀取。這種分層裝載方法,,提高了打開速度,,并且對于大文檔,進(jìn)入速度只和第一頁的復(fù)雜程度有關(guān),。

  此外,,為了更好地索引,建立了一系列的鏈表結(jié)構(gòu),。如:數(shù)據(jù)塊索引表,、根目錄表、圖像數(shù)據(jù)流鏈表,、用戶反向鏈表,、文本鏈、母板鏈表等,。

  文件長度,、版本號、進(jìn)行文件合法性等信息通過讀取初始化塊獲得。除此之外還需要初始化幾個(gè)重要的全局鏈表,。

 ?、?數(shù)據(jù)塊索引表。文件以塊為單位存儲(chǔ),,且不連續(xù),,數(shù)據(jù)所屬塊號和塊內(nèi)偏移量可以方便地進(jìn)行尋址操作,。

 ?、?構(gòu)建根目錄表,包括存儲(chǔ)內(nèi)容的起始塊號和大小,,用于尋址操作,。讀操作只在當(dāng)前塊范圍內(nèi),當(dāng)超出當(dāng)前塊可讀長度時(shí),,通過查詢塊索引表找到下一塊的塊號,。

  ③ 構(gòu)建圖像數(shù)據(jù)流鏈表,。

 ?、?構(gòu)建用戶反向鏈表。為了快速保存,,PPT采用增量式存儲(chǔ),,即每次保存時(shí),直接生成頁面副本并追加到文檔末尾,。增量式存儲(chǔ)的缺點(diǎn)是冗余量大,。例如,有的文件只有幾頁,,但文件大小幾MB甚至幾十MB,,文件實(shí)際大小和修改次數(shù)有關(guān)。

 ?、?幻燈片文本鏈,,流信息到排版元數(shù)據(jù)獨(dú)立存儲(chǔ)。純文本存儲(chǔ)在文本流中,,存儲(chǔ)以及排版信息存儲(chǔ)在頁數(shù)據(jù)區(qū),。頁數(shù)據(jù)區(qū)還存儲(chǔ)了純文本在文本流中的位置。

 ?、?母板鏈表,,母板一般作為背景,以頁為單位順次存儲(chǔ),。因?yàn)殡娮蛹堬@示灰度圖像,,背景和正文疊加以后看不清楚,用戶閱讀時(shí)可以去除背景,,而不會(huì)影響到文件本身,。

  增量式存儲(chǔ)的基本思想是:每次修改產(chǎn)生一個(gè)用戶信息,,存儲(chǔ)修改的塊號,當(dāng)前用戶信息反向指向上一個(gè)用戶信息,,從而構(gòu)成一個(gè)用戶反向鏈,。遍歷用戶反向鏈可以找到最后一次修改。冗余數(shù)據(jù)可以直接丟棄,。

  3.3 布局管理器

  負(fù)責(zé)屏幕劃分和圖層管理,,布局管理器劃為不同的矩形區(qū)域,并標(biāo)識該區(qū)域的類型,。然后分別將解析得到的文字,,圖形,圖像緩沖區(qū)映射到屏幕位圖上,。

  3.4 文字處理器

  PPT格式的文字種類和布局相對復(fù)雜,,可以分為正文和圖形內(nèi)嵌文字兩種,各級標(biāo)題正文的布局也有要求,。文字處理器針對各種文本的排版格式多樣性進(jìn)行解析和布局,,完整再現(xiàn)原文檔的版式信息。

  文字處理過程分為預(yù)排版和頁面排版兩部分,,預(yù)排版負(fù)責(zé)填充字模緩沖區(qū),,抽取字符編碼和字體信息作為FreeType的輸入,用生成的單個(gè)字模位圖填充緩沖區(qū),。然后結(jié)合標(biāo)尺和對其方式把映射到頁面顯示緩沖區(qū),。文字解析原理圖如圖3所示。

  

  圖3 文字解析原理圖

  3.5 圖形渲染

  負(fù)責(zé)圖形繪制和組合圖形坐標(biāo)空間轉(zhuǎn)換,。本解析引擎不依賴于圖形服務(wù)器,,擁有專用的矢量圖形繪制庫。能夠?qū)D形直接繪制到頁面位圖中,,與物理顯示無關(guān),。

  繪制直線,曲線和多邊形填充分別采用了經(jīng)典的Breshman算法,,三次貝塞爾曲線畫線算法,,列掃描多邊形填充算法3種成熟算法。為了提高了運(yùn)算效率,,對于浮點(diǎn)數(shù)作取整運(yùn)算,。經(jīng)驗(yàn)證,在浮點(diǎn)數(shù)運(yùn)算效率不佳的嵌入式系統(tǒng)上也能到達(dá)較好的渲染效果,。

  組合圖形(Drawing GROUP)包含了一組圖形對象,,采用了Dom結(jié)構(gòu)。子結(jié)點(diǎn)使用相對于父結(jié)點(diǎn)的坐標(biāo)空間。因此,,圖形處理能夠遞歸地進(jìn)行坐標(biāo)轉(zhuǎn)化,,并把圖形繪制在其父結(jié)點(diǎn)的坐標(biāo)空間內(nèi)。

  3.6 圖像渲染

  圖像渲染器采用Cximage圖像庫把圖像數(shù)據(jù)重構(gòu),,并進(jìn)一步轉(zhuǎn)化成灰度圖像放入屏幕緩沖區(qū),。

  文件中圖像和多媒體信息存儲(chǔ)在圖像流中,通過FBSE (File Blip Store Entry)描述,。于是定義了結(jié)構(gòu)體:

  typedef struct _FBSE{

  MSOBLIPTYPE imageType;

  ULONG id;

  ULONG size;

  ULONG cRef;

  ULONG offsetInDelayStream;

  }FBSE;

  4 優(yōu)化提速

  用戶總是希望系統(tǒng)越快越好,,但是嵌入式系統(tǒng)受主頻較低、內(nèi)存較小的限制,,對于一些計(jì)算量比較大的工作,,很難達(dá)到理想的效果。于是本解析引擎在應(yīng)用了多頁面緩沖機(jī)制和異步并行機(jī)制的優(yōu)化策略,。

  各渲染器異步并行地工作,第一個(gè)完成任務(wù)的渲染器立即把數(shù)據(jù)提交給屏幕顯示,。電子紙整屏刷新速度為1 s,,利用這個(gè)刷屏間歇,其余渲染器完成任務(wù),,再采用局部刷屏的方式把增量部分刷新到屏幕上,。這樣整體速度取決于渲染速度最慢的那一個(gè)。此外,,異步執(zhí)行不阻塞輸入,,如果這時(shí)用戶翻頁,未完成解析線程會(huì)被終止,,并建立新線程來解析下一頁,。例如:打開一頁圖文混排的幻燈片,打開時(shí)先顯示文字,,隨后顯示出圖像,,并且不會(huì)阻塞用戶輸入,假如用戶快速連續(xù)翻若干頁后停止,,中間頁解析會(huì)被終止,。

  5 驗(yàn)證

  在主頻200 MHz的電子紙閱讀器上實(shí)現(xiàn)效果如圖4所示。

  

  圖4 在電子紙閱讀器上解析效果圖

  隨機(jī)選擇60個(gè)樣本文件,,進(jìn)入書籍最短時(shí)間2.82 s,,最長11.92 s.如圖5所示。

  

  圖5 在電子紙閱讀器上解析速度統(tǒng)計(jì)圖

  解析引擎采用分層裝載方法,,提高了打開書籍速度,,這里選擇了3個(gè)第一頁完全相同但是大小差別較大的PPT文檔。實(shí)驗(yàn)表明,雖然文檔大小差別很大,,但是打開速度差異不大,。如表2所列。

  表2 啟動(dòng)速度對比

  

  結(jié)語

  由于電子紙的特性和嵌入式設(shè)備的資源限制,,本文僅僅聚焦在常用元素的解析上,,如文字、圖形,、圖像,、表格等,而對于嵌入對象(如視頻,、音頻等)沒有支持,。對于未知元素的解析將成為未來的主要工作。本文模塊化的設(shè)計(jì)架構(gòu),,有利于下一步進(jìn)行功能擴(kuò)展,,另外,隨著Office開放文檔格式(OOXML)的誕生并成為國際標(biāo)準(zhǔn),,未來將開發(fā)支持OOXML的嵌入式解析器,。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。