資源描述:
《使用pdfbox處理pdf文檔》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、使用PDFBox處理PDF文檔在本書的前面所介紹的內(nèi)容中,所處理的都是純文本文件。但是事實(shí)上,人們用于保存信息的文件并不是純文本格式。現(xiàn)在比較流行的文件存儲(chǔ)格式有Adobe公司的PDF和Microsoft的Word、Excel等。在處理這些文件的時(shí)候,不能簡單的從文件讀取字符,需要根據(jù)他們特殊的格式提取內(nèi)容。本章就將對(duì)比較流行的PDF、Word和Excel格式的處理工具逐一進(jìn)行介紹。7.1?使用PDFBox處理PDF文檔PDF全稱PortableDocumentFormat,是Adobe公司開發(fā)的電子文件格式。這種文件格式與操作
2、系統(tǒng)平臺(tái)無關(guān),可以在Windows、Unix或MacOS等操作系統(tǒng)上通用。PDF文件格式將文字、字型、格式、顏色及獨(dú)立于設(shè)備和分辨率的圖形圖像等封裝在一個(gè)文件中。如果要抽取其中的文本信息,需要根據(jù)它的文件格式來進(jìn)行解析。幸好目前已經(jīng)有不少工具能幫助我們做這些事情。7.1.1?PDFBox的下載最常見的一種PDF文本抽取工具就是PDFBox了,訪問網(wǎng)址http://sourceforge.net/projects/pdfbox/,進(jìn)入如圖7-1所示的下載界面。圖7-1?PDFBox的下載頁面讀者可以在該網(wǎng)頁下載其最新的版本。本書采
3、用的是PDFBox-0.7.3版本。PDFBox是一個(gè)開源的JavaPDF庫,這個(gè)庫允許你訪問PDF文件的各項(xiàng)信息。在接下來的例子中,將演示如何使用PDFBox提供的API,從一個(gè)PDF文件中提取出文本信息。7.1.2?在Eclipse中配置以下是在Eclipse中創(chuàng)建工程,并建立解析PDF文件的工具類的過程。(1)在Eclipse的workspace中創(chuàng)建一個(gè)普通的Java工程:ch7。(2)把下載的PDFBox-0.7.3.zip解壓,解壓后的目錄結(jié)構(gòu)如圖7-2所示。圖7-2?解壓后的PDFBox包(3)進(jìn)入external
4、目錄下,可以看到,這里包括了PDFBox所有用到的外部包。復(fù)制下面的Jar包到工程ch7的lib目錄下(如還未建立lib目錄,則先創(chuàng)建一個(gè))。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)在工程上單擊右鍵,在彈出的快捷菜單中選擇“BuildPath->
5、ConfigBuildPath->AddJars”命令,把工程lib目錄下面的包都加入工程的BuildPath。筆者機(jī)器上完整的工程目錄如圖7-3所示:圖7-3?工程截圖7.1.3?使用PDFBox解析PDF內(nèi)容在剛剛創(chuàng)建的Eclipse工程中,創(chuàng)建一個(gè)ch7.pdfbox包,并創(chuàng)建一個(gè)PdfboxTest類。該類包含一個(gè)getText方法,用于從一個(gè)PDF中獲取文本信息,其代碼如下。代碼7.1publicvoidgeText(Stringfile)throwsException{//是否排序??booleansort=fals
6、e;//pdf文件名??StringpdfFile=file;//輸入文本文件名稱??StringtextFile=null;//編碼方式??Stringencoding="UTF-8";//開始提取頁數(shù)??intstartPage=1;//結(jié)束提取頁數(shù)??intendPage=Integer.MAX_VALUE;//文件輸入流,生成文本文件??Writeroutput=null;//內(nèi)存中存儲(chǔ)的PDFDocument??PDDocumentdocument=null;try{?????try{????????//首先當(dāng)作一個(gè)U
7、RL來裝載文件,如果得到異常再從本地文件系統(tǒng)//去裝載文件????????URLurl=newURL(pdfFile);????????document=PDDocument.load(url);????????//獲取PDF的文件名????????StringfileName=url.getFile();????????//以原來PDF的名稱來命名新產(chǎn)生的txt文件????????if(fileName.length()>4){???????????FileoutputFile=newFile(fileName.substri
8、ng(0,fileName.length()-4)+".txt");???????????textFile=outputFile.getName();????????}?????}catch(MalformedURLExceptione){????????//如