Чтение файла PDF для получения табличных данных в структурированном формате,

Мне нужно прочитать файл PDF, который содержит таблицу с несколькими столбцами. Используя iTextSharp, я могу прочитать файл, но получаю кучу неформатированного текста. Я не могу структурировать данные, чтобы их можно было вставить в базу данных.

Какие-либо предложения?


person asyncwait    schedule 25.11.2009    source источник
comment
Как правило, чтение данных из PDF-файлов затруднено и чревато ошибками. Когда вы говорите, что я могу прочитать файл, что именно вы имеете в виду? Вы используете класс PdfReader?   -  person Eric Pohl    schedule 25.11.2009
comment
да. Я использую PdfReader для чтения файла. Но совсем рассеялся. Я не смог правильно прочитать его, так как данные находятся в таблице.   -  person asyncwait    schedule 25.11.2009


Ответы (3)


Если это не структурированный текст, нет тегов для отображения столбцов. Такие инструменты, как PdfBox, делают «догадки», пытаясь извлечь таблицу.

На http://pdf.jpedal.org/java-pdf-blog/bid/12670/PDF-text

person mark stephens    schedule 26.11.2009

Если я правильно понимаю, текст в формате PDF хранится позиционно, поэтому он не имеет понятия строк или столбцов. Это означает, что вы должны использовать эвристику, основанную на «вероятности», что вы читаете из другого столбца.

Вы можете попробовать сделать это, сравнив расстояние между словами. (Я не знаком с интерфейсом ITextSharp, поэтому, пожалуйста, простите меня, если я упоминаю то, на что он не способен... В основном я знаком с pdfNet.

Другая идея, которая только что пришла мне в голову, заключается в том, что если в тексте есть визуальные подсказки, такие как вертикальные линии, разделяющие столбцы. Если это так, вы должны придумать эвристику, чтобы определить, находится ли текст слева или справа от строк столбца.

...

Однако лучше всего, если возможно, получить данные в более удобном для базы данных формате. Это, вероятно, избавит вас от душевных страданий в долгосрочной перспективе.

-- Джейсон

person Jason D    schedule 26.11.2009

Я прихожу к выводу, что нет прямого способа сделать это. По крайней мере, чтение данных в табличном формате. Я попробовал предложения, предоставленные Марком, но это кажется невыполнимым в соответствии с моим требованием.

person asyncwait    schedule 02.12.2009