Я использовал расширенную версию LocationTextExtractionStrategy
для извлечения связных текстов pdf и их положений/размеров. Я сделал это, используя locationalResult
. Это работало хорошо, пока я не протестировал pdf, содержащий тексты с другим шрифтом (ttf). Внезапно эти тексты разделяются на отдельные символы или небольшие фрагменты.
Эта проблема возникает из-за неправильных ожиданий относительно содержимого переменной частного члена .
Этот список экземпляров TextChunk
содержит фрагменты текста, которые были перенаправлены в стратегию из ракурса синтаксического анализа (или, вероятно, по мере того, как они были предварительно обработаны некоторым классом фильтров), и фреймворк пересылает каждую отдельную строку, встречающуюся в контенте поток отдельно.
Таким образом, если, по-видимому, связанное слово в потоке контента фактически нарисовано с использованием нескольких строк, вы получаете для него несколько экземпляров TextChunk
.
На самом деле существует некоторый «интеллект» в методе getResultantText
, который правильно соединяет эти куски, добавляя пространство, где это необходимо, и так далее.
В случае Вашего документа, «ДЕТАЛЬ» обычно рисуется так:
[<0027> -0.2<00280037> 0.2<0024002c> 0.2<002f> -0.2<0003>] TJ
Как вы видите, есть небольшие точки вставки текста перемещается между «D» и «Е», «Т» и " A ',' I 'и' L ', и' L 'и' '. (Такие мини-ходы обычно представляют кернинг.) Таким образом, вы получите индивидуальные TextChunk
экземпляров для 'D', 'ET', 'AI' и 'L'.
Следует признать, что член LocationTextExtractionStrategy.locationalResult
не очень хорошо документирован; но поскольку это частный член, это ИМХО простительно.
Это это работало хорошо для многих документов из-за многие PDF создателей не прилагая кернинг и просто рисунок, связанный текст одиночных строковые объектов.
The HorizontalTextExtractionStrategy
происходит от LocationTextExtractionStrategy
и в основном отличается от него, как он организует TextChunk
экземпляры в одной строке. Таким образом, вы увидите такую же фрагментацию здесь.
Есть ли другой способ извлечь связные тексты из PDF?
Если вы хотите «подключенные тексты», как в «объектах атомной строки в потоке контента», вы уже имеете их.
Если вы хотите «связные тексты», как в «визуально связанных текстов, независимо от того, где составные буквы рисуются в потоке контента», вы должны склеить эти TextChunk
экземпляры вместе как LocationTextExtractionStrategy
и HorizontalTextExtractionStrategy
делать в getResultantText
в комбинации с методами сравнения в их соответствующих реализациях TextChunkLocationDefaultImp
и HorizontalTextChunkLocation
.
Использование термина «связанные тексты» Я имел в виду «объекты атомной струны в контенте», но, как вы можете прочитать в моем ответе, у меня их уже нет. Поэтому поэтому не принимал в качестве ответа. Спасибо вам за хорошее объяснение! – seeb
@seeb. Строка в формате pdf ограничена угловыми или круглыми скобками ('<...>' или '(...)'), которые я называю «объектами атомной струны». Кажется, вы ищете «аргумент инструкции * для рисования одиночного текста» (который в случае ** TJ ** представляет собой массив строк и чисел). В зависимости от фактических чисел в этом массиве составляющие строки могут быть отрисованы довольно далеко друг от друга. – mkl
Да, это именно то, что я ищу. Извините за запутанные термины, которые я использовал. Я не знаком с терминологией pdf. – seeb