国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Web 的Word 文檔管理系統(tǒng)設(shè)計

2016-06-17 19:26何怡璇熊棠
電腦知識與技術(shù) 2016年11期
關(guān)鍵詞:命令行文件名全文檢索

何怡璇++熊棠

摘要:在Windows系統(tǒng)中,使用Ruby on Rails 4框架設(shè)計一個基于Web的word文檔管理系統(tǒng)。系統(tǒng)具有在線預(yù)覽、全文檢索、版本控制、文本比較和可控下載等功能。

關(guān)鍵詞:word;文檔管理;Ruby on Rails 4

中圖分類號:TP311 文獻標(biāo)識碼:A 文章編號:1009-3044(2016)11-0053-03

企業(yè)日常運營中會大量使用到電子文檔,一般以微軟word文檔、excel文檔、圖片、音視頻等形式存在;其中word文檔應(yīng)用范圍廣泛、數(shù)量巨大。從內(nèi)容上說,包括商務(wù)合同、會議記錄、產(chǎn)品手冊、客戶資料、設(shè)計文檔、推廣文案、競爭對手資料、項目文檔、心得等。為了有效地存儲、管理大量的文檔,文檔管理系統(tǒng)應(yīng)運而生。一個實用性的文檔管理系統(tǒng),應(yīng)具有在線預(yù)覽、全文檢索、版本控制、文本比較和可控下載等功能;其余如訪問控制、加密存儲、在線協(xié)作等不是本文討論的重點。

在Windows系統(tǒng)中,使用Ruby on Rails 4框架(以下簡稱RoR4),配合第三方軟件設(shè)計一個基于Web的word文檔管理系統(tǒng),使其具有上述功能。

1 軟件

為了實現(xiàn)前述功能,除RoR4產(chǎn)品環(huán)境所需的必要軟件外,還需安裝以下軟件。

1.1 DocToText

DocToText是一個跨平臺的命令行工具,支持把DOC、RTF和DOCX等格式轉(zhuǎn)換為UTF-8編碼的純文本。將DocToText.exe保存到服務(wù)器,并將所在路徑添加到系統(tǒng)環(huán)境變量Path中即可。命令格式如下:

doctotext [文件名] >> [文本文件]

[文本文件]中的內(nèi)容即為獲取的純文本內(nèi)容。

1.2 Beyond Compare 4

Beyond Compare 4是一款商業(yè)軟件(以下簡稱BC4),主要用于文件,文本的比較;支持doc、docx、pdf、html等文件,目前最新版本為4.1.5。BC4還支持命令行操作,將安裝路徑添加到系統(tǒng)環(huán)境變量Path中后,即可使用BCompare命令對兩個文件進行比較;比較完成后會生成一個html文件用以存儲及現(xiàn)實比較結(jié)果。命令格式如下:

BCompare.exe /silent @[參數(shù)文件] [文件1] [文件2] [輸出網(wǎng)頁文件]

1.3 word2pdf

word2pdf是一款免費軟件,能夠批量將doc、docx、rtf、txt和htm文件轉(zhuǎn)換為pdf文件。word2pdf還支持命令行操作,將安裝路徑添加到系統(tǒng)環(huán)境變量Path中后,即可使用word2pdf.exe命令進行命令行下的批量轉(zhuǎn)換。命令格式如下:

word2pdf.exe /source "[文件1]" "[文件2]" "[文件3]" /target "[輸出路徑]"

1.4 ImageMagick

ImageMagick是一個跨平臺的、用于圖像處理的軟件包,能對多種格式的圖片進行讀寫操作[1],能夠把pdf文件轉(zhuǎn)換為圖片。

1.4.1 Ghostscript

Ghostscript是PDF和PostScript語言的解釋器[2]。ImageMagick轉(zhuǎn)換pdf文件時需要調(diào)用到它。直接下載安裝即可,目前最新版本為9.19。

1.4.2 安裝并配置ImageMagick

根據(jù)系統(tǒng)情況下載合適的ImageMagick并默認安裝。在Windows系統(tǒng)中,convert是系統(tǒng)內(nèi)置命令,和ImageMagick的命令沖突,所以要人工修改。進入ImageMagick安裝目錄,將convert.exe重命名,如IMconvert.exe。打開注冊表編輯器,搜索ImageMagick安裝目錄,如“C:\Program Files\ImageMagick-6.9.3-Q16”,將搜索到的名為AutoRun的鍵,值改為修改后的程序路徑,如“C:\Program Files\ImageMagick-6.9.3-Q16\IMconvert.exe $*”。

