專利名稱:一種快速生成開放格式文檔的方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機數(shù)據(jù)處理領(lǐng)域,尤其涉及一種利用結(jié)構(gòu)化數(shù)據(jù)將任意格式的數(shù) 據(jù)快速生成開放格式文檔的方法及系統(tǒng)。
背景技術(shù):
目前,大型的出版社或報社均采用專業(yè)的排版軟件(比如,方正的書版、飛騰等) 進行排版,所輸出的文件格式很難被其它軟件兼容,也不能被再次編輯。因此,對于這些排 版軟件和其它類似地輸出不能被再次編輯的文檔撰寫軟件而言,存在著將它們輸出的文檔 轉(zhuǎn)換為可供再次編輯的文檔(例如,微軟word文檔)的需求。在將非word文檔轉(zhuǎn)換為word文檔的現(xiàn)有技術(shù)(例如,http //www, blueidea. com/tech/proRram/2003/879. asp中所描述的方法)中,用戶常常按照以下步驟來實現(xiàn)(1)輸出能描述非word文檔格式的xml文件;( 啟動word應(yīng)用程序;(3)解析xml文件,調(diào)用word應(yīng)用程序提供的API接口創(chuàng)建word文檔;(4)關(guān)閉 word 進程。這種方法的缺點是一是依賴于Word應(yīng)用程序本身,通過調(diào)用微軟提供的接口生 成,因此,要求計算機必須安裝微軟word軟件;二是需要啟動一個word進程,占用系統(tǒng)資源 較多;三是受微軟接口的限制生成文檔不靈活,速度很慢,效率低下;四是嵌入文檔的資源 會經(jīng)過壓縮處理,其屬性(如圖片的精度等)會被強制改變,造成資源原有屬性丟失。
發(fā)明內(nèi)容
為了解決現(xiàn)有技術(shù)中的以上問題,本發(fā)明提供一種快速將任意格式的數(shù)據(jù)生成開 放格式文檔的方法及系統(tǒng),以在不依賴于開放格式文檔應(yīng)用程序自身的情況下,快速地將 任意格式的數(shù)據(jù)生成符合所用開放格式文檔規(guī)范的文檔,同時保留文檔中的嵌入資源的原
有屬性。為了實現(xiàn)以上目的,本發(fā)明提供的利用結(jié)構(gòu)化數(shù)據(jù)快速生成word文檔的方法包 括以下步驟(1)將任意格式的數(shù)據(jù)生成規(guī)范的結(jié)構(gòu)化數(shù)據(jù);(2)利用開放格式的空白文檔 創(chuàng)建符合所述結(jié)構(gòu)化數(shù)據(jù)的樣式的文檔模板,并將該文檔模板中的所有組件保存到模板目 錄下;C3)將結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)換為對應(yīng)的模板組件,并用這些模板組件替換模板目錄下的相 應(yīng)組件,同時將結(jié)構(gòu)化數(shù)據(jù)中的嵌入資源加載到模板目錄下的資源組件中;(4)根據(jù)更新 的模板目錄下的所有組件生成符合所用開放格式的文檔。相應(yīng)地,本發(fā)明提供一種利用結(jié)構(gòu)化數(shù)據(jù)快速生成word文檔的系統(tǒng),該系統(tǒng)包 括數(shù)據(jù)輸入單元,輸入任意格式的數(shù)據(jù),并將該數(shù)據(jù)發(fā)送給處理單元;處理單元,將從數(shù) 據(jù)輸入單元接收的數(shù)據(jù)生成規(guī)范的結(jié)構(gòu)化數(shù)據(jù),再將該結(jié)構(gòu)化數(shù)據(jù)生成符合開放格式規(guī)范 的文檔,并將所生成的文檔發(fā)送給文檔輸出單元;文檔輸出單元,輸出從處理單元接收的文 檔。其中,所述處理單元進一步包括設(shè)計單元、結(jié)構(gòu)化單元、內(nèi)部資源轉(zhuǎn)換單元、外部資源轉(zhuǎn)換單元、模板存儲單元和文檔成品單元。這些單元的操作與上述方法中相應(yīng)步驟相同。
本發(fā)明將任意格式的數(shù)據(jù)轉(zhuǎn)換為結(jié)構(gòu)化數(shù)據(jù)(即,xml文件),然后將該結(jié)構(gòu)化數(shù) 據(jù)轉(zhuǎn)換為所用開放格式文檔的模板組件,并用這些模板組件替換根據(jù)所用開放格式的空白 文檔而創(chuàng)建的文檔模板中的相應(yīng)組件,同時將嵌入資源加載到該模板中的資源組件中,從 而完成對文檔模板的更新和加載,最后根據(jù)該更新的模板生成成品的開放格式文檔。該方 法不依賴于所用開放文檔格式所對應(yīng)的應(yīng)用程序,占用系統(tǒng)資源較少,快速地將任意格式 的數(shù)據(jù)生成符合該開放格式規(guī)范的文檔,同時保留了嵌入資源的原有屬性。
圖1是根據(jù)本發(fā)明的快速生成開放格式文檔的方法的流程圖2是用于解釋圖1所示方法的示圖3是用于解釋快速生成word文檔的過程的示圖4是根據(jù)本發(fā)明的結(jié)構(gòu)化數(shù)據(jù)中內(nèi)部資源轉(zhuǎn)換流程圖5是根據(jù)本發(fā)明的結(jié)構(gòu)化數(shù)據(jù)中外部資源轉(zhuǎn)換流程圖6是待轉(zhuǎn)換文檔的示例;
圖7是顯示部分word模板解壓目錄的示圖8是顯示部分word模板解壓目錄的另一示圖9是圖6所示文檔生成word文檔的效果圖10是根據(jù)本發(fā)明的快速生成開放格式文檔的系統(tǒng)的流程圖。
具體實施例方式目前,對于許多用戶可編輯的文檔,存在文檔格式開放和不開放兩種。而對于開放 格式的文檔,一般都是基于xml組件的應(yīng)用。比如,微軟word 2007采用的是OOXML(Office Open xml)文檔格式標準(相關(guān)內(nèi)容可參見 http://boycottnovell. com/2008/10/02/ ooxml-leaked/ 中 的 1080. pdf> OfficeOpenXML-ffordprocessingMLArtBorders. zip> Of ficeOpenXML-SpreadsheetMLStyles. zip、OfficeOpenXML-DrawingMLGeometries. zip、 OfficeOpenXML-RELAXNG-Strict. zip 和 OfficeOpenXML-XMLSchema-Strict· zip 這 6 個文 件),該標準基于xml和Zip技術(shù),因此word 2007文檔是一個代碼開放的zip壓縮文件,其 中包含多個xml文件和媒體資源文件等(比如Word中插入的圖片),與以前word版本的二 進制格式文件相比,更便于數(shù)據(jù)交換。因此,本發(fā)明主要的目的是在不依賴于開放格式文檔 所對應(yīng)的應(yīng)用程序自身的情況下快速地將任意格式的數(shù)據(jù)轉(zhuǎn)換為基于xml組件的開放格 式的文檔。以下,將結(jié)合附圖對本發(fā)明進行詳細描述。圖1是根據(jù)本發(fā)明的快速生成開放格式文檔的方法的流程圖,圖2是用于解釋圖 1所示方法的示圖。參照圖1和圖2,該方法包括以下步驟步驟Si、數(shù)據(jù)結(jié)構(gòu)化步驟在該步驟中,將待處理的任意格式的數(shù)據(jù)生成規(guī)范的結(jié)構(gòu)化數(shù)據(jù),即,xml數(shù)據(jù)文 件。具體地講,首先制定用于規(guī)范結(jié)構(gòu)化數(shù)據(jù),即,xml數(shù)據(jù)的規(guī)范化文件,即,Schema 或DTD文件,然后,采集待處理數(shù)據(jù)生成xml文件,并利用所制定的khema或DTD文件對該xml文件進行規(guī)范性驗證,以使所生成的xml文件符合所制定的結(jié)構(gòu)化規(guī)范。不同的用戶可 根據(jù)自己不同的需要來定義不同的khema或DTD文件。定義khema或DTD文件屬于XML 開發(fā)技術(shù)人員已知的現(xiàn)有技術(shù),因此,省略其描述。這里,所述任意格式的數(shù)據(jù)是指,比如,一篇比如不能被用戶再次編輯的文檔或者 數(shù)據(jù)庫中的一組數(shù)據(jù)等等數(shù)據(jù)。比如,對于數(shù)據(jù)庫中的一組數(shù)據(jù),可將這些數(shù)據(jù)首先生成一 個ml文件,然后通過一個word報表的形式去展現(xiàn)。步驟S2、文檔模板創(chuàng)建步驟在該步驟中,利用開放格式的空白文檔(比如,空白word 2007文檔)創(chuàng)建符合所 述結(jié)構(gòu)化數(shù)據(jù)的樣式的文檔模板,并將該文檔模板中的所有組件保存到模板目錄下。在創(chuàng)建文檔模板時,由于某些組件中的屬性(比如,字體)是不能通過轉(zhuǎn)換生成 的,所以必須通過在模板中添加這些屬性以保留這些屬性。也就是說,為了使所生成的文檔 能夠正確地顯示結(jié)構(gòu)化數(shù)據(jù)中所包含的文字、圖片、表格、數(shù)學公式等各種元素的樣式信息 (比如,文字字體、表格樣式等),必須預先在文檔模板加入表示文字、圖片、表格、數(shù)學公式 等各種元素的樣式的附加信息。如果沒有在文檔模板中指定樣式,則采用該文檔模板的默 認樣式。在模板創(chuàng)建完成之后,為了獲取模板中的所有組件,由于最終呈現(xiàn)給用戶的文檔 往往是文檔模板組件經(jīng)過壓縮的文件,所以需要利用相應(yīng)的壓縮工具對文檔模板進行解 壓,從而獲得該文檔模板中的所有模板組件,即,xml組件。步驟S3、結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)換步驟在該步驟中,對于結(jié)構(gòu)化數(shù)據(jù)中所包含的內(nèi)部資源(包括文字、圖片、表格、數(shù)學 公式等各種類型的元素),將它們轉(zhuǎn)換為所用開放格式文檔的模板組件,并用這些模板組件 替換模板目錄下的相應(yīng)組件;對于結(jié)構(gòu)化數(shù)據(jù)中所包含的外部資源,即,嵌入資源,將這些 嵌入資源加載到模板目錄下的資源目錄中,如果資源格式不能夠被兼容,則先進行格式轉(zhuǎn) 換,然后再拷貝到資源目錄中,從而形成一個經(jīng)過組件更新和加載的模板目錄。在內(nèi)部資源轉(zhuǎn)換過程中,可利用一個樣式表文件來將結(jié)構(gòu)化數(shù)據(jù)中所包含的文 字、圖片、表格、數(shù)學公式等元素轉(zhuǎn)換為對應(yīng)的模板組件,即,將根據(jù)任意格式的數(shù)據(jù)而生成 的xml文件轉(zhuǎn)換為一個新的滿足所用開放格式規(guī)范的xml文件。在樣式表文件中,需要對 文字、圖片、表格、數(shù)學公式等各種元素建立相對應(yīng)的樣式表。在實際操作中,可利用XSLT 轉(zhuǎn)換技術(shù)根據(jù)結(jié)構(gòu)化數(shù)據(jù)來創(chuàng)建樣式表文件。XSLT轉(zhuǎn)換屬于xml轉(zhuǎn)換的一種已知技術(shù),因 此,省略其詳細描述。當然,本發(fā)明不限于利用XSLT轉(zhuǎn)換技術(shù),可使用任何已知的xml轉(zhuǎn)換 方法來創(chuàng)建樣式表文件。步驟S4、文檔成品步驟在該步驟中,根據(jù)更新的模板目錄下的所有組件生成符合所用開放格式的文檔。 通常需要利用相應(yīng)的壓縮工具將模板組件壓縮,從而生成最終呈現(xiàn)給用戶的文檔。以下,將參照圖3以生成word 2007文檔作為開放格式文檔的示例來進行進一步 的說明。首先,在步驟Sl中,將待處理數(shù)據(jù)生成規(guī)范的結(jié)構(gòu)化數(shù)據(jù),即,xml文件。接著,在步驟S2中,創(chuàng)建word模板。首先打開一篇空白word文檔,然后在該word 文檔中加入示范性段落、文字或表格等,并對這些內(nèi)容設(shè)定相應(yīng)的屬性。比如,如果要是生
7成的字體顯示為方正胖娃,則在本機上安裝有方正胖娃字體的情況下,需要在模板中加入 示例文字,并設(shè)定其字體為方正胖娃。如果不指定樣式,則使用word默認樣式。在word模 板創(chuàng)建完成之后,由于word文檔本身是一個符合Zip壓縮算法的壓縮文件,所以為了獲取 當前word模板中的所有xml組件,S卩,xml文件,在word模板創(chuàng)建完成后,必須利用符合Zip 壓縮規(guī)范的壓縮工具(比如,Winrar、EaSyZip)將其解壓后才能獲得這些xml組件,包括文 檔的圖片資源、資源關(guān)聯(lián)關(guān)系文件和文檔內(nèi)容文件等。然后,將解壓后的文件保存在指定的 臨時目錄下,以下將該目錄稱為word模板解壓目錄,該目錄包括文檔關(guān)系目錄(_rels)、文 檔屬性目錄(docl^ops)和內(nèi)容目錄(word),其中,括號里為目錄名。相關(guān)內(nèi)容可參見微軟 官方網(wǎng)站http //www, microsoft, com/china/msdn/library/office/office/ fford2007XMLFormat. mspx ? mfr = true。接著,在步驟S3中,對根據(jù)待處理數(shù)據(jù)生成的結(jié)構(gòu)化數(shù)據(jù)中所包含的內(nèi)部資源和 外部資源進行轉(zhuǎn)換。圖4是根據(jù)本發(fā)明的內(nèi)部資源轉(zhuǎn)換方法的流程圖。如圖4所示,結(jié)構(gòu)化數(shù)據(jù)30中 通??砂ㄎ淖?1、表格32、圖片33、數(shù)學公式34等類型的內(nèi)部資源。因此,需要根據(jù)相 應(yīng)的樣式表將它們轉(zhuǎn)換為對應(yīng)的模板組件。其中,對于圖片33,向模板組件轉(zhuǎn)換時需同時 在document, xml. rels中記錄這些資源的關(guān)聯(lián)關(guān)系。經(jīng)過這些轉(zhuǎn)換之后,得到不同文檔元 素類型對應(yīng)模板組件以及資源關(guān)聯(lián)關(guān)系35。此外,在轉(zhuǎn)換時為了數(shù)據(jù)交互方便,常常將兩個xml文件的內(nèi)容(比如,文檔的內(nèi) 容數(shù)據(jù)和資源的關(guān)系數(shù)據(jù))放在一個ml文件中,因此,轉(zhuǎn)換完成后需要對轉(zhuǎn)換后生成的 xml文件進行拆分,恢復成兩個xml文件,然后將拆分的文件放入word模板解壓目錄下的相 應(yīng)文件中。比如,轉(zhuǎn)換時把word組件中document, xml. rels中的內(nèi)容和document, xml中 的內(nèi)容放在了 一個newdocumen. xml文件中,則需根據(jù)節(jié)點名稱將各自的內(nèi)容提取出來生 成document, xml. rels, document, xml這兩個文件。然后,將這兩個文件放入word組件中 相應(yīng)的文件中,從而生成經(jīng)過更新的word文檔xml組件36。圖5是根據(jù)本發(fā)明的外部資源轉(zhuǎn)換方法的流程圖。參照圖5,首先判斷結(jié)構(gòu)化數(shù) 據(jù)中是否含有鏈接資源或者以數(shù)據(jù)流形式存在的資源。如果有鏈接資源,則首先判斷該資 源的格式是否符合00XML規(guī)范,如果符合00XML規(guī)范,則將該資源直接拷貝到word模板解 壓目錄下的資源目錄中,如果不符合00XML規(guī)范,則將該資源的格式轉(zhuǎn)換為能被word解析 的格式,然后將轉(zhuǎn)換的資源拷貝到word模板解壓目錄下的資源目錄中。比如,對于圖片資 源,后綴名為“.jpg”的圖片應(yīng)重新命名為“.jpeg”,后綴名為“.tif”的圖片重新命名為 “.tiff”。對于Word文檔不支持的圖片文件,如后綴名為“eps”等格式的圖片則應(yīng)將其轉(zhuǎn) 換為能被word解析的資源再放入資源目錄中。而對于數(shù)據(jù)流,則首先要將該數(shù)據(jù)流轉(zhuǎn)換為 資源文件,即,圖片,然后與對鏈接資源相同的操作進行轉(zhuǎn)換和拷貝。最后,在步驟S4中,由于word文檔是一個符合zip壓縮算法的壓縮文件,所以需 要使用符合zip壓縮規(guī)范的壓縮工具將word模板解壓目錄下的所有文件夾和文件進行壓 縮,生成壓縮文件。然后,將生成的壓縮文檔的后綴名修改為word后綴名,S卩,docx,從而完 成結(jié)構(gòu)化數(shù)據(jù)向符合00XML規(guī)范的word文檔的轉(zhuǎn)換。以下,將通過一個具體的例子來進一步說明本發(fā)明的技術(shù)方案和技術(shù)效果。在該示例中,待處理數(shù)據(jù)為圖6所示排版文檔,按照本發(fā)明方法將其生成word 2007文檔。
以下是根據(jù)圖6所示文檔中所包含的數(shù)據(jù)及其樣式而生成的xml文件,在該xml 文件中,未對圖像位置、段落位置以及段落字體字號進行描述。另外,在以下ml文件中,僅 對段落,表格等元素僅部分列出,對于相同格式的部分采用了…代替。< ? xml version = “ 1.0〃 encoding = “ utf-8 “ ? ><book xmlnsxsi = “ http://www.w3.org/2001/XMLSchema_instance" ><body><P uid =〃 1〃 ><T>第一節(jié)數(shù)控機床及其分類</Τ></Ρ><P uid =〃 2" ><T>1.數(shù)控機床的基本概念</T></Ρ><P uid =〃 3〃 ><Τ> 數(shù)控機床 </Τ></Ρ>......</Ρ><Ρ uid =〃 4〃 >〈Image uid=〃 5〃 href = “ 101. jpg" ><Data type =" image" href =" ImageOOOl. jpeg" ></Data></Image></P>......<P uid =〃 10〃 >〈Table uid =〃 11〃 >〈Datatype=" content" ><Table><Row><Cell><Body><P uid = " 12〃 ><T>相對加工性等級</T></Ρ></Body></Cell>......<Cell><Body><P uid = " 16〃 >
<T>代表性材料</Τ></Ρ></Body></Cell></Row>......<Row><Cell><Body><P uid = 〃 49〃 ><T>8</T></P></Body></Cell>......<Cell><Body><P uid = “ 52〃 ><T> 鈦合金,</T></P></Body></Cell></Row></Table></Data>〈/Table〉</P></body></book>然后,利用XSLT轉(zhuǎn)換技術(shù)將以上xml文件進行轉(zhuǎn)換,得到以下xml文件,即,
符合OOXML規(guī)范的xml組件。其中,body節(jié)點對應(yīng)于如圖7所示word模板組件中的 document, xml中的body節(jié)點,因此,將這個body節(jié)點替換模板組件中的body節(jié)點即 可。另夕卜,Relationships節(jié)點對應(yīng)于如圖8所示模板組件中的document, xml. rels中的 Relationships節(jié)點,因此,將這個Relationships節(jié)點替換模板組件中的Relationships 節(jié)點即可。這樣,就完成了 xml文件到對應(yīng)的00XML組件的轉(zhuǎn)換。< ? xml version = “ 1.0〃 encoding = “ uft_8〃 ? ><w document xmlns ve = “ http://schemas.openxmlformats.org/ markup-compatibility/2006“xmlns:o =“ urn:schemas-microsoft-com:office:office"
10
xmlns:r = “ http://schemas.openxmlformats.org/officeDocument/2006/ relationships“xmlns:m = “ http://schemas.openxmlformats.org/officeDocument/2006/ math ‘‘xmlnsν =“ urn:schemas-microsoft-com:vml“xmlns: wp = " http://schemas.openxmlformats.org/drawingml/2006/ wordprocessingDrawing"xmlns:wlO = " urn:schemas-microsoft-com:office:word"xmlns:w = " http://schemas.openxmlformats.org/wordprocessingml/2006/ main"xmlns:wne = " http://schemas.microsoft.com/office/word/2006/wordml" ><w:body><w:p><w:r><w:rPr><w:rFonts w:ascii = " " w:hAnsi = " " w:eastAsia =〃 “w: hint =〃 宋體‘‘ X/w:rFonts></w:rPr><w:t>第一節(jié)數(shù)控機床及其分類</w:t></w:r></w:p>......<w:p><w:r><w: drawing)<wp: inline distT = 〃 0〃 distB = 〃 0〃 distL ="O" distR = " O" ><wp:extent cx = 〃 373800〃 cy =" 373800〃 ></ wp: extent〉<wp:effectExtent 1=〃 0〃 t=〃 0〃 r =" 0〃 b ="O" X/wp:effectExtent><wp:docPr id = " 11〃 name = " ImageOOOl. jpeg" ></wp:docPr><wp:cNvGraphicFramePr><a:graphicFrameLocks noChangeAspect = " 1〃xmlns: a = " http://schemas.openxmlformats.org/drawingml/2006/
main" ></a:graphicFrameLock s>
</wpcNvGraphicFramePr><a: graphicxmlns:a = “ http://schemas.openxmlformats.org/drawingml/2006/main" ><a:graphicDatauri = " http://schemas.openxmlformats.org/drawingml/2006/picture" ><pic:picxmlns: pic = " http://schemas.openxmlformats.org/drawingml/2006/ picture" ><pic:nvPicPr><pic:cNvPr id = " 0〃name = " ImageOOOl. jpeg" ></pic:cNvPr><pic:cNvPicPr></ pic:cNvPicPr></pic:nvPicPr><pic:blipFill><a:blip r:embed =〃 rldll" ></a:blip><a:stretch)<a:fillRect></ a:fillRect></a: stretch)</pic:blipFill><pic:spPr><a:xfrm><a:off x=〃 0〃 y ="O" ></a:off><a:ext cx = 〃 373800〃 cy ="373800" ></a:ext></a:xfrm><a:prstGeom prst = " rect" ><a:avLst></a:avLst></a:prstGeom></pic:spPr></pic:pic></a:graphicData)</a: graphic)</wp: inline)</w: drawing)</w:r>0179]
0180] 0181] 0182]
0183]
0184]
0185]
0186]
0187]
0188]
0189]
0190]
0191]
0192]
0193]
0194]
0195]
0196]
_// //
0197]
0198]
0199]
0200] 0201] 0202]
0203]
0204]
0205]
0206]
0207]
0208]
0209]
0210]
0211]
_// //
0212]
0213]
0214]
0215]
</w:p>
<w:tbl>
<w:tblPr>
<w:tblStyle w:val = " a3" ></w:tblStyle> <w:tblff w:w =" 0" w:type =" auto" ></w:tblff> </w:tblPr>
<w:tblGrid></w:tblGrid> <w:tr>
<w: trPrX/w: trPr> <w:tc>
<w:tcPr>
<w:tcff></w:tcff> </w:tcPr> <w:p>
<w:r> <w:rPr>
<w:rFonts w:ascii =
w:hAnsi
w:eastAsia =" " w:hint =
宋體〃 X/w:rFonts>
</w:rPr>
<w:t>相對加工性等級</w:t> </w:r> </w:p> </w:tc>
<w:tc>
<w:tcPr>
<w:tcff></w:tcff> </w:tcPr> <w:p> <w:r>
<w:rPr>
<w:rFonts w:ascii = " " w:hAnsi
w:eastAsia = " " w:hint =" 宋體〃 X/w:rFonts>
</w:rPr>
<w:t>代表性材料</w:t> </w:r>
13
</w:p></w:tc></w:tr>......<w:tr><w:trPr></w:trPr><w:tc><w:tcPr><w:tcff></w:tcff></w:tcPr><w:p><w:r><w:rPr><w: rFonts w: ascii = " " w:hAnsi =〃 “w:eastAsia=〃 “ w:hint=〃宋體〃></w: rFonts〉</w:rPr><w:t>8</w:t></w:r></w:p></w:tc>......<w:tc><w:tcPr><w:tcff></w:tcff></w:tcPr><w:p><w:r><w:rPr><w:rFonts w:ascii =" " w:hAnsi =" " w:eastAsia =〃 “w:hint =〃宋體〃 X/w: rFonts〉</w:rPr><w:t> 鈦合金,</w:t></w:r></w:p></w:tc></w:tr></w:tbl>
</w:body>〈Relationships〉〈Relationship Id =" rldll"Type = “ http://schemas.openxmlformats.org/officeDocument/2006/ relationships/image"Target = " media/ImageOOOl. jpeg"xmlns = " http://schemas.openxmlformats.org/package/2006/ relationships" ></Relationship>〈/Relationships〉</w:document)最后,對組件更新的模板中的所有文件夾和文件進行壓縮,從而生成最終的word 文檔,如圖9所示。由于在以上根據(jù)原文檔生成的xml文件中沒有描述圖像位置、段落位置 以及段落字體字號,所以在生成word文檔時沒有保留這些屬性。當然,也可以根據(jù)需要在 該xml文件中對圖像位置等屬性進行描述,從而保留所需要的屬性。從這個示例可看出,根據(jù)word模板創(chuàng)建好樣式表之后,可將任意格式的數(shù)據(jù)快速 地轉(zhuǎn)換為具有該格式的word文檔。類似地,如果要生成任何其它開放格式的文檔,都可利 用樣式表文件進行轉(zhuǎn)換。在創(chuàng)建樣式表時,只要使其轉(zhuǎn)換后結(jié)構(gòu)符合所要生成的文檔格式 的規(guī)范即可。相應(yīng)地,本發(fā)明提供一種利用結(jié)構(gòu)化數(shù)據(jù)快速生成word文檔的系統(tǒng)。如圖10所 示,該系統(tǒng)包括數(shù)據(jù)輸入單元10,輸入任意格式的數(shù)據(jù),并將該數(shù)據(jù)發(fā)送給處理單元20 ; 處理單元20,將從數(shù)據(jù)輸入單元20接收的數(shù)據(jù)生成規(guī)范的結(jié)構(gòu)化數(shù)據(jù),再將該結(jié)構(gòu)化數(shù)據(jù) 生成符合開放格式規(guī)范的文檔,并將所生成的文檔發(fā)送給文檔輸出單元30 ;文檔輸出單元 30,輸出從處理單元20接收的word文檔。其中,處理單元20包括設(shè)計單元22,設(shè)計用于規(guī)范所述結(jié)構(gòu)化數(shù)據(jù)的規(guī)范化文 件(即,schenma或DTD文件)、用于將所述結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)換為所用開放格式文檔的模板組 件的樣式表文件以及符合所述結(jié)構(gòu)化數(shù)據(jù)的樣式的模板,并將規(guī)范化文件發(fā)送給結(jié)構(gòu)化單 元21,將樣式表文件發(fā)送給內(nèi)部資源轉(zhuǎn)換單元23,將所設(shè)計的模板中的所有組件發(fā)送給文 檔模板存儲單元25 ;結(jié)構(gòu)化單元21,將從數(shù)據(jù)輸入單元10接收的數(shù)據(jù)生成規(guī)范的結(jié)構(gòu)化 數(shù)據(jù),并將該結(jié)構(gòu)化數(shù)據(jù)發(fā)送給內(nèi)部資源轉(zhuǎn)換單元23和外部資源轉(zhuǎn)換單元M ;內(nèi)部資源轉(zhuǎn) 換單元23,利用樣式表文件將從結(jié)構(gòu)化單元接收的結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)換為所用開放格式文檔的 模板組件,并用這些組件替換模板存儲單元25中的相應(yīng)子單元中;外部資源轉(zhuǎn)換單元對, 將從結(jié)構(gòu)化單元21接收的結(jié)構(gòu)化數(shù)據(jù)中的嵌入資源加載到模板存儲單元25中的資源子單 元中;模板存儲單元,存儲從設(shè)計單元22接收的模板組件,包括與文檔模板中各個組件對 應(yīng)的子單元;文檔成品單元沈,在外部資源轉(zhuǎn)換單元M和內(nèi)部資源轉(zhuǎn)換單元23處理完之 后,從模板存儲單元25讀取文檔模板中的所有組件,并根據(jù)這些組件生成符合所用開放格 式的文檔,最后將該文檔發(fā)送給文檔輸出單元。如果要生成word 2007文檔,設(shè)計單元21利用符合00XML規(guī)范的空白word文檔創(chuàng) 建word模板之后,將word模板解壓以獲得word模板中的所有組件,并將這些組件發(fā)送到 模板存儲單元25中的對應(yīng)子單元中;內(nèi)部資源轉(zhuǎn)換單元23將所述結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)換為word文檔的OOXML組件,并用這些OOXML組件替換模板存儲單元25中的相應(yīng)子單元中存儲的內(nèi) 容,同時將該結(jié)構(gòu)化數(shù)據(jù)中的嵌入資源加載到模板存儲單元25中的資源子單元中;文檔成 品單元沈?qū)δ0宕鎯卧?5中的所有子單元中存儲的內(nèi)容進行壓縮,并將生成的壓縮文 檔的后綴名修改為word后綴名,從而生成符合OOXML規(guī)范的word文檔。通過這個系統(tǒng),對于某一特定格式的開放格式文檔,利用系統(tǒng)預先根據(jù)該格式創(chuàng) 建好的schema或DTD文件和xslt樣式表,就能夠自動地、快速地將任意格式的數(shù)據(jù)生成具 有該格式的文檔,而不需要該格式文檔所對應(yīng)的應(yīng)用程序。從以上描述可看出,本發(fā)明將任意格式的數(shù)據(jù)轉(zhuǎn)換為結(jié)構(gòu)化數(shù)據(jù),S卩,xml文件,然 后應(yīng)用樣式表將該結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)換為對應(yīng)的模板組件,并用這些模板組件替換所創(chuàng)建文檔 模板中的相應(yīng)組件,同時將嵌入資源加載到文檔模板中的資源目錄中,從而完成對文檔模 板的更新和加載,再根據(jù)該模板生成最終的開放格式文檔。該方法不要求計算機安裝開放 格式文檔所對應(yīng)的應(yīng)用程序,不受應(yīng)用程序接口的限制,可在占用較少系統(tǒng)資源的情況下 快速地將任意格式的數(shù)據(jù)生成開放格式文檔。同時,由于對于嵌入資源直接進行格式轉(zhuǎn)換 和拷貝,從而保留了嵌入資源的原有屬性,比如圖片的精度。以上參考實施例描述了本發(fā)明。但是,本領(lǐng)域的技術(shù)人員應(yīng)該理解,本發(fā)明不限于 所公開的實施例,在不脫離本發(fā)明的基本原理的情況下,任何類似的修改、替換或變形都應(yīng) 包括在本發(fā)明的保護范圍內(nèi)。
權(quán)利要求
1.一種快速生成開放格式文檔的方法,包括以下步驟(1)將任意格式的數(shù)據(jù)生成規(guī)范的結(jié)構(gòu)化數(shù)據(jù);(2)利用開放格式的空白文檔創(chuàng)建符合所述結(jié)構(gòu)化數(shù)據(jù)的樣式的文檔模板,并將該文 檔模板中的所有組件保存到模板目錄下;(3)將結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)換為對應(yīng)的模板組件,并用這些模板組件替換模板目錄下的相應(yīng) 組件,同時將結(jié)構(gòu)化數(shù)據(jù)中的嵌入資源加載到模板目錄下的資源組件中;(4)根據(jù)更新的模板目錄下的所有組件生成符合所用開放格式的文檔。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述開放格式的文檔模板中的組件為xml 組件,所述結(jié)構(gòu)化數(shù)據(jù)為xml文件。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述步驟(1)包括以下步驟制定用于規(guī)范xml數(shù)據(jù)的khema或DTD文件;采集所述數(shù)據(jù)生成xml文件,并利用所制定的khema或DTD文件對該xml文件進行規(guī) 范性驗證,以使所生成的xml文件符合所制定的結(jié)構(gòu)化規(guī)范。
4.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,在步驟(2)中創(chuàng)建文檔模板時,在文 檔模板中加入所述結(jié)構(gòu)化數(shù)據(jù)中所包含的文字、圖片、表格、數(shù)學公式等各種元素的附加信 息,這些附加信息表示文字、圖片、表格、數(shù)學公式等各種元素的樣式。
5.根據(jù)權(quán)利要求2所述的方法,其特征在于,在步驟(3)中,利用XSLT轉(zhuǎn)換技術(shù)或其 它xml轉(zhuǎn)換技術(shù)創(chuàng)建用于將所述結(jié)構(gòu)化數(shù)據(jù)中所包含的文字、圖片、表格、數(shù)學公式等各種 類型的元素轉(zhuǎn)換為對應(yīng)的模塊組件的樣式表文件,并通過該樣式表來將所述結(jié)構(gòu)化數(shù)據(jù)中 所包含的這些元素轉(zhuǎn)換為對應(yīng)的模板組件。
6.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述步驟C3)中加載嵌入資源的步驟 包括以下步驟判斷所述結(jié)構(gòu)化數(shù)據(jù)中是否含有鏈接資源或者以數(shù)據(jù)流形式存在的資源,如果有這些 資源,則執(zhí)行以下步驟對于數(shù)據(jù)流,首先將該數(shù)據(jù)流轉(zhuǎn)換為資源文件;判斷鏈接資源或者數(shù)據(jù)流經(jīng)過轉(zhuǎn)換而生成的資源的格式是否符合格式規(guī)范,如果符合 格式規(guī)范,則將該資源直接拷貝到模板目錄下的資源組件中,如果不符合格式規(guī)范,則將該 資源的格式轉(zhuǎn)換為能被所用開放格式文檔的應(yīng)用程序解析的格式,然后將轉(zhuǎn)換的資源拷貝 到模板目錄下的資源組件中。
7.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述開放格式文檔為符合OOXML規(guī)范的 word文檔,在這種情況下,在步驟( 中,利用符合OOXML規(guī)范的空白word文檔創(chuàng)建word模板之 后,將word模板解壓到指定的臨時目錄下,接著,在步驟(3)中,將所述結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)換為 OOXML組件,并用這些OOXML組件替換word模板解壓目錄下的相應(yīng)組件,同時將該結(jié)構(gòu)化數(shù) 據(jù)中的嵌入資源加載到word模板解壓目錄下的資源目錄中,最后,在步驟中,對word 模板解壓目錄下的所有文件夾和文件進行壓縮,并將生成的壓縮文檔的后綴名修改為word 后綴名,從而生成符合00XML規(guī)范的word文檔。
8.一種快速生成開放格式文檔的系統(tǒng),包括數(shù)據(jù)輸入單元,輸入任意格式的數(shù)據(jù),并將該數(shù)據(jù)發(fā)送給處理單元;處理單元,將從數(shù)據(jù)輸入單元接收的數(shù)據(jù)生成規(guī)范的結(jié)構(gòu)化數(shù)據(jù),再將該結(jié)構(gòu)化數(shù)據(jù) 生成符合開放格式規(guī)范的文檔,并將所生成的文檔發(fā)送給文檔輸出單元; 文檔輸出單元,輸出從處理單元接收的文檔, 其中,所述處理單元包括設(shè)計單元,設(shè)計用于規(guī)范所述結(jié)構(gòu)化數(shù)據(jù)的規(guī)范化文件、用于將所述結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)換 為所用開放格式文檔的模板組件的樣式表文件以及符合所述結(jié)構(gòu)化數(shù)據(jù)的樣式的模板,并 將規(guī)范化文件發(fā)送給結(jié)構(gòu)化單元,將樣式表文件發(fā)送給內(nèi)部資源轉(zhuǎn)換單元,將所設(shè)計的模 板中的所有組件發(fā)送給文檔模板存儲單元;結(jié)構(gòu)化單元,將從數(shù)據(jù)輸入單元接收的數(shù)據(jù)生成規(guī)范的結(jié)構(gòu)化數(shù)據(jù),并將該結(jié)構(gòu)化數(shù) 據(jù)發(fā)送給內(nèi)部資源轉(zhuǎn)換單元和外部資源轉(zhuǎn)換單元;內(nèi)部資源轉(zhuǎn)換單元,利用樣式表文件將從結(jié)構(gòu)化單元接收的結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)換為所用開 放格式文檔的模板組件,并用這些組件替換模板存儲單元中的相應(yīng)子單元中;外部資源轉(zhuǎn)換單元,將從結(jié)構(gòu)化單元接收的結(jié)構(gòu)化數(shù)據(jù)中的嵌入資源加載到模板存儲 單元中的資源子單元中;模板存儲單元,存儲從設(shè)計單元接收的模板組件,包括與文檔模板中各個組件對應(yīng)的 子單元;文檔成品單元,在外部資源轉(zhuǎn)換單元和內(nèi)部資源轉(zhuǎn)換單元處理完之后,從模板存儲單 元讀取文檔模板中的所有組件,并根據(jù)這些組件生成符合所用開放格式的文檔,最后將該 文檔發(fā)送給文檔輸出單元。
9.根據(jù)權(quán)利要求8所述的系統(tǒng),其特征在于,所述開放格式的文檔模板中的組件為xml 組件,所述結(jié)構(gòu)化數(shù)據(jù)為xml文件。
10.根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于,所述設(shè)計單元設(shè)計用于規(guī)范xml數(shù)據(jù)的 Schema或DTD文件,所述結(jié)構(gòu)化單元根據(jù)從設(shè)計單元接收的khema或DTD文件將從數(shù)據(jù)輸 入單元接收的數(shù)據(jù)生成規(guī)范的結(jié)構(gòu)化數(shù)據(jù)。
11.根據(jù)權(quán)利要求8所述的系統(tǒng),其特征在于,所述設(shè)計單元在創(chuàng)建文檔模板時,在文 檔模板中加入所述結(jié)構(gòu)化數(shù)據(jù)中所包含的文字、圖片、表格、數(shù)學公式等各種元素的附加信 息,這些附加信息表示文字、圖片、表格、數(shù)學公式等各種元素的樣式。
12.根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于,所述設(shè)計單元利用XSLT轉(zhuǎn)換技術(shù)或其 它xml轉(zhuǎn)換技術(shù)創(chuàng)建用于將所述結(jié)構(gòu)化數(shù)據(jù)中所包含的文字、圖片、表格、數(shù)學公式等各種 類型的元素轉(zhuǎn)換為對應(yīng)的模塊組件的樣式表文件。
13.根據(jù)權(quán)利要求8所述的系統(tǒng),其特征在于,所述外部資源轉(zhuǎn)換單元執(zhí)行以下操作 判斷所述結(jié)構(gòu)化數(shù)據(jù)中是否含有鏈接資源或者以數(shù)據(jù)流形式存在的資源,如果有這些資源,則執(zhí)行以下步驟對于數(shù)據(jù)流,首先將該數(shù)據(jù)流轉(zhuǎn)換為資源文件;判斷鏈接資源或者數(shù)據(jù)流經(jīng)過轉(zhuǎn)換而生成的資源的格式是否符合格式規(guī)范,如果符合 格式規(guī)范,則將該資源直接拷貝到模板存儲單元中的資源子單元中,如果不符合格式規(guī)范, 則將該資源的格式轉(zhuǎn)換為能被所用開放格式文檔的應(yīng)用程序解析的格式,然后將轉(zhuǎn)換的資 源拷貝到模板存儲單元中的資源子單元中。
14.根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于,所述開放格式文檔為符合OOXML規(guī)范的word文檔,在這種情況下,設(shè)計單元利用符合OOXML規(guī)范的空白word文檔創(chuàng)建word模板之后,將 word模板解壓以獲得word模板中的所有組件,并將這些組件發(fā)送到模板存儲單元中的對 應(yīng)子單元中;內(nèi)部資源轉(zhuǎn)換單元將所述結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)換為OOXML組件,并用這些OOXML組件 替換模板存儲單元中的相應(yīng)子單元中存儲的內(nèi)容,同時將該結(jié)構(gòu)化數(shù)據(jù)中的嵌入資源加載 到模板存儲單元中的資源子單元中;文檔成品單元對模板存儲單元中的所有子單元中存儲 的內(nèi)容進行壓縮,并將生成的壓縮文檔的后綴名修改為word后綴名,從而生成符合00XML 規(guī)范的word文檔。
全文摘要
本發(fā)明提供一種快速生成開放格式文檔的方法,包括將任意格式的數(shù)據(jù)生成規(guī)范的結(jié)構(gòu)化數(shù)據(jù);利用開放格式的空白文檔創(chuàng)建文檔模板,并將該文檔模板中的所有組件保存到模板目錄下;將結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)換為對應(yīng)的模板組件,并用這些模板組件替換模板目錄下的相應(yīng)組件,同時將結(jié)構(gòu)化數(shù)據(jù)中的嵌入資源加載到模板目錄下的資源組件中;對整個模板目錄進行壓縮,生成符合所用開放格式的文檔。相應(yīng)地,提供一種快速生成開放格式文檔的系統(tǒng)。本發(fā)明可將任意格式的數(shù)據(jù)快速地轉(zhuǎn)換為開放格式文檔,而不依賴于該格式文檔所對應(yīng)的應(yīng)用程序,占用系統(tǒng)資源較少,效率高,同時還可保留嵌入資源的原有屬性。
文檔編號G06F17/22GK102103573SQ20091024283
公開日2011年6月22日 申請日期2009年12月17日 優(yōu)先權(quán)日2009年12月17日
發(fā)明者尚高峰, 楊勇, 閆國龍 申請人:北京北大方正電子有限公司, 北大方正集團有限公司