使用xpdf來處理中文PDF文件

2021-04-17 06:59:24 字數 2880 閱讀 1196

pdfbox看起來非常的方便,它的api功能強大。甚至能和lucene進行無縫的結合。但是它有乙個致命的弱點,就是它不支援中文。要提取中文的文字,可以採用另乙個非常出色的工具xpdf。

讀者可以到

2  配置

將xpdf-3.01pl2-win32.zip解壓到c:/xpdftest目錄下,然後將xpdf-chinese-simplified.tar.gz解壓倒c:/xpdftest/xpdf/目錄下,解壓後的目錄結構如圖2所示。

圖2  xpdf解壓後的目錄

開啟目錄下的xpdfrc檔案,編輯檔案內容,如下**所示。

**1

cidtounicode    adobe-gb1       c:/xpdftest/xpdf/xpdf-chinese-simplified/adobe-gb1.cidtounicode

unicodemap      iso-2022-cn     c:/xpdftest/xpdf/xpdf-chinese-simplified/iso-2022-cn.unicodemap

unicodemap      euc-cn          c:/xpdftest/xpdf/xpdf-chinese-simplified/euc-cn.unicodemap

unicodemap  gbk     c:/xpdftest/xpdf/xpdf-chinese-simplified/gbk.unicodemap

cmapdir         adobe-gb1       c:/xpdftest/xpdf/xpdf-chinese-simplified/cmap

tounicodedir                    c:/xpdftest/xpdf/xpdf-chinese-simplified/cmap

fontdir c:/windows/fonts

displaycidfonttt adobe-gb1 c:/windows/fonts/simhei.ttf

texteol      cr+lf

檔案的路徑讀者可以根據自己的環境改,如在windows 2000下,fontdir所在的位置是c:/winnt/fonts,displaycidfonttt adobe-gb1的位置是在c:/winnt/fonts/simhei.ttf。

7.2.3  提取中文

在工程中新建乙個ch7.xpdf包,並建立乙個pdf2text類。該類採用runtime傳入引數,呼叫pdftotext.exe來進行文字的提取。其具體實現**如下。

**2public class pdf2text

// 建構函式,引數為pdf檔案的對像

public pdf2text(file pdffile) throws ioexception

// 將pdf轉為文字文件

public void totextfile() throws ioexception

// 將pdf轉為文字文件,引數為目標檔案的路徑,預設使用pdf檔案中的布局

public void totextfile(string targetfile) throws ioexception

// 將pdf轉為文字文件,引數1為目標檔案的路徑,

// 引數2為true則表示使用pdf檔案中的布局

public void totextfile(string targetfile, boolean islayout)

throws ioexception

// 將pdf轉為文字文件,引數為目標檔案

public void totextfile(file targetfile) throws ioexception

// 將pdf轉為文字文件,引數1為目標檔案,

// 引數2為true則表示使用pdf檔案中的布局

public void totextfile(file targetfile, boolean islayout)

throws ioexception

// 獲取pdf轉換器的路徑

public string getconvertor_stored_path()

// 設定pdf轉換器的路徑

public void setconvertor_stored_path(string path)

// 解析命令列引數

private string getcmd(file targetfile, boolean islayout) ; }

} 該類對外提供乙個totextfile()方法。該方法接收2個引數:targetfile為目標pdf檔案,islayout

表示是否採用原始的pdf檔案中的layout布局。類中的getcmd()方法負責解析傳進來的參

數,並生成乙個string陣列。該string陣列表示乙個作業系統中的命令,其中,各項分別代

表命令後所跟的引數。在獲得到該陣列後,再呼叫runtime.getruntime().exec(string)函式

來執行命令。

注意:在getcmd()方法中設定編碼方式的時候,用到的是gbk。這並不是對所有的檔案都

適用,因為中文的編碼方式不只一種,讀者可以根據pdf的編碼型別選擇不同的encoding

方式。所有簡體中文的編碼方式都定義在檔案xpdfrc中的unicodemap中,現在支援3種編

碼方式,分別是iso-2022-cn,euc-cn,gbk。

執行效果

下面通過乙個函式來測試pdf2text類,在ch7.xpdf包中新建乙個pdf2texttest類,包含乙個

main函式,其**如下。

** 7.5

public class pdf2texttest catch (exception e) }

}

使用XPDF將PDF轉換為HTML

4 解壓除錯 1 先將xpdf 3.02pl4 win32.zip解壓,解壓後的內容可根據需要進行刪減,如果只需要轉換為txt格式,其他的exe檔案可以刪除,只保留pdftotext.exe,以此類推 2 然後將xpdf chinese simplified.tar.gz解壓到剛才xpdf 3.02...

使用XPDF將PDF轉換為HTML

使用xpdf將pdf轉換為html 1.6 word excel pdf檔案轉換成html整理 4 解壓除錯 1 先將xpdf 3.02pl2 win32.zip解壓,解壓後的內容可根據需要進行刪減,如果只需要轉換為txt格式,其他的 exe檔案可以刪除,只保留pdftotext.exe,以此類推 ...

使用Flask WTF來處理表單

在flask中,為了處理web表單,一般使用flask wtf擴充套件,它封裝了wtfforms,並且有驗證表單資料的功能。可以使用flash訊息閃回把訊息傳給模板 from flask import flask,render template,request,flash cwtnice 目的,實現...