Существует ли библиотека PDF для Visual Studio, которая позволяет читать отступы в PDF?

Я работаю над программой, которая пытается анализировать данные в файле PDF. Проблема в том, что нам нужно проанализировать определенный раздел PDF, отформатированный в трехуровневой иерархии: заголовок, подзаголовок, абзац. До сих пор мы использовали разрывы строк (\n), чтобы попытаться проанализировать данные, но это в значительной степени неэффективно. Даже если бы у нас были все возможные значения заголовков и подзаголовков, решение все равно не было бы идеальным, поскольку новые PDF-файлы могли бы создаваться с новыми значениями заголовков и подзаголовков.

Однако PDF-файлы создаются таким образом, что заголовок находится ближе всего к левому полю, а подзаголовок находится дальше от него, а в абзаце отступ еще больше. Мы хотели бы иметь возможность использовать отступы для идентификации строк, которые мы хотим проанализировать. Есть ли библиотека PDF для Visual Studio, которая может это сделать? Я кодирую на С#.

Ответы (2)

Файлы PDF предназначены для отображения содержимого, а не для хранения содержимого в упорядоченном виде. Файлы PDF не содержат заголовков, подзаголовков или абзацев. То, что вы видите на странице PDF в виде заголовков или абзацев, внутри файла PDF представляет собой одно и то же: некоторый текст, написанный в фиксированных позициях разными шрифтами, так что визуально у вас есть заголовки или абзацы.
Отступы, которые вы видите, не существуют как отдельные объекты в файле PDF. Отступы достигаются путем написания заголовка с координатой X, подзаголовка с координатой X + 50 и содержания абзаца с координатой X + 100 (50 и 100 — это просто фиктивные примеры).
Что вам нужно сделать, так это извлечь текстовые фрагменты, чтобы включить также текстовую позицию. Фрагменты текста упорядочиваются по строкам в зависимости от положения фрагментов текста по оси Y (фрагменты текста с одинаковым значением Y находятся в одной строке). Фрагменты текста добавляются к строке в зависимости от их возрастающей позиции по оси X. Когда у вас есть строки, вы проверяете позицию X каждой строки (позиция X первого текстового фрагмента в строке). Наименьший X представляет заголовок, следующий X представляет подзаголовок, а следующий X представляет абзац.
Компания, в которой я работаю, разрабатывает библиотеку XFINIUM.PDF , которая может помочь вам с извлечением текста. Вы должны реализовать описанную выше логику для извлеченных текстовых фрагментов.

Я предлагаю вам взглянуть на iTextSharp . Я использовал версию Java для создания, обновления и проверки файлов PDF. Лучше всего то, что он полностью поддерживается на StackExchange.