使用ImageMagick將pdf文件轉(zhuǎn)換為jpg等圖片時,會按頁轉(zhuǎn)換。即在PDF中的一頁對應(yīng)一張圖片,圖片以數(shù)字后綴的形式排列,后綴0表示第一頁。命令格式如下:

IMconvert -density [分辨率] [pdf文件][頁碼范圍] [jpg文件]

分辨率即圖片的DPI,普通圖片72即可,如果對清晰度要求較高,或有較多文字,建議設(shè)置為150,如果有大幅打印需求,可以設(shè)置為300或更高。

頁碼范圍可缺省,缺省時表示整個文件;頁碼0表示第一頁,支持逗號分隔及連字符,如[0-3,12-25,29]。

jpg文件為輸出文件名,當(dāng)pdf文件多頁輸出時,輸出圖片自動添加連字符頁碼作為新的文件名,如“output-0.jpg”、“output-1.jpg”。

1.5 前端插件

1.5.1 PDF.js

PDF.js 是Mozilla實驗室開發(fā)的關(guān)于HTML5技術(shù)的一個開源項目,用于在網(wǎng)頁上顯示PDF文檔,而不需要任何瀏覽器插件等原生代碼[3]。代碼托管于GitHub,需要獲取源碼并構(gòu)建到本地。也可以直接下載第三方編譯好的項目,直接拷貝到服務(wù)器目錄中使用。在RoR4項目中,也可以通過安裝pdfjs-rails這個Gem來實現(xiàn),后述即基于此方法。

1.5.2 FlippingBook

FlippingBook是一款收費的圖書翻頁效果的插件,包含swf和js文件??梢允褂脠D片創(chuàng)造出翻頁書本的效果。

2 數(shù)據(jù)結(jié)構(gòu)

在RoR4項目的模型中做如下定義:

2.1 Doc類

Doc表示一個文檔,屬性title為文檔的標(biāo)題,應(yīng)據(jù)有全局唯一性;另還應(yīng)有屬性定義文檔的狀態(tài)、分類、歸屬、訪問權(quán)限、文檔說明等。

2.2 Edition類

Edition表示一個具體的文件,與存儲在硬盤中的word文件是一一對應(yīng)的。屬性path為文件的存儲路徑,一個word文件獨占一個存儲路徑;屬性version為文件的版本號;屬性text為文件的純文本內(nèi)容;另還應(yīng)有屬性定義文件的上傳者、上傳時間等。

2.3 Doc與Edition的關(guān)系

一個Doc實例可以包含一個或多個Edition實例,一個Edition實例必屬于一個Doc實例。

3 word文檔預(yù)處理

word文件通過上傳組件上傳時及成功后,需要做一些預(yù)先處理。

3.1 文檔識別

客戶端word文件通過瀏覽器上傳,文件上傳類根據(jù)上傳時間生成一個全局唯一的無序字符串@path,作為該文件的工作路徑;生成路徑@path,同時生成word、text、pdf、jpg四個子目錄;word文件保存在該路徑下的word目錄中,文件名為字符串“uploaded.doc”或“uploaded.docx”。文件上傳類返回文件路徑、文件尺寸、原文件名等信息。對原文件名進行文本處理,去除擴展名、時間標(biāo)簽等可以預(yù)見的干擾字符后得到字符串_title,數(shù)據(jù)庫中搜索title屬性等于_title的Doc實例,如果返回結(jié)果長度為0,則新建一個Doc實例@doc,title值為_title;如果返回一個長度為1的對象@docs,則將@doc賦值為@docs[0];如果@docs長度超過1,則進入異常警告。

如無異常,新建一個Edition實例@edition,@edition屬于@doc。@edition.path的值為@path;@edition的version值為@doc的所有edtion對象個數(shù)加一,即@edition.version = @doc. editions.size + 1 。

3.2 獲取文本

使用docToText工具獲取word文件的純文本內(nèi)容。原理是使用Ruby的system方法調(diào)用命令行工具,后述所有命令行調(diào)用均基于此方法。腳本為_status = system(_cmd);_cmd是字符串類型的變量,其值即為需運行的命令;_status是布爾類型的變量,表示運行是否成功。首先針對@edition對象構(gòu)建_cmd:

