2011-07-26 19 views
9

Potrzebuję wyodrębnić dane z niektórych dokumentów PDF (przy użyciu Java). Muszę wiedzieć, jaki byłby najłatwiejszy sposób na zrobienie tego.Jaki jest najłatwiejszy sposób wyodrębniania danych z pliku PDF?

Próbowałem iText. To dość skomplikowane dla moich potrzeb. Poza tym myślę, że nie jest ona dostępna za darmo w komercyjnych projektach. Więc nie jest to opcja. Próbowałem również PDFBox i wpadłem na różne błędy NoClassDefFoundError.

Przeszukałem kilka innych opcji, takich jak PDF Clown, jPod, ale nie mam czasu na eksperymentowanie ze wszystkimi tymi bibliotekami. Opieram się na doświadczeniach społeczności z czytaniem plików PDF przez Javę.

Należy pamiętać, że nie trzeba tworzyć ani modyfikować dokumentów PDF. Po prostu potrzebuję rozbudować dane tekstowe z dokumentów PDF o złożoności złożonej z umiarkowanego poziomu.

Proszę zaproponować najszybszy i najłatwiejszy sposób wyodrębnienia tekstu z dokumentów PDF. Dzięki.

Odpowiedz

2

Używam JPedal i jestem naprawdę zadowolony z wyników. Nie jest darmowy, ale jest wysokiej jakości, a wyjście do generowania obrazu z pdf lub ekstrakcji tekstu jest naprawdę miłe.

A jako płatna biblioteka, wsparcie jest zawsze dostępne, aby odpowiedzieć.

+0

Thanks @Mauricio, ale niestety biblioteka musi być wolny. :-( –

+0

Zaufaj mi, próbowałem wielu darmowych bibliotek tam, a one nie są nawet zbliżone do wydajności i opcji JPedala. Wierzę, że licencja jest podobna do 800 USD, więc jest całkiem tania, jeśli chodzi o funkcjonalność. Jeśli naprawdę tego potrzebujesz, powinieneś poprosić swoją firmę, aby uzyskała coś, co działa najlepiej, jak to możliwe. –

1

Użyłem PDFBox do wyodrębnienia tekstu do indeksowania Lucene bez zbyt wielu problemów. Rejestrowanie błędów/ostrzeżeń jest dość szczegółowe, jeśli dobrze pamiętam - jaka była przyczyna tych błędów?

+0

Dla 'Lucene', moje IDE powiedział, że klasa jest niedostępna.W rzeczywistości cały pakiet "searchengine" był niedostępny. (Pobrałem najnowsze wydanie PDFBox ze strony Apache.) –

+0

Następnie próbowałem z 'PDFParser'. I to jest błąd, który mam: 'Wyjątek w wątku" główny "java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory \t w org.apache.pdfbox.pdfparser.BaseParser. (BaseParser.java:58) ' –

+0

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

2

Polecam wypróbowanie Apache Tika. Apache Tika to w zasadzie zestaw narzędzi, który pobiera dane z wielu typów dokumentów, w tym z plików PDF.

Korzyści z Tika (oprócz bycia wolnym) to taki, który był kiedyś podprojektem Apache Lucene, który jest bardzo solidną wyszukiwarką open-source. Tika zawiera wbudowany analizator składni PDF, który wykorzystuje procedurę obsługi treści SAX do przesyłania danych PDF do aplikacji. Może także wyodrębnić dane z zaszyfrowanych plików PDF i umożliwia utworzenie lub podklasę istniejącego parsera w celu dostosowania zachowania.

Kod jest prosty. Aby wyodrębnić dane z pliku PDF, wszystko co musisz zrobić, to utworzyć klasę Parser, który implementuje interfejs Parser i zdefiniować parse() metoda:

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(); 
} 

Następnie, aby uruchomić analizator, można zrobić coś takiego to:

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

rozumiem ten post jest dość stary, ale polecam użyciu iText stąd: http://sourceforge.net/projects/itext/ Jeśli używasz Maven można wyciągnąć słoiki z Maven centralny: http://mvnrepository.com/artifact/com.itextpdf/itextpdf

Nie mogę zrozumieć, jak przy użyciu może być trudne:

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"); 
Powiązane problemy