PDF извлечение текста с координатами

Я хотел бы извлечь текст из части (используя координаты) PDF, используя Ghostscript.

Может кто-нибудь мне помочь?

Ответ 1

Да, с помощью Ghostscript вы можете извлекать текст из PDF файлов. Но нет, это не лучший инструмент для работы. И нет, вы не можете сделать это "порциями" (частями отдельных страниц). Что вы можете сделать: извлечь текст только из определенного диапазона страниц.

Во-первых: Ghostscript txtwrite устройство вывода (не очень хорошо)

 gs \
   -dBATCH \
   -dNOPAUSE \
   -sDEVICE=txtwrite \
   -dFirstPage=3 \
   -dLastPage=5 \
   -sOutputFile=- \
   /path/to/your/pdf

Это выведет весь текст, содержащийся на страницах 3-5, в стандартный вывод. Если вы хотите выводить текстовый файл, используйте

   -sOutputFile=textfilename.txt

gs Обновление:

В последних версиях Ghostscript были улучшены устройства txtwrite и исправлены ошибки. Подробнее см. последние изменения в Ghostscript (поиск txtwrite на этой странице).


Второе: Ghostscript ps2ascii.ps Утилита PostScript (лучше)

Для этого требуется загрузить последнюю версию файла ps2ascii.ps из хранилища исходного кода Ghostscript Git. Вам нужно будет конвертировать PDF в PostScript, а затем выполнить эту команду для файла PS:

gs \
  -q \
  -dNODISPLAY \
  -P- \
  -dSAFER \
  -dDELAYBIND \
  -dWRITESYSTEMDICT \
  -dSIMPLE \
   /path/to/ps2ascii.ps \
   input.ps \
  -c quit

Если параметр -dSIMPLE не определен, каждая выходная строка содержит некоторую дополнительную информацию, помимо чистого текста, о используемых шрифтах и размере шрифта.

Если вы замените этот параметр на -dCOMPLEX, вы получите дополнительную информацию об используемых цветах и изображениях.

Прочтите комментарии внутри ps2ascii.ps, чтобы узнать больше об этой утилите. Это не удобно для использования, но для меня это работало, в большинстве случаев мне это было нужно....

Третье: XPDF pdftotext Утилита CLI (удобнее, чем Ghostscript)

Более удобный способ извлечения текста: используйте pdftotext (доступно для Windows, а также для Linux/Unix или Mac OS X). Эта утилита основана на Poppler или XPDF. Вы можете попробовать эту команду:

 pdftotext \
   -f 13 \
   -l 17 \
   -layout \
   -opw supersecret \
   -upw secret \
   -eol unix \
   -nopgbrk \
   /path/to/your/pdf
   - |less

Это отобразит диапазон страниц от 13 (f первая страница) до 17 (l ast page), сохранит макет защищенного двойным паролем именованного файла PDF (используя пользователя и пароль владельца (секретный и суперсекретный), с соглашением Unix EOL, но без вставки разрывов страниц между страницами PDF, пропущенных через меньше...

pdftotext -h отображает все доступные параметры командной строки.

Конечно, оба инструмента работают только для текстовых частей PDF файлов (если они есть). Да, и математическая формула также не будет работать слишком хорошо... ;-)


pdftotext Обновление:

В последних версиях Poppler pdftotext теперь есть опции для извлечения "части (с использованием координат) страниц PDF", как и запрашивал OP. Параметры:

  • -x <int>: координата x верхнего левого угла области обрезки
  • -y <int>: координата Y левого верхнего угла области обрезки
  • -W <int>: ширина области обрезки в пикселях (по умолчанию 0)
  • -H <int>: высота области обрезки в пикселях (по умолчанию 0)

Лучше всего, если используется с параметром -layout.


Четвертое: команда MuPDF mutool draw также может извлекать текст

Кроссплатформенное приложение MuPDF с открытым исходным кодом (разработанное той же компанией, которая также разрабатывает Ghostscript) включает инструмент командной строки mutool. Чтобы извлечь текст из PDF файла с помощью этого инструмента, используйте:

mutool draw -F txt the.pdf

отправит извлеченный текст в <stdout>. Используйте -o filename.txt, чтобы записать его в файл.

Пятое: PDFLib Text Extrak Toolkit (TET) (лучше всего... но это PayWare)

TET, набор инструментов для извлечения текста из семейства продуктов pdflib, может найти координату x-y текстового содержимого в файле PDF (и многое другое). TET имеет интерфейс командной строки, и это самый мощный из всех инструментов извлечения текста, которые я знаю. (Он даже может обрабатывать лигатуры...) Цитата с их сайта:

Геометрия
TET предоставляет точные метрики для текста, такие как положение на странице, ширина глифа и направление текста. Определенные области на странице могут быть исключены или включены в извлечение текста, например, игнорировать верхние и нижние колонтитулы или поля.

По моему опыту, хотя он и не обладает самым простым интерфейсом CLI, который вы можете себе представить: после того, как вы к нему привыкли, он будет делать то, что обещает, для большинства PDF файлов вы к нему клоните...


И есть еще больше вариантов:

  1. podofotxtextract (инструмент CLI) из проекта PoDoFo (с открытым исходным кодом)
  2. calibre (обычно программа с графическим интерфейсом для работы с электронными книгами, с открытым исходным кодом) имеет параметр командной строки, который может извлекать текст из PDF файлов
  3. AbiWord (текстовый процессор с графическим интерфейсом, с открытым исходным кодом) может импортировать PDF файлы и сохранять свои файлы в формате .txt: abiword --to=txt --to-name=output.txt input.pdf

Ответ 2

Я не уверен, что GhostScript может принимать координаты, но вы можете преобразовать PDF в изображение и отправить его на движок OCR либо в виде подкадра, обрезанного из заданных координат, либо как целое изображение вместе с координатами. Некоторые OCR API принимают параметр прямоугольника для сужения области для OCR.

Посмотрите VietOCR для рабочего примера, в котором используется Tesseract в качестве механизма OCR и GhostScript в качестве конвертера PDF-to-image.

Ответ 3

Debenu Quick PDF Library может извлекать текст из определенной области на странице. Функция SetTextExtractionArea позволяет указать координаты x и y, а затем вы также можете указать ширину и высоту области.

  • Слева= Горизонтальная координата левого края области
  • Верх= вертикальная координата верхнего края области
  • Ширина= Ширина области
  • Высота= высота области

Затем функцию GetPageText можно вызвать сразу же после этого, чтобы извлечь текст из этой определенной области.

Вот пример использования С# (хотя библиотека является многоплатформенной и может использоваться со многими различными языками программирования):

DPL.LoadFromFile(@"Sample.pdf", "");
DPL.SetOrigin(1); // Sets 0,0 coordinate position to top left of page, default is bottom left
DPL.SetTextExtractionArea(35, 35, 229, 30); // Left, Top, Width, Height
string ExtractedContent = DPL.GetPageText(8);
Console.WriteLine(ExtractedContent);

Используя GetPageText, можно также вернуть только текст, расположенный в этой области, или текст, расположенный в этой области, а также информацию о текстовом шрифте, таком как имя, цвет и размер.