2011-07-26 131 views
9

我需要從一些PDF文檔中提取數據(使用Java)。我需要知道什麼是最簡單的方法。從PDF中提取數據的最簡單方法是什麼?

我試過了iText。我的需求相當複雜。除此之外,我猜它不適用於商業項目。所以它不是一個選項。我也嘗試了PDFBox,並遇到各種NoClassDefFoundError錯誤。

我搜索了一下,發現了其他一些選項,比如PDF Clown,jPod,但我沒有時間去試驗所有這些庫。我依靠社區的經驗閱讀PDF通過Java。

請注意,我不需要創建或操作PDF文檔。我只需要從中等水平佈局複雜度的PDF文檔中提取文本數據。

請建議從PDF文檔中提取文本的最快最簡單的方法。謝謝。

回答

2

我正在使用JPedal,我對結果非常滿意。它不是免費的,但它的質量很高,從pdf或文本提取圖像生成的輸出非常好。

作爲付費圖書館,支持總是在那裏回答。

+0

感謝@Mauricio,可惜庫需要是免費的。 :-( –

+0

相信我,我嘗試了很多免費的圖書館,他們甚至都沒有接近JPedal的性能和選項,我相信這個許可證就像800美元,所以它對於你的功能非常便宜,如果你真的需要這個,你應該要求你的公司得到一些儘可能好的東西 –

1

我已經使用PDFBox爲Lucene索引提取文本,沒有太多問題。它的錯誤/警告日誌記錄非常詳細,如果我沒有記錯的話 - 那些錯誤的原因是什麼?

+0

對於'Lucene',我的IDE說班級不可用。實際上整個'searchengine'軟件包都不可用。 (我從Apache站點下載了最新的PDFBox發行版。) –

+0

接下來,我嘗試使用PDFParser。這是我得到的錯誤:'在線程中的異常「main」java.lang.NoClassDefFoundError:org/apache/commons/logging/LogFactory \t at org.apache.pdfbox.pdfparser.BaseParser。 (BaseParser.java:58)' –

+0

http://pdfbox.apache.org/dependencies.html –

2

我推薦嘗試Apache Tika。 Apache Tika基本上是一個工具包,可從多種類型的文檔中提取數據,包括PDF。

Tika(除了免費)的好處是,它曾經是Apache Lucene的子項目,它是一個非常強大的開源搜索引擎。 Tika包含一個內置的PDF解析器,它使用SAX Content Handler將PDF數據傳遞給您的應用程序。它還可以從加密的PDF中提取數據,並允許您創建或子類化現有解析器以自定義行爲。

代碼很簡單。爲了從一個PDF中的數據,所有你需要做的就是創建一個實現Parser接口一個解析器類和定義parse()方法:

public void parse(
    InputStream stream, ContentHandler handler, 
    Metadata metadata, ParseContext context) 
    throws IOException, SAXException, TikaException { 

    metadata.set(Metadata.CONTENT_TYPE, HELLO_MIME_TYPE); 
    metadata.set("Hello", "World"); 

    XHTMLContentHandler xhtml = new XHTMLContentHandler(handler, metadata); 
    xhtml.startDocument(); 
    xhtml.endDocument(); 
} 

然後,運行解析器,你可以這樣做這樣的:

InputStream input = new FileInputStream(new File(resourceLocation)); 
ContentHandler textHandler = new BodyContentHandler(); 
Metadata metadata = new Metadata(); 
PDFParser parser = new PDFParser(); 
parser.parse(input, textHandler, metadata); 
input.close(); 
out.println("Title: " + metadata.get("title")); 
out.println("Author: " + metadata.get("Author")); 
out.println("content: " + textHandler.toString()); 
0

我明白這個職位是很老,但我會建議利用iText從這裏: http://sourceforge.net/projects/itext/ 如果您正在使用Maven你可以從Maven的中央拉罐中: http://mvnrepository.com/artifact/com.itextpdf/itextpdf

我不知道如何使用它是很困難的:

PdfReader pdf = new PdfReader("path to your pdf file"); 
    PdfTextExtractor parser = new PdfTextExtractor(); 
    String output = parser.getTextFromPage(pdf, pageNumber); 
    assert output.contains("whatever you want to validate on that page"); 
相關問題