Проблема с pdffonts
в том, что иногда он ничего не возвращает, например:
name type emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
И иногда это возвращает:
name type emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
[none] Type 3 yes no no 266 0
[none] Type 3 yes no no 9 0
[none] Type 3 yes no no 297 0
[none] Type 3 yes no no 341 0
[none] Type 3 yes no no 381 0
[none] Type 3 yes no no 394 0
[none] Type 3 yes no no 428 0
[none] Type 3 yes no no 441 0
[none] Type 3 yes no no 451 0
[none] Type 3 yes no no 480 0
[none] Type 3 yes no no 492 0
[none] Type 3 yes no no 510 0
[none] Type 3 yes no no 524 0
[none] Type 3 yes no no 560 0
[none] Type 3 yes no no 573 0
[none] Type 3 yes no no 584 0
[none] Type 3 yes no no 593 0
[none] Type 3 yes no no 601 0
[none] Type 3 yes no no 644 0
Имея это в виду, давайте напишем небольшой текстовый инструмент, чтобы получить все шрифты из pdf:
pdffonts my-doc.pdf | tail -n +3 | cut -d' ' -f1 | sort | uniq
Если ваш pdf не OCR, он ничего не выведет или [none]
.
Если вы хотите, чтобы он работал быстрее, используйте флаг -l
только для анализа, скажем, первых 5 страниц:
pdffonts -l 5 my-doc.pdf | tail -n +3 | cut -d' ' -f1 | sort | uniq
Теперь оберните его в скрипт bash, например is-pdf-ocred.sh
#!/bin/bash
MYFONTS=$(pdffonts -l 5 "$1" | tail -n +3 | cut -d' ' -f1 | sort | uniq)
if [ "$MYFONTS" = '' ] || [ "$MYFONTS" = '[none]' ]; then
echo "NOT OCR'ed: $1"
else
echo "$1 is OCR'ed."
fi
Наконец, мы хотим иметь возможность искать PDF-файлы. Команда find
не знает о ваших псевдонимах или функциях в .bashrc
, поэтому нам нужно указать путь к сценарию.
Запустите его в выбранном вами каталоге так:
find . -type f -name "*.pdf" -exec /path/to/my/script/is-pdf-ocred.sh '{}' \;
Я предполагаю, что pdf файлы заканчиваются на .pdf
, хотя это не всегда предположение, которое вы можете сделать.
Вы, вероятно, захотите передать его в меньший поток или вывести в текстовый файл:
find . -type f -name "*.pdf" -exec /path/to/my/script/is-pdf-ocred.sh '{}' \; | less
find . -type f -name "*.pdf" -exec /path/to/my/script/is-pdf-ocred.sh '{}' \; > pdfs.txt
Мне удалось сделать около 200 PDF-файлов за чуть более 10 секунд, используя флаг -l 5
.