Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > парсинг pdf


Автор: gray_k 2.12.2004, 15:36
Можно как-либо парсить pdf-файл средствами явы?
Мне надо программно осуществлять поиск в pdf-файле.

Автор: Domestic Cat 2.12.2004, 16:18
http://www.pdfbox.org/

Автор: gray_k 2.12.2004, 17:11
Спасибо, похоже прикольная библиотека.

Автор: sergejzr 4.12.2004, 04:08
А возможно ли использовать этот либ в качестве класса. То есть "читать" pdf сразу в string. Без шагов через файлы.

Сейчас несколько часов разбирался. Пришлось заинстолить несколько package'ей.
Прога то скомпилилась, только при открытии pdf'а у неё исключение smile
Какая то лажа с кодингом....

Вроде не оффоп smile
Буду рад любой помощи smile

Автор: Domestic Cat 4.12.2004, 04:14
Щас стяну посмотрю. Может прицепишь свой код чтоб проще было? smile

Автор: sergejzr 4.12.2004, 04:32
Там ещё надо ant, lucen, log4j без них не пашет smile

Файл с main: OCGui.OCApp.java

Я взял их класс ExtractText и сделал свой InternalExtractText (Он в прицепе src.org.pdfbox)
А их main переделал на функцию createPDF. вызывается она в ESReader: строка 45.


Нужно создать папку (у меня D:\storage) в которой будут pdf'ы лежать. Он оттуда считывает.

http://www.iwi-iuk.org:8081/pr/OClustering.zip
Добавлено @ 04:37
Только много времени не трать на это. В конце концов если что придётся через файлы и екстернал конверторы гонять...

Автор: sergejzr 4.12.2004, 04:59
Ну впринципе можно ещё со stderr забирать.
Или на крайняк файл в памяти smile

Сам по себе либ прекрасно работает smile

Всё smile я здаюсь, сорри. Засыпаю перед компом...
Спасибо smile

Автор: Domestic Cat 4.12.2004, 05:11
пропустил про ант/lucene/и пр smile

А какой иксепшн и на какой строке? (я не запускал, смотрю пока smile)
Добавлено @ 05:21
Цитата(sergej @ 3.12.2004, 19:59)
Всё smile я здаюсь, сорри. Засыпаю перед компом...
Спасибо smile


Извиняюсь smile
В общем, если с консоли как в ридми написано, працюе, то и у тебя должно (на первый взгляд) работать при условии что getLocation не возвращает чегонибудь нехорошего, типа пути к файлу но без имени файла.
Жду иксепшн smile

Автор: sergejzr 4.12.2004, 12:28
С ексепшенами разобрался smile Сейчас поставил jar'ы.
Просто хотелось бы метод, забирающий стринг из pdf.

А если я беру их main, делаю нормальный класс,то он говорит мне теперь, "cannot resolve decrypt(), load()". Я така понимаю, там видимость protected.

Может всё таки можно как нибудь "по нормальному" smile?

Вот проект - заготовка он попонятней будет smile
http://www.iwi-iuk.org:8081/pr/mypdfbox.zip

Автор: Domestic Cat 4.12.2004, 16:06
Цитата(sergej @ 4.12.2004, 03:28)

А если я беру их main, делаю нормальный класс,то он говорит мне теперь, "cannot resolve decrypt(), load()". Я така понимаю, там видимость protected.


Не понимаю smile Можно сам иксепшн и в каком классе он появляется?

Автор: sergejzr 4.12.2004, 16:16
smile Я разобрался с иксепшенами smile
Он просто не все PDF'ы читает к сожалению.
Ну с этим ничего не поделаешь... Они обещали в документации дальше развиваться smile

У меня осталась лишь проблема с генерацией "файла посредника" smile
Попытки написать самому безуспешны. Мне недоступна видимость всех нужных классов.
Работать нормально получилось только непосредственно с ExtractText.main().

Да ладно, фиг с ним smileНе хочу занимать твоё время smile
накорвертирую заранее техтовых файлов, и буду их программно читать smile

В любом случае спасибо smile

Автор: Domestic Cat 4.12.2004, 16:36
Цитата(sergej @ 4.12.2004, 07:16)
Да ладно, фиг с ним smileНе хочу занимать твоё время smile
накорвертирую заранее техтовых файлов, и буду их программно читать smile


Можно достаточно просто переделать этот самый ExstractText так что он будет давать Стринг, в котором сразу можно искать че-нибудь. После того как документ был
Код

try
{
       document.decrypt( password );
}


нужно будет добавить
Код

String text = stripper.getText(document);

ну и работу со стримами поубирать smile

Автор: sergejzr 4.12.2004, 16:53
Я так и пробовал...

В том то и дело, что новый ExstractText должен лежать в том же месте, что и старый. А этого я в jar'e сделать не могу smile
Иначе видимости не хватает smile
PDocument.load() он не видит, поэтому pdf даже не заряжается....


Автор: Domestic Cat 4.12.2004, 16:57
Цитата(sergej @ 4.12.2004, 07:53)
PDocument.load() он не видит, поэтому pdf даже не заряжается....

Не может быть, т .к. прототип метода такой:

Код

public static PDDocument load(File file) throws IOException

public static PDDocument load(InputStream input) throws IOException

- паблик, и видеть твой класс его должен smile Может в чем другом дело?

