Лучший способ извлечь из PDF только жирный текст - PullRequest
3 голосов
/ 01 октября 2010

iTextSharp - отличный инструмент, я могу использовать PdfTextExtractor.GetTextFromPage(reader, iPage) + " ";, и он отлично работает, но есть ли способ извлечь из PDF только жирный текст (например, заголовки), а не все?Любое решение полезно независимо от языка программирования.Спасибо

Ответы [ 2 ]

3 голосов
/ 16 октября 2010

Изнутри iText вам необходимо использовать классы из пакета com.itextpdf.text.pdf.parser.

В частности, вам нужно использовать PdfTextExtractor с пользовательским TextExtractionStrategy, который проверяет шрифтназвание.Жирные шрифты, как правило, имеют в своем названии «жирный» мир.

Потенциальные проблемы: 1) Не все, что выглядит как текст, отображается шрифтами и буквами.Это могут быть пути или растровое изображение.Единственный способ извлечь такой текст с помощью OCR, и нет способа получить информацию о шрифте.2) Шрифтовая кодировка.Байты, которые отображаются на глифы, которые вы видите в PDF, могут не иметь карты из этих байтов в фактическую информацию о символах.3) Не весь текст, выделенный жирным шрифтом, выполнен жирным шрифтом.Некоторый жирный текст создается путем поглаживания контура текста довольно тонкой линией, а также обычной заливки.В этом случае режим визуализации текста будет установлен на «обводка и заливка» вместо обычного «заливка».Это довольно редко, но это случается время от времени.

Простой способ проверить наличие проблем 1 и 2 - попытаться скопировать и вставить текст в Reader / Acrobat.Если вы не можете выбрать его, это почти наверняка пути или изображения.Если вы можете выбрать его, но символы вставляются как случайный мусор при вставке, тогда iText будет иметь тот же мусор.

Проблема 3 не так сложно проверить на программном уровне, хотя вы должны справиться с этимна индивидуальной основе.Вам нужно вызвать TextRenderInfo.getTextRenderMode ().0 - это заполнение (стандартный способ работы), а 2 - «обводка и заливка».

Таким образом, ваша TextExtractionStrategy может заглушить beginTextBlock, endTextBlock, renderImage и getResultantText.В вашей реализации renderText вы должны будете проверить имя шрифта (для "жирного шрифта", без учета регистра) и режим отображения текста.Если это так, то это часть ваших заголовков.

Все это предполагает, что вы имеете дело с произвольными файлами PDF.Если все ваши PDF-файлы взяты из одного источника, вы можете начать обрезку углов.Я оставлю это как упражнение для читателя.

1 голос
/ 01 октября 2010

Одна из ваших лучших ставок на эту работу - это TET от pdflib.com с возможностью извлечения в формат TETML.Доступно для Windows, Mac OS X, Linux, Solaris, AIX, HP-UX ...

Я не уверен, действительно ли он распознает "заголовки" как таковые (потому что PDF не знает много о структурные разметки, только визуальные ), но они, безусловно, могут сказать вам точное положение и шрифт , используемый каждой строкой символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...