Решение вопроса вынесенного в заголовок достигается утилитой pdftotext. pdftotext — это утилита командной строки, которая преобразует PDF-файлы в обычный текст. Она имеет много опций, включая возможность указать диапазон страниц для преобразования, сохранить или нет исходную разметку текста, возможость задать окончания строк (unix, dos или mac) и даже умеет работать с PDF-файлами, защищенными паролем.
pdftotext является частью пакета poppler / poppler-utils / poppler-tools (в зависимости от используемого дистрибутива Linux). так что для получения утилиты вам потребуется установить весь пакет.
Установка
Debian, Ubuntu, Linux Mint и другие дистрибутивы Linux на основе Debian / Ubuntu:
sudo apt install poppler-utils
Fedora:
sudo dnf install poppler-utils
openSUSE:
sudo zypper install poppler-tools
Arch Linux:
sudo pacman -S poppler
В других дистрибутивах Linux используйте менеджер пакетов для установки пакета poppler / poppler-utils.
Использование
Теперь, когда пакет установлен, вы можете преобразовать PDF-файл в обычный текст и сохранить его макет (я рекомендую использовать параметр -layout для сохранения исходной разметки, но вы можете попробовать и без него) с помощью:
pdftotext -layout input.pdf output.txt
Где:
- input.pdf — путь до вашего PDF-файла,
- output.txt — путь до файла где будет сохранен результат. Если выходной текстовый файл не указан, pdftotext будет называть файл с тем же именем, что и исходный файл PDF.
- Опция —layout будет сохранять форматирование текста, даже если он изначально был сверстан в несколько колонок.
Что если вы хотите конвертировать в текст лишь диапазон страниц PDF, а не весь файл? Используйте указание диапазона для конвертирования через опции -f (номер начальной страницы для конвертирования) и -l (номер последней страницы для конвертирования), например:
pdftotext -layout -f M -l N input.pdf
Где: M — номер страницы начала конвертирования, N — номер страницы окончания конвертирования, input.pdf — имя файла для преобразования в текст.
Хотите указать какие символы конца строки Mac, DOS или Unix использовать в получаемом тексте? Вы можете указать это, используя функцию -eol, затем mac, dos или unix. Например. для получения файла с символами конца строки Unix:
pdftotext -layout -eol unix input.pdf
Если вы не хотите вставлять разрывы страниц между страницами, добавьте опцию -nopgbrk:
pdftotext -layout nopgbrk input.pdf
Хотите конвертировать все файлы PDF внутри директории в текстовые файлы? pdftotext не поддерживает пакетное преобразование PDF в текст (и pdftotext * .pdf не работает), но вы можете это сделать при помощи цикла Bash:
for file in *.pdf; do pdftotext -layout "$file"; done
Для получения дополнительных опций запустите man pdftotext и pdftotext —help.