Текст в PDF документах абсолютно позиционирован. Таким образом, вместо слов , строк и абзацев , только один имеет абсолютно позиционированные символы .
Допустим, у вас есть параграф:
Neque Porro Quisquam Est Qui Dolorem Ipsum Quia Dolor Sit Amet, Concetetur, Adipisci Velit
Грубо говоря, в файле PDF он будет представлен в виде символов N
в некоторой позиции, e
немного справа от него, q
, u
, e
больше вправо и т. Д.
PDFBox пытается угадать , как символы создают слова, строки и абзацы. Таким образом, он будет искать множество символов в примерно одинаковом вертикальном положении, для групп символов, которые находятся рядом друг с другом и похожи, чтобы попытаться найти то, что вам нужно. Это достигается путем извлечения текста со всей страницы и последующей обработки его символ за символом для создания текста (он также может попытаться извлечь текст только из одной прямоугольной области внутри страницы). См. Соответствующий класс PDFTextStripper (или PDFTextStripperByArea ). Об использовании см. ExtractText.java
в источниках PDFBox.
Это означает, что вы не можете легко извлечь абзацы с помощью PDFBox. Это также означает, что PDFBox может и иногда будет отсутствовать при извлечении текста (существует множество очень разных PDF-документов).
Что вы можете сделать - это извлечь текст со всей страницы, а затем попытаться найти свой абзац, ищущий этот текст. Регулярные выражения обычно хорошо подходят для таких задач (доступны в Java через классы Pattern и Matcher или удобные методы в классе String ).