_cmd = 'docToText ' + @edition.path + '/word/uploaded.doc' + ' >>' + @edition.path + '/text/uploaded.txt'

system執(zhí)行后,即在@path/text目錄下生成文件uploaded.txt,再使用Ruby的File類將uploaded.txt內(nèi)容讀出,賦值給@edition.text即可,具體腳本不再贅述。

3.3 生成pdf文件

生成pdf文件的原理同上,使用system方法調(diào)用命令行工具word2pdf,從word文件生成pdf文件,具體腳本不再贅述。生成的pdf文件位于@path/pdf目錄中,文件名為uploaded.pdf。

3.4 生成分頁圖片

原理同上,調(diào)用ImageMagick的IMconvert工具由uploaded.pdf文件生成分頁圖片,存儲在@path/jpg目錄中,文件名為uploaded[-頁碼].jpg格式。

4 主要功能

4.1 在線預(yù)覽

實現(xiàn)在線預(yù)覽有兩種方式,一是PDF.js展示uploaded.pdf文件;二是flash或js展示分頁圖片。

4.1.1 展示pdf文件

使用pdfjs-rails可以很便捷地生成pdf預(yù)覽,在視圖文件中使用如下腳本即可:

<%= pdf_viewer @pdf_url %>

@pdf_url即pdf文件的路徑。pdfjs-rails會自動生成PDF.js腳本,PDF.js在展示pdf文檔時還原精確、功能強大且不再需要其他插件支持。但是有兩個問題:一是PDF.js運行在HTML5平臺上,不支持HTML5的瀏覽器無法運行。二是客戶端可以復(fù)制pdf文檔中的純文本,不利于內(nèi)容保護。

4.1.2 展示分頁圖片

另一個思路是使用flash或js加載分頁圖片創(chuàng)建書籍效果,可以規(guī)避前述兩個問題。FlippingBook是一款優(yōu)秀的圖書翻頁效果flash插件,可以自由靈活的設(shè)置導(dǎo)航、尺寸、顏色、背景音樂等參數(shù),以實現(xiàn)不同的瀏覽效果;FlippingBook是一款收費軟件,免費版只能載入10張圖片。也可以選擇其他flash或js插件實現(xiàn)類似效果。

另外,還可以使用flash插件展示pdf文件,或?qū)df文件轉(zhuǎn)化成swf文件再由FlexPaper來做前端展示,由于沒有明顯優(yōu)勢,此處不做詳細說明。

4.2 全文檢索

在3.2小節(jié)中已獲得了純文本內(nèi)容并存儲在text屬性中,因此很容易使用RoR4的SQL查詢功能實現(xiàn)全文檢索。全文檢索會消耗大量服務(wù)器資源,可采用以下方法提高檢索效率,降低負載:

第一、 對常用關(guān)鍵字及其檢索結(jié)果建立數(shù)據(jù)緩存,即把全文檢索轉(zhuǎn)換為關(guān)鍵字檢索;

第二、 在客戶端采用AJAX異步載入部分檢索結(jié)果,每次只進行有限次數(shù)的后臺檢索。

4.3 版本控制

在數(shù)據(jù)結(jié)構(gòu)設(shè)計時,已將Doc與Edition分開,Doc對應(yīng)一個文檔,Edition對應(yīng)一個具體的word文件,一個Doc可以對應(yīng)多個Edition。這種結(jié)構(gòu)可以很容易的做到版本控制。一個word文件在上傳的時候被歸屬到一個文檔,并且自動生成版本號。在Edition的屬性里面可以記錄上傳者,上傳時間,簡要說明與上一版的差別等。一個文檔在歸檔時可以將定版以外的其余版本清除,以節(jié)省空間。

4.4 文本比較

可采用Beyond Compare 4命令行工具對兩個文件進行文本比較。經(jīng)過預(yù)處理,一個文件有word、txt、pdf、jpg圖片4種存在形式。經(jīng)測試得出如下結(jié)論:

第一、 比較doc文件的準確率較高,比較docx文件結(jié)果不準確;

第二、 比較txt文件準確率較高,但格式差異無法比較;

第三、 比較pdf文件準確率較高,格式變化也能反映出來;