Автор: sergejzr 4.12.2004, 17:20
Сейчас пробую ещё раз smile
Он упрямо говорит, чтот таких методов нет smile

http://www.iwi-iuk.org:8081/pr/cluster.zip

Автор: Domestic Cat 4.12.2004, 20:15
Запости лучше сам иксепшн, без него не понятно smile

Автор: sergejzr 4.12.2004, 20:21
Нету эксепшена больше smile

Просто не компилирует, когда пытаюсь вызвать метод PDDocument.load();

Автор: Domestic Cat 4.12.2004, 20:32
аа, ну тогда че он говорит ина какую строку?

Автор: sergejzr 4.12.2004, 20:40
Да я уже всё черз файлы стал делать smile
У меня задача вообще в кластеринге этих документов, так что я не могу на месте долго стоять smile

А говорил он "InternalExtractText.java cannot resolve PDocument.decrypt()"
И с load() то же самое.

Я понимаю, что это невозможно, так как функция обьявлена паблик smile Но тем не менее это факт.
Возможно в jar'e она по другому обьявлена. я не знаю....

Автор: Domestic Cat 4.12.2004, 20:59
smile smile
просто load не знает что делать со String, ему нужен File

Автор: sergejzr 4.12.2004, 22:06
Нет, не хочет не File, не String. Боралнд даже в подсказке не имеет метода load smile
Цитата
"InternalExtractText.java": cannot resolve symbol: method load (java.io.File)in class org.pdfbox.pdmodel.PDDocument at line 173, column 35


Автор: Domestic Cat 4.12.2004, 22:19
Странно, в сорце метод load(String) есть, и паблик он smile А вообще он видит PDDocument ?

Автор: sergejzr 9.12.2004, 02:49
Видит, как ни странно...
http://www.iwi-iuk.org:8081/pr/cluster.zip

Вот мой проект.
Файл с main: OCGui.OCApp.java
Посмотри сам, елси хочешь smile

Автор: Domestic Cat 9.12.2004, 07:12
Ну у меня все скомпилилось, правда на депрекейшн поругалось (Java 1.5). Запустил я твой мейн, нефига не понял чего там делать, потому просто дописал мейн в InternalTextExtractor или как его там, и перевел пдф-ку в текст (лог4j там страшно ругается, его вообще убрать надо).
Так что все работает.

Скорее всего у тебя на CLASSPATH не положены все нужные jar'ы. Попробуй их всех (из PDFBox/lib , PDFBox/external) положить в твояЯва/jre/lib/ext/ и скомпилить smile

ПС Как тебе такой текст для тега вывода с консоли?

Автор: sergejzr 11.12.2004, 03:44
Цитата(Domestic @ 9.12.2004, 06:12)
Как тебе такой текст для тега вывода с консоли?

Как немного разгребу с делами, попробую добавить smile

Автор: polosatij 12.12.2004, 19:13
Цитата(Domestic @ 2.12.2004, 16:18)
http://www.pdfbox.org/


млин.. не могу скачать библиотеку smile
может кто здесь её положит?
Добавлено @ 19:14
постоянная ошибка.. нет файла на сервере.. уже столько файлов перекликал..
Добавлено @ 19:15
что значит: The BSD License ?

можно её использовать в комерческих целях бесплатно? smile

Автор: sergejzr 12.12.2004, 19:27
Качайте кому надо до вечера smile Потом уберу.
http://www.iwi-iuk.org:8081/pr/PDFBox-0.6.6.zip

Автор: polosatij 12.12.2004, 19:49
Цитата(sergej @ 12.12.2004, 19:27)
Качайте кому надо до вечера  Потом уберу.



паси smile

Автор: Zandr 24.12.2004, 09:23
Нада создать PDF с табличками, нумерацией страничек, хедерами, футерами и главное - формирование активного оглавления. Потянет? Есть смысл разбираться?

Автор: Domestic Cat 24.12.2004, 10:00
Не юзал, не знаю. Вроде как http://www.dynamicpdf.com/Java_Dynamic_PDF_Components_Libraries.csp?LF=GOOtxtGJV и http://www.lowagie.com/iText/ такое могут делать. Первый платный, второй - опен сорс.

Автор: Zandr 27.12.2004, 12:13
На платный денег нет smile Буду копать второй. Пасиб

Автор: Domestic Cat 27.12.2004, 17:19
Они по моему там триал период дают на Dynamic PDF.

Автор: Hidrag 10.9.2007, 15:36
а с помощью PDFBox можно разорвать пдфник на два куска и сохранить как два пдф файла?

Автор: Maksym 10.9.2007, 16:13
Hidrag
С помощью http://www.lowagie.com/iText/ точно можно.

Автор: sergejzr 10.9.2007, 16:16
Форматирование при этом пропадёт? 

Автор: Maksym 10.9.2007, 16:30
sergejzr
iText представляет pdf-ник в виде объектной модели. Под разрезать я имел в виду: прочитать pdf, затем создать два новых pdf, скопировать в них нужные страницы и записать их. В ходе такого преобразования файл pdf -> iText objects -> файлы pdf что-то может и попортиться. Но, вообще, библиотека достаточно качественная и у меня проблем не было, все поддерживалось.

Автор: Bozo 10.9.2007, 21:47
IDRsolutions has released http://www.jpedal.org/, a pure Java library for extracting content from PDF files and rasterizing them.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)