




已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
使用PDFBox處理PDF文檔 在本書的前面所介紹的內(nèi)容中,所處理的都是純文本文件。但是事實(shí)上,人們用于保存信息的文件并不是純文本格式?,F(xiàn)在比較流行的文件存儲格式有Adobe公司的PDF和Microsoft的Word、Excel等。在處理這些文件的時候,不能簡單的從文件讀取字符,需要根據(jù)他們特殊的格式提取內(nèi)容。本章就將對比較流行的PDF、Word和Excel格式的處理工具逐一進(jìn)行介紹。7.1 使用PDFBox處理PDF文檔PDF全稱Portable Document Format,是Adobe公司開發(fā)的電子文件格式。這種文件格式與操作系統(tǒng)平臺無關(guān),可以在Windows、Unix或Mac OS等操作系統(tǒng)上通用。PDF文件格式將文字、字型、格式、顏色及獨(dú)立于設(shè)備和分辨率的圖形圖像等封裝在一個文件中。如果要抽取其中的文本信息,需要根據(jù)它的文件格式來進(jìn)行解析。幸好目前已經(jīng)有不少工具能幫助我們做這些事情。7.1.1 PDFBox的下載最常見的一種PDF文本抽取工具就是PDFBox了,訪問網(wǎng)址/projects/pdfbox/,進(jìn)入如圖7-1所示的下載界面。圖7-1 PDFBox的下載頁面讀者可以在該網(wǎng)頁下載其最新的版本。本書采用的是PDFBox-0.7.3版本。PDFBox是一個開源的Java PDF庫,這個庫允許你訪問PDF文件的各項(xiàng)信息。在接下來的例子中,將演示如何使用PDFBox提供的API,從一個PDF文件中提取出文本信息。7.1.2 在Eclipse中配置以下是在Eclipse中創(chuàng)建工程,并建立解析PDF文件的工具類的過程。(1)在Eclipse的workspace中創(chuàng)建一個普通的Java工程:ch7。(2)把下載的PDFBox-0.7.3.zip解壓,解壓后的目錄結(jié)構(gòu)如圖7-2所示。圖7-2 解壓后的PDFBox包(3)進(jìn)入external目錄下,可以看到,這里包括了PDFBox所有用到的外部包。復(fù)制下面的Jar包到工程ch7的lib目錄下(如還未建立lib目錄,則先創(chuàng)建一個)。l bcmail-jdk14-132.jarl bcprov-jdk14-132.jarl checkstyle-all-4.2.jarl FontBox-0.1.0-dev.jarl lucene-core-2.0.0.jar然后再從PDFBox的lib目錄下,復(fù)制PDFBox-0.7.3.jar到工程的lib目錄下。(4)在工程上單擊右鍵,在彈出的快捷菜單中選擇“Build Path-Config Build Path-Add Jars”命令,把工程lib目錄下面的包都加入工程的Build Path。筆者機(jī)器上完整的工程目錄如圖7-3所示:圖7-3 工程截圖7.1.3 使用PDFBox解析PDF內(nèi)容在剛剛創(chuàng)建的Eclipse工程中,創(chuàng)建一個ch7.pdfbox包,并創(chuàng)建一個PdfboxTest類。該類包含一個getText方法,用于從一個PDF中獲取文本信息,其代碼如下。代碼7.1public void geText(String file) throws Exception / 是否排序 boolean sort = false;/ pdf文件名 String pdfFile = file;/ 輸入文本文件名稱 String textFile = null;/ 編碼方式 String encoding = UTF-8;/ 開始提取頁數(shù) int startPage = 1;/ 結(jié)束提取頁數(shù) int endPage = Integer.MAX_VALUE;/ 文件輸入流,生成文本文件 Writer output = null;/ 內(nèi)存中存儲的PDF Document PDDocument document = null;try try / 首先當(dāng)作一個URL來裝載文件,如果得到異常再從本地文件系統(tǒng)/去裝載文件 URL url = new URL(pdfFile); document = PDDocument.load(url); / 獲取PDF的文件名 String fileName = url.getFile(); / 以原來PDF的名稱來命名新產(chǎn)生的txt文件 if (fileName.length() 4) File outputFile = new File(fileName.substring(0, fileName.length() - 4) + .txt); textFile = outputFile.getName(); catch (MalformedURLException e) / 如果作為URL裝載得到異常則從文件系統(tǒng)裝載 document = PDDocument.load(pdfFile); if (pdfFile.length() 4) textFile = pdfFile.substring(0, pdfFile.length() - 4) + .txt; / 文件輸入流,寫入文件倒textFile output = new OutputStreamWriter(new FileOutputStream(textFile), encoding); / PDFTextStripper來提取文本 PDFTextStripper stripper = null; stripper = new PDFTextStripper();/ 設(shè)置是否排序 stripper.setSortByPosition(sort);/ 設(shè)置起始頁 stripper.setStartPage(startPage);/ 設(shè)置結(jié)束頁 stripper.setEndPage(endPage);/ 調(diào)用PDFTextStripper的writeText提取并輸出文本 stripper.writeText(document, output); finally if (output != null) / 關(guān)閉輸出流 output.close(); if (document != null) / 關(guān)閉PDF Document document.close(); 在上面的代碼中,getText方法接收一個String類型的參數(shù),指定要提取的PDF文件路徑。這個位置可以是一個URL或本地文件。然后函數(shù)調(diào)用PDFBox提供的PDFTextStripper類,設(shè)置提取過程中的一些屬性(如起始頁、是否排序等)。最后將文本提取并寫入文件。7.1.4 運(yùn)行效果下面看一下這個函數(shù)的運(yùn)行效果,在PdfboxTest加入一個main函數(shù),其代碼如下。public static void main(String args) PdfboxTest test = new PdfboxTest(); try / 取得C盤下的index.pdf的內(nèi)容 test.geText(C:index.pdf); catch (Exception e) e.printStackTrace(); 這里要處理一個index.pdf文件,該P(yáng)DF文件的內(nèi)容如圖7-4所示。圖7-4 要解析的PDF文檔內(nèi)容通過PdfboxTest處理后的文本文件如圖7-5所示。圖7-5 處理的結(jié)果可以看到,PDF中的文本已經(jīng)被提取出來,保存于文本文件中了。其中第4行的超鏈接部分“POI News WebBlog”,在文本文件中已經(jīng)被替換成了普通的純文本。讀者可以根據(jù)PDFBox所提供的API文檔進(jìn)一步查詢其他功能。7.1.5 與Lucene的集成PDFBox還提供和Lucene的集成,它提供了一套簡單的方法把PDF Documents加入到Lucene的索引中去,請看以下代碼:Document lucenedocument = LucenePDFDocument.getDocument();其中,LucenePDFDocument是PDFBox中提供的一個類,它的getDocument被重載為3個方法,分別接收一個File對象、InputStream對象或者URL對象作為參數(shù),然后從該參數(shù)傳遞進(jìn)來的PDF文件中,提取并生成Lucene的Document對象。當(dāng)通過PDFBox從一個PDF文檔中得到一個Lucene Document后,可以直接使用IndexWriter把它加到Lucene的index中。LucenePDFDocument自動從PDF文件中提取各種元數(shù)據(jù)Field,并把它們加入到Document中。它提取的信息如表7-1所示。表7-1 PDFBox生成的Lucene Document格式Lucene Field名稱說明path文件系統(tǒng)路徑(如果文檔是從文件裝載)urlURL地址(如果文檔是從網(wǎng)絡(luò)裝載)contents整個Document的內(nèi)容,索引但不存儲summaryDocument的內(nèi)容前500個字符modified最后修改時間uidDocument的惟一IDCreationDate從PDF的meta-data獲取Creator從PDF的meta-data獲取Keywords從PDF的meta-data獲取ModificationDate從PDF的meta-data獲取Producer從PDF的meta-data獲取Subject從PDF的meta-data獲取Trapped從PDF的meta-data獲取下面通過LucenePDFDocument,直接對PDF建立索引,在ch7.pdfbox包下面新建一個PdfLuceneTest類,該類的代碼如下。代碼7.2public class PdfLuceneTest public static void main(String args) try / IndexWriter存放索引到d:index下 IndexWriter writer = new IndexWriter(d:index, new StandardAnalyzer(), true); / LucenePDFDocument返回由PDF產(chǎn)生的Lucene Docuement Document d = LucenePDFDocument .getDocument(new File(C:index.pdf); / 寫入索引 writer.addDocument(d); / 關(guān)閉索引文件流 writer.close(); / 讀取d:index下的索引文件建立IndexSearcher IndexSearcher searcher = new IndexSearcher(d:index); / 對索引的contents Field進(jìn)行查找關(guān)鍵詞poi Term t = new Term(contents, poi); / 根據(jù)Term生成Query Query q = new TermQuery(t); / 搜索返回結(jié)果集 Hits hits = searcher.search(q); / 打印結(jié)果集 for (int i = 0; i hits.length(); i+) System.out.println(hits.do
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 云南美術(shù)色彩試題及答案
- 江寧面試題目及答案
- 廣告設(shè)計(jì)機(jī)器學(xué)習(xí)應(yīng)用的實(shí)踐探討試題及答案
- 福建學(xué)士學(xué)位試題及答案
- 《陶瓷釉料的制備》課件
- 助理廣告師備考心得體會試題及答案
- 生活垃圾焚燒處理廠建設(shè)初步方案設(shè)計(jì)
- 電廠職業(yè)病試題及答案
- 保安考試題目及答案
- 商業(yè)美術(shù)設(shè)計(jì)師考試研究試題及答案
- 健康評估試題庫
- 被執(zhí)行人財(cái)產(chǎn)申報表
- 吊裝安全確認(rèn)表及技術(shù)交底
- DBJ41∕T 228-2019 河南省房屋建筑施工現(xiàn)場安全資料管理標(biāo)準(zhǔn)
- 三級安全教育考試試題(的)
- DB13 5325-2021 生活垃圾焚燒大氣污染控制標(biāo)準(zhǔn)
- 芒針療法課件
- 鼓樂鏗鏘課件 (2)
- 小學(xué)二年級下冊科學(xué)課件1.《春夏秋冬》大象版(22張)ppt課件
- 鋼結(jié)構(gòu)工程質(zhì)量通病防治圖冊
- 地下水八大離子-陰陽離子平衡計(jì)算公式
評論
0/150
提交評論