Вы должны иметь возможность задать прямоугольник выбора на pageSize/MediaBox
страницы и получить весь текст.
Я говорю, потому что прежде чем вы начинаете задаваться вопросом, почему вы удивляетесь выводам poppler_page_get_text
, вы должны знать, как текст выкладывается на странице. Вся графика размещается на странице, используя программу, выраженную в нотации после исправления. Чтобы сделать страницу, эта программа выполняется на пустой странице.
Операции в программе могут включать, меняя цвета, положение, текущую матрицу преобразования, линии рисования, кривые Безье и так далее. Текст выложен рядом текстовых операторов, которые всегда заключены в скобки по BT (начало текста) и ET (конец текста). Как и где текст размещается на странице, по собственному усмотрению программного обеспечения, которое генерирует PDF. Например, для драйверов печати код отвечает на вызовы GDI для DrawString
и переводит их в операции рисования текста.
Если вам повезет, текст на странице выложен в разумном порядке с использованием разумного шрифта, но многие программы, которые генерируют PDF, не так любезны. Psroff
, например, понравилось сначала разместить весь простой текст, затем курсивный текст, затем полужирный текст. Слова могут быть или не быть помещены в порядке чтения. Шрифты могут быть перекодированы так, чтобы 'a'
отобразился на '{'
или что угодно. Тогда у вас могут быть лигатуры, где несколько символов заменяются одиночными глифами - наиболее распространенными являются ae
, oe
, fi
, fl
и ffl
.
Со всем этим на месте процесс извлечения текста определенно нетривиальен, поэтому не удивляйтесь, если вы видите результаты низкого качества при извлечении текста.
Раньше я работал над инструментами извлечения текста в Acrobat 1.0 и 2.0 - это настоящая проблема, чтобы получить право.
Исходный код poppler включает в себя две простые примеры программ в './cpp/tests', которые иллюстрируют всю функциональность. – Jeroen