В коде createTokensWithoutText
, который вы скопировали из примеров PDFBox, действительно есть ошибка. Но причина того, что этот пример удаляет весь текст из вашего отсканированного PDF, заключается в том, что сканер уже удалил буквы с изображения, создал для них специальные шрифты и снова нарисовал их как текст, используя эти шрифты, поэтому пример просто делает то, что нужно предназначен для этого.
Ошибка в createTokensWithoutText
В то время как текст, показывающий операторы Tj , ' и TJ действительно имеют только один параметр, " имеет три:
a w a c string
" -
Перейдите к следующей строке и покажите текстовую строку, используя a w в качестве межстрочного интервала и a c в качестве межсимвольного интервала ( установка соответствующих параметров в текстовом состоянии). a w и a c должны быть числами, выраженными в немасштабированных единицах текста.
(ISO 32000-1 Таблица 109 - Операторы отображения текста)
Если в потоке есть операция ", следовательно, createTokensWithoutText
удаляет только строковый аргумент и оператор, но оставляет числовые параметры a w и c на месте. Это, в свою очередь, приводит к неверному набору аргументов для следующей инструкции в newTokens
.
Как сканируется пример PDF
Программное обеспечение OCR здесь не просто добавляет невидимые символы перед или позади глифов на изображении, чтобы обеспечить возможности извлечения текста (что является очень распространенным подходом). Вместо этого он фактически создал специальные шрифты из глифов на изображении, удалил глифы из изображения и нарисовал их заметно перед изображением.
Таким образом, оставшееся изображение содержит только некоторую грязь, которую программное обеспечение не связывало ни с одним глифом.
Специальные шрифты содержат следующие глифы:
Как видите, шрифты даже содержат несколько глифов для одной и той же распознанной буквы, например, для «H» здесь 9, 13 и 15.
Преимущество этого подхода состоит в том, что PDF-файлы могут работать проще, текстовые блоки могут редактироваться.
К сожалению, для вашего случая, однако, программное обеспечение OCR, похоже, знает только латинские и арабские цифры, в частности, оно не знает кириллических символов. Таким образом, он присваивает кириллические глифы наиболее сходным латинским или арабским цифрам.
Это, конечно, делает бессмысленным извлечение текста. Кроме того, некоторые зрители показывают назначенный латинский символ, используя некоторый стандартный шрифт вместо символа из специального шрифта, в частности, при маркировке текста, и текст, показанный таким образом, также не имеет смысла.
Таким образом, вам следует либо снова сканировать с отключенным оптическим распознаванием символов, либо экспортировать PDF-файлы как изображения и создавать новые PDF-файлы только из этих изображений.