葉萍
(常州信息職業(yè)技術(shù)學(xué)院軟件與大數(shù)據(jù)學(xué)院 江蘇省常州市 213164)
本文旨在實現(xiàn)文檔附件自動化轉(zhuǎn)換系統(tǒng),對于多個文檔附件的處理。通過多個不同的方案進行對比,分別在其優(yōu)缺點、工作流程、操作復(fù)雜度等進行多方面解析。此系統(tǒng)可以將多個文檔附件進行合并,將所需要內(nèi)容進行篩選整合,降低文檔處理人員工作量,提高了文檔處理效率,并減少存儲空間和處理時間。
傳統(tǒng)的文檔附件處理,都是需要處理者手動進行篩選、識別、添加、刪除、合并等操作。其處理方式工程量大,并且會遇到搜索定位復(fù)雜、修改內(nèi)容困難等多個問題。文檔處理的需求主要有如下四個方面:
(1)副本內(nèi)容的同步,文檔附件自動轉(zhuǎn)換系統(tǒng)需要實現(xiàn)將副本文檔與原文檔進行內(nèi)容同步轉(zhuǎn)換。在操作文檔之前需要進行數(shù)據(jù)備份,在修改原文檔內(nèi)容時,會出現(xiàn)只修改了原來文檔的內(nèi)容,而副本文檔內(nèi)容卻沒有與原文檔同步,這就需要手動去核對和修改,較多的文件進行修改的場景中,給文檔處理增加了許多負擔(dān)。
(2)附件文檔的篩選,文檔附件的類型有許多種,不同的文檔類型在文檔附件自動轉(zhuǎn)換系統(tǒng)中需要進行篩選。一般附件文檔的文件類型為PDF 文檔,所以在設(shè)計系統(tǒng)時需要設(shè)計文檔篩選功能,選出PDF 類型文檔。篩選出來的文檔中還有可能存在個別所不需要或用不上的文檔,需要對這一類文檔進行刪除操作。
(3)附件文檔格式化,在處理文檔時,需要進行將每個PDF文檔的每一頁都轉(zhuǎn)換為圖片保存于本地,一是為了做好數(shù)據(jù)備份,二是為了能夠方便使用者將不需要的內(nèi)容進行修改與刪除。在進行附件文檔格式化時,還需考慮所保存的圖片清晰度、圖片的大小、圖片的尺寸、圖片的格式。
(4)附件文檔的整合,將格式化后的文檔附件進行整合,首先需要考慮文檔頁眉頁碼的添加,其次要考慮如何能夠按照順序?qū)⑽臋n逐步的合并,最后需要考慮如何生成一個清晰完整的目錄。
對于非功能性需求主要有三個。
(1)存儲空間大小,文檔附件自動轉(zhuǎn)換系統(tǒng)在實現(xiàn)過程需要進行文檔資源備份,而備份操作會將整個項目文檔的大小逐漸增大,而減少存儲空間大小是我們在設(shè)計系統(tǒng)時要仔細考慮如何解決這個問題,一般可以下面從三個方面進行考慮。在進行文檔處理之前,就直接篩選保存需要操作的文檔,而不操作、不修改的文檔可以不進行備份保存。在備份時,將備份文檔的清晰度降到最適合的像素,這樣保存的備份圖片占用的存儲空間就會大大減少??梢栽诖鎯D片時,使用圖片占用存儲空間較小的圖片格式類型來存儲。
(2)系統(tǒng)的及時性,傳統(tǒng)文檔處理方式需要花費較多的時間,基本上需要以分鐘來進行計算。那么系統(tǒng)在處理文檔是需要花費的時間一般要以MS(毫秒)來計算是基本要求。處理文檔時間花費越小,系統(tǒng)的效率越高。
(3)系統(tǒng)的友好程度,系統(tǒng)的應(yīng)用性即系統(tǒng)應(yīng)該要便于用戶的使用,使用者不需要太多的學(xué)習(xí)就可以輕松掌握其使用方法,在與傳統(tǒng)文檔處理方式相比較下,系統(tǒng)的應(yīng)該需要做到使用者在處理文檔附件過程中盡量少去進行操作,減少一些用戶所不必要的操作;可擴展性是系統(tǒng)程序應(yīng)在未來能添加新的性能、能夠進行系統(tǒng)升級、確保維護人員能夠修改和優(yōu)化。所以系統(tǒng)需要有較高的可分析行、可重用性及模塊性??删S護性為文檔附件的自動轉(zhuǎn)換系統(tǒng)在日后需要進行優(yōu)化和修復(fù),首先應(yīng)考慮該系統(tǒng)在維護時的難易程度,其次是考慮該系統(tǒng)能否接受重新改進。
本文提出了文檔附件自動轉(zhuǎn)換的設(shè)計方法,系統(tǒng)在傳統(tǒng)的文檔處理思路上實現(xiàn)自動化,遇到多文檔處理時可以通過文檔附件自動轉(zhuǎn)換節(jié)約大量時間。此方案設(shè)計在Ubuntu 操作系統(tǒng)下對基于Python 的文檔附件自動轉(zhuǎn)換系統(tǒng)設(shè)計與實現(xiàn),主要可以分為五個模塊,分別為PDF 類型模板模塊、篩選合并PDF 文檔模塊、模板與待處理文檔合并模塊及SHELL 腳本的文件模塊。
(1)Shell 腳本模塊。該模塊是為了方便用戶一次性執(zhí)行多項操作,事先將所要執(zhí)行命令放到一個文件中,類似于Windows 操作系統(tǒng)下的批處理,而Shell 腳本文件只能在Ubuntu 操作系統(tǒng)或者Unix 操作系統(tǒng)下運行,功能卻比Windows 下批處理強大的多。Shell 腳本主要編寫內(nèi)容為篩選所需要的PDF 類型文檔附件、設(shè)計RST 模板文件、合并模板文件與待處理文檔及生成結(jié)果文檔。此模塊編寫的腳本文檔為shell 類型文件,編寫內(nèi)容主要有四個部分,第一部分為生成一個JSON 文檔。第二部分為運行一個 Python 文檔生成一個為RST 模板文檔和一個合并所有所需處理文檔的PDF 類型的待處理文檔。第三部分是將RST 文檔轉(zhuǎn)換為PDF 類型的模板文檔。第四部分為將PDF 模板文檔與待處理文檔進行合并。
(2)篩選文檔模塊。主要用來實現(xiàn)將路徑下的所有PDF 類型文檔進行篩選并寫入后綴是“.json”的JSON 文件。JSON 是一種輕量級的數(shù)據(jù)交換格式,因為JSON 層次結(jié)構(gòu)清晰、簡潔明了、便于閱讀及編寫,而且也易于計算機解析和生成。本系統(tǒng)設(shè)計方案基于Python 編程語言,而Python 中的一種基本數(shù)據(jù)結(jié)構(gòu)就是Dictionary(字典),字典的結(jié)構(gòu)與JSON 的結(jié)構(gòu)非常相近,而且Python 中也有JSON 庫可供用戶進行兩者之間的自動化轉(zhuǎn)換。用 tree 命令生成一個該路徑下所有為 PDF 類型文件的json 文件,以完整的路徑方式保存。所生成的 JSON 文件主要存放的有多個字典組成的列表,每個字典都有至少兩個鍵值,分別為“type”(存放的是該文件或者文件夾類型)、“name” (該文件名)。JSON 類型文件將其打開后可直接進行編輯,即就可以很方便的將不需要處理的該文檔所在的字典中進行刪除。
(3)設(shè)計模板模塊。此模塊設(shè)計主要運用了reStructuredText輕量級標(biāo)記語言編寫RST 類型的模板文檔。用reStructuredText 來進行文檔格式編輯是因為它語法簡單、運行環(huán)境輕量、功能強大,更重要的是它可以將編寫的文檔內(nèi)容轉(zhuǎn)換為PDF 類型文檔。需要設(shè)計兩個模板文檔,一個是目錄模板文檔,另一個是標(biāo)題模板文檔。目錄模板通過對附件文檔格式的考慮,主要對文檔附件的目錄、標(biāo)題、章節(jié)編號及頁碼來進行編寫設(shè)計,模板文件需要實現(xiàn)的目錄、頁碼清晰,最后效果能夠一眼識別。標(biāo)題模板文檔需要設(shè)計功能圖,主要是對內(nèi)容、標(biāo)題進行操作。下一步將兩個模板文件都設(shè)計好以后進行合并,最后再轉(zhuǎn)換為PDF 類型文檔,為組合文檔模塊時做準(zhǔn)備。模板文檔主要有兩個部分,第一部分為目錄模板。目錄模板主要是對文檔的主標(biāo)題及目錄進行編寫。使用reStructuredText輕量級標(biāo)記語言來對目錄模板文檔的實現(xiàn)生成RST 類型文檔。在內(nèi)容上標(biāo)與下標(biāo)都有多個連續(xù)的符號(如“=”)為一級標(biāo)題,即顯示的內(nèi)容樣式為一級標(biāo)題樣式。通過:class 對內(nèi)容添加樣式;通過..section-numbering:: 添加章節(jié)編號;通過..raw::pdf PageBreak 命令來訪問頁面模板,cutePage 為頁面模板中的樣式,其內(nèi)容為給頁面添加頁眉頁碼。第二部分為標(biāo)題模板的設(shè)計,標(biāo)題模板主要是通過對符號的控制來設(shè)編寫標(biāo)題的級別。表示標(biāo)題的符號有_ 、 * 、 =、 -、`、:、'、"、~、+、 ^、#、<、>,標(biāo)題可以通過自由組合來進行使用,最多可分為六級。而相同的符號可以通過上標(biāo)、下標(biāo)來控制標(biāo)題級別,使用不同的六個符號的標(biāo)題依次排列,依次產(chǎn)生的標(biāo)題為一級標(biāo)題到六級標(biāo)題。
最后將模板文檔通過rst2pdf 命令將RST 類型文檔轉(zhuǎn)為PDF 類型的模板文檔。
(4)合并文檔模塊,主要是將多個需要處理的PDF 類型文檔進行合并,生成一個待處理的PDF 類型文檔,為組合文檔模塊做準(zhǔn)備。該模塊需分兩個操作,第一個操作是對于Word 文檔內(nèi)容整合模塊的實現(xiàn),首先需要創(chuàng)建一個模板文件,并對其進行頁眉、頁腳、樣式的設(shè)計,先使用 Python 中的docx 庫中的Document 類將模板文件打開,再使用clear 類來把模板Word 文檔里面所都段落內(nèi)容都進行清 除(clear 類僅刪除內(nèi)容,不刪除樣式),這樣做是為了在對 Word 文檔進行操作 時避免出現(xiàn)不必要的問題。使用add_paragraph 方法添加一個段落,內(nèi)容為待處理 PDF 文檔的文件名,使用style 屬性給段落添加樣式。再add_picture 方法將 圖片插入文檔內(nèi),用inches 屬性來設(shè)置圖片的大小。還需要解決word 文檔生成目錄問題,需要oxml 類中的 OxmlElement 方法和qn 方法進行目錄的生成。
第二個操作主要是生成一個PDF 類型結(jié)果文檔,為組合文檔模塊做準(zhǔn)備的待處理文檔,實現(xiàn)步驟主要有四個步驟。第一步運用Python 中的json 庫的load 方法將json 文件轉(zhuǎn)換為有多個字典組成的列表;第二步通讀取每個字典的“type”來判斷文件類型;第三步若是文件類型是文件夾則繼續(xù)循環(huán)訪問文件夾內(nèi)文件,直到為類型為文檔后再將文檔進行合并;第四步生成一個待處理的文檔附件。
(5)組合文檔模塊,此模塊主要實現(xiàn)模板文件與待處理文檔進行組合,然后輸出PDF 類型的結(jié)果文檔,解決了在需求分析中所提出的附件文檔整合的問題。主要分為四個部分,第一部分是獲取模板文件與待處理文檔頁碼;第二部分是縮小待處理文檔頁面,主要是為了后期將兩個文檔組合時不出現(xiàn)內(nèi)容覆蓋;第三部分是將文檔附件與模板進行組合;第四部分是將結(jié)果文檔進行輸出展示。主要是將模板文檔與待處理文檔相組合,再生成一個最后的結(jié)果文檔。該模塊主要分成四個主要步驟,第一步是通過Python 中pdfrw庫的PdfReader類將兩個文件打開,再通過pages的方法來獲取頁碼;第二步是通過scale 方法將待處理的文檔頁面按比例縮放;第三步是用PageMerge 類將模板文件也待處理文檔附件進行頁面組合;第四步用PdfWriter 類將組合后的文檔進行生成輸出。
本文所設(shè)計的基于Python 的文檔附件自動轉(zhuǎn)換系統(tǒng)系統(tǒng),在與傳統(tǒng)文檔處理方式相比較下,該系統(tǒng)做到使用者在處理文檔附件過程中盡量減少重復(fù)性操作,并從根本意義上實現(xiàn)了文檔處理部分流程的“自動化”。
文檔附件自動轉(zhuǎn)換系統(tǒng)是用程序自動實現(xiàn)文檔處理操作。從執(zhí)行效率來看,傳統(tǒng)文檔附件處理方式時間較長,處理者工作量大、出錯率高,而文檔附件自動轉(zhuǎn)換系統(tǒng)則只需處理者點擊啟動,等待自動化文檔結(jié)果的生成。從花費時間來看,傳統(tǒng)文檔附件處理方式需要花費大量時間去執(zhí)行重復(fù)性操作,比如打開多個文件、復(fù)制文檔內(nèi)容、篩選文檔標(biāo)題名、保存內(nèi)容于本地等,這些重復(fù)性操作浪費了大量時間。文檔附件自動轉(zhuǎn)換系統(tǒng)使用計算機對重復(fù)性操作進行自動化處理;從執(zhí)行效果來看,傳統(tǒng)文檔附件處理方式,結(jié)果文檔會有較多的錯誤,比如圖片大小不一、內(nèi)容順序顛倒等,文檔附件自動轉(zhuǎn)換系統(tǒng)是由計算機按照統(tǒng)一的邏輯和規(guī)則進行處理,會大大減少上述問題,并能將最后輸出的文檔整理的更美觀。