2013-05-15 20 views
6

Jak ustalić, czy strona PDF zawiera tekst, czy jest czysto obrazem, używając Java?Określić, czy strona PDF zawiera tekst, czy też jest czystym obrazkiem.

Przeszukałem wiele forów i stron internetowych, ale nie mogę jeszcze znaleźć odpowiedzi.

Czy można wyodrębnić tekst z pliku PDF, aby dowiedzieć się, czy strona jest w formacie obrazu lub tekstu?

PdfReader reader = new PdfReader(INPUTFILE); 
     PrintWriter out = new PrintWriter(new FileOutputStream(OUTPUTFILE));    
     for (int i = 1; i <= reader.getNumberOfPages(); i++) { 
     // here I want to test the structure of the page !!!! if it's possible       
     out.println(PdfTextExtractor.getTextFromPage(reader, i)); 
     } 
+1

Wydaje się to dość zaangażowane w sposób ak- ceptyczny. Może będziesz potrzebować nagrody tutaj – Coffee

+1

Dziękuję Panu Adelowi Mam nadzieję, że tak :) –

Odpowiedz

6

Nie ma wodoodpornego sposobu robienia tego, co chcesz.

Tekst może pojawić się na różne sposoby w pliku PDF. Na przykład: można narysować wszystkie glify za pomocą operatorów stanów graficznych zamiast używać stanu tekstu. (Przykro mi, jeśli to brzmi dla ciebie jak chińszczyzna, ale zapewniam cię, że to właściwy język PDF.)

Jeśli rozwiązanie ad hoc, które obejmuje najczęściej występujące sytuacje i omija egzotyczny plik PDF raz na jakiś czas, jest OK dla ciebie, masz już pierwsze dobre rozwiązanie.

W swoim kodzie pętli nad wszystkimi stronami i pytasz iText, czy istnieje jakiś tekst na stronie. To już dobry sygnał.

Wewnętrznie Twój kod używa interfejsu RenderListener. iText analizuje zawartość strony i uruchamia metody w konkretnej implementacji RenderListener. Jest to implementacja niestandardowej implementacji: MyTextRenderListener. Ta niestandardowa implementacja jest używana w przykładzie ParsingHelloWorld.

Istnieje również metoda renderImage() (patrz na przykład MyImageListener). Jeśli ta metoda zostanie uruchomiona, masz 100% pewności, że na stronie znajduje się również Obraz i możesz użyć obiektu ImageRenderInfo, aby uzyskać położenie, szerokość i wysokość obrazu (czyli: jeśli umiesz interpretować Matrix zwrócony przez metodę getImageCTM()).

Korzystając ze wszystkich tych elementów, możesz już osiągnąć długą drogę do osiągnięcia tego, czego potrzebujesz, ale pamiętaj, że zawsze będą dostępne egzotyczne pliki PDF, które wymykają się spod kontroli.

+0

Bardzo dziękuję Panu @ Bruno Lowagie –