iText7 имеет надстройку pdf2Data , которая может легко помочь вам в достижении вашей цели (и помочь в других случаях извлечения данных).
Допустим, вы хотите извлечь позиции слова Header
. Мы идем в демонстрационное приложение https://pdf2data.online, загружаем наш шаблон (любой файл, содержащий слова, которые вы хотите извлечь), и идем в редактор полей данных, который выглядит следующим образом:
![pdf2Data data field editor](https://i.stack.imgur.com/AZbsF.png)
Теперь вы можете добавить поле данных с селектором, который бы выбирал интересующие вас данные. В этом случае вы можете использовать селектор регулярных выражений, который, как правило, очень гибкий, но в нашем случае настройки довольно просты:
![data field configuration](https://i.stack.imgur.com/OxII7.png)
Вы можете видеть, что приложение-редактор выделяет все вхождения слова, которое мы ищем. Теперь давайте вернемся к первому шагу (в правом верхнем углу редактора есть значок, чтобы вернуться к демонстрации) и загрузим наш шаблон (ссылка на нижнюю часть значка, соответствующего загруженному файлу).
Теперь вы можете просмотреть информацию о том, как включить pdf2Data в ваш проект, на этой странице: https://pdf2data.online/gettingStarted, примерно код, который вам нужен, следующий:
LicenseKey.loadLicenseFile("license.xml");
Template template = Pdf2DataExtractor.parseTemplateFromPDF("Template.pdf");
Pdf2DataExtractor extractor = new Pdf2DataExtractor(template);
ParsingResult result = extractor.recognize("toParse.pdf");
for (ResultElement element : result.getResults("Headers")) {
Rectangle bbox = element.getBbox();
int page = element.getPage();
System.out.println(MessageFormat.format("Coordinates on page {0}: [{1}, {2}, {3}, {4}]",
page, bbox.getX(), bbox.getY(), bbox.getX() + bbox.getWidth(), bbox.getY() + bbox.getHeight()));
}
Пример вывода:
Coordinates on page 1: [38.5, 788.346, 77.848, 799.446]
Coordinates on page 1: [123.05, 788.346, 162.398, 799.446]
Coordinates on page 1: [207.6, 788.346, 246.948, 799.446]
Coordinates on page 2: [38.5, 788.346, 77.848, 799.446]
Coordinates on page 2: [123.05, 788.346, 162.398, 799.446]
Coordinates on page 2: [207.6, 788.346, 246.948, 799.446]
Надстройка pdf2Data является закрытым исходным кодом и в настоящее время доступна только по коммерческой лицензии. Конечно, вы можете перенести ваш код напрямую в iText7, и это будет еще одним решением вашей задачи, но я должен предупредить вас, что ваш код не универсален для всех сценариев, например, текст в PDF может быть написан буква за буквой, вместо написания целого слова за раз (внешний вид двух PDF-файлов может легко остаться прежним), и в этом случае прикрепленный код не будет работать. pdf2Data обрабатывает эти случаи из коробки, снимая бремя с ваших плеч.