第四、 無法正常比較jpg圖片。

因此,選用pdf文件作為比較對象。首先要建立靜態(tài)文件BCconfig.txt,完整路徑記為_BCconfig,用來定義配置腳本,基本配置如下:

file-report layout:side-by-side &

options:ignore-unimportant,display-context,line-numbers &

output-to:%3 output-options:html-color,wrap-word %1 %2

其次要建立輸出文件,BCompare工具不能新建文件,使用Ruby的File類新建一個HTML文件作為輸出文件。所有輸出文件可以放到一個目錄中,文件名為作比較的兩個@edition.path連接而成,形如1eu98y-2dg38k.html;文件路徑記為_result_path。

第三要生成命令行字符串。記被比較的兩個文件路徑分別為_pdf_1、_pdf_2,命令格式如下:

BCompare /silent /solo @_BCconfig _pdf_1 _pdf_2 _result_path

silent參數(shù)表示靜默運行,solo參數(shù)表示新建一個BCompare會話實例。最后用system方法調(diào)用即可。通過展示結(jié)果文件,即可獲得比較結(jié)果。存儲的結(jié)果文件可以多次使用,不需要每次都重新比較;也可以讀出其內(nèi)容儲存在數(shù)據(jù)庫中,以避免目錄下文件過多降低性能。

4.5 可控下載

在RoR4中,較成熟的可控下載方案是采用Apache的xsendfile下載機制。通過服務(wù)器端程序判斷下載請求是否合法,接受合法請求打開相應(yīng)文件,讀取文件內(nèi)容并發(fā)送給客戶端[4]。發(fā)送文件時,后端并不直接讀取文件,而是在 X-Sendfile 頭中指定一個文件的地址來通告前端web服務(wù)器。當(dāng)web服務(wù)器檢測到后端發(fā)送的這個header后,它將忽略后端的其他輸出[4],而將文件發(fā)送給客戶端。并且,X-Sendfile屬性不會被發(fā)送給客戶端,文件路徑得到了保護。[4]具體實現(xiàn)方法不再贅述。

5 結(jié)束語

通過上述設(shè)計,文檔管理系統(tǒng)實現(xiàn)了在線預(yù)覽、全文檢索、版本控制、文本比較和可控下載等功能。需要注意的是,本文涉及的第三方軟件中有多個商業(yè)軟件,使用時需注意版權(quán)問題。

參考文獻:

[1] ImageMagick Studio LLC.ImageMagick: Convert, Edit, Or Compose Bitmap Images[EB/OL]. [2016-03-09].http://www.imagemagick.org/script/index.php.

[2] Artifex Software. Ghostscript[EB/OL]. [2016-03-09]. http://ghostscript.com.

[3] Mozilla Labs. pdf.js/README.md at master· mozilla/pdf.js· GitHub[EB/OL]. [2016-03-09].https://github.com/mozilla/pdf.js/blob/master/README.md.

[4] 熊棠, 唐勇. Windows平臺下xsendfile下載機制的實現(xiàn)[J]. 電腦知識與技術(shù), 2014, 10(32), 7619-7656.

猜你喜歡
命令行文件名全文檢索
文件名批量管理方法淺析
一種基于docker集群的自動評價虛擬命令行實驗終端構(gòu)建及其在類Unix系統(tǒng)教學(xué)中的應(yīng)用
Windows 10新版CMD更新
Oracle數(shù)據(jù)庫全文檢索性能研究
基于KySou的全文檢索系統(tǒng)的分析與優(yōu)化
基于VC++6.0的文件名批量轉(zhuǎn)換
用JSP調(diào)用Lucene包來實現(xiàn)全文檢索
清苑县| 株洲县| 亳州市| 金坛市| 海盐县| 任丘市| 富源县| 衡阳县| 朝阳县| 崇阳县| 英吉沙县| 岫岩| 平凉市| 广水市| 延安市| 房山区| 卢氏县| 罗平县| 忻城县| 民权县| 霍林郭勒市| 政和县| 清徐县| 瑞昌市| 蒙阴县| 桦川县| 吉林省| 台北县| 沾益县| 昌乐县| 红桥区| 绩溪县| 崇州市| 喀喇| 克东县| 永平县| 皮山县| 钟山县| 阿坝县| 玉门市| 佛山市|