В настоящее время я пытаюсь создать анализатор таблиц файлов PDF, в котором пользователи могут определять столбчатые столбцы в файле PDF, а затем извлекать текст PDF в «координатах столбца».
Чтобы извлечьтекст всего файла PDF, я использую pdftotext как: (пример invoice.pdf файл)
pdftotext -f 1 -l 1 invoice.pdf -layout -l
Генерирует:
Invoice #100
Document Date: 26/05 - 2019
www.domain.com
Чтобы извлечь определенную часть страницы (в соответствии с координатами моего столбца), я использую:
pdftotext -f 1 -l 1 -x 0 -y 100 -W 200 -H 300 invoice.pdf -layout -
Какие координаты для всего после:
Invoice #100
Document Date:
Итак, вышеприведенная команда генерирует:
26/05 - 2019
www.domain.com
Выше работает, как вы можете видеть.Он успешно извлекает текст из моего файла PDF (а также текст в координатах).
Форматирование сохраняется, если я запускаю команду pdftotext
без -x -y -W -H
координат, ноон не сохраняет весь формат документа, если я использую координаты (что имеет смысл, поскольку он смотрит только на определенную часть страницы).
Однако я пытаюсь создать анализатор текста длявывод текста, и для этого мне нужно сохранить форматирование.
Как вы можете видеть в моем исходном файле PDF, строка 26/05 - 2019
фактически начинается со строки 2 - но когда я извлекаю текст, используя координаты, выходные данные показывают его в 1-й строке.
Мне было интересно, есть ли способ обойти это?
Я думал что-то вроде сравнения исходного текстового вывода с выводом, имеющим координаты, а затем только берет свойства форматирования (разрывы строк) из исходного текстового вывода и добавляет егоко второму текстовому выводу.
В настоящее время этот код генерирует вывод в моем скрипте Python:
column = defaultdict(list)
COLUMNS = [...]
for i, col in enumerate(COLUMNS):
cmd = ['pdftotext', ...]
proc = subprocess.Popen(
cmd, stdout=subprocess.PIPE, bufsize=0, text=True)
out, err = proc.communicate()
for line in out.splitlines():
column[0].append({"row": str(line)})
, который в основном просто добавляет каждую строку в список.