2011-09-28 16 views
6

Robię program java, aby odczytać zaszyfrowane pliki PDF i wyodrębnić zawartość strony pliku według stron wraz z tekstem, obrazami i ich pozycjami (współrzędne x, y) w plik. Teraz używam PDFBox do tego celu i otrzymuję tekst i obrazy. Ale nie mogłem uzyskać pozycji tekstu i pozycji obrazu. Występują również problemy z odczytaniem zaszyfrowanych plików PDF.Odczytywanie lokalizacji tekstowych i graficznych (współrzędne xy) przy użyciu PDFBox

Odpowiedz

2

Spójrz na org.apache.pdfbox.examples.util.PrintTextLocations. Użyłem go całkiem sporo i bardzo pomocne jest wykonanie analiz w układzie elementów i ramek obwiedni w dokumentach PDF. Ujawniło także przedmioty wydrukowane białym atramentem lub poza obszarem wydruku (prawdopodobnie dokumentujące znaki wodne lub "zapomniane" przedmioty wypchnięte przez autora z widoku).

Przykład użycia:

java -cp app/target/pdfbox-app-1.5.0.jar org.apache.pdfbox.examples.util.PrintTextLocations ~/tmp/mydoc.pdf >~/tmp/out-text-locations.txt 

Dostaniesz coś takiego:

Processing page: 0 
String[53.9,59.856995 fs=-6.0 xscale=6.0 height=-3.666 space=1.3320001 width=4.6679993]A 
String[58.568,59.856995 fs=-6.0 xscale=6.0 height=-3.666 space=1.3320001 width=2.6640015]f 
String[61.232002,59.856995 fs=-6.0 xscale=6.0 height=-3.666 space=1.3320001 width=1.6679993]e 
... 

które można łatwo analizować i wykorzystywać wykreślić pozycję elementu, obwiedni oraz „przepływ” (trajektoria przez wszystkie elementy) itd. dla każdej strony. Jestem pewien, że już wiesz, że format PDF może być prawie niemożliwy do konwersji na tekst. Jest to po prostu format opisu graficznego (tj. Dla drukarki lub ekranu), a nie język znaczników. Możesz łatwo zrobić plik PDF, który drukuje "Witaj świecie", ale to przeskakuje losowo przez pozycje znaków (i że używa różnych glifów niż jakiekolwiek kodowanie znaków ISO, jeśli tak zdecydujesz), co sprawia, że ​​PDF jest bardzo trudny do konwersji na tekst. Nie ma pojęcia "słowo" lub "akapit". Na przykład dwukolumnowy dokument może być koszmarem, który można przeanalizować w tekście.

Dla drugiej części pytania, miałem dobre wyniki za pomocą Xpdf wersji 3.02, po utrwaleniu Xref.cc (marka XRef::okToPrint(), XRef::okToChange(), XRef::okToCopy() i XRef::okToAddNotes() wszystko wrócić gTrue). To ma obsługiwać zablokowane dokumenty, a nie szyfrowane (są tam inne narzędzia).

Powiązane problemy