У меня есть большая коллекция документов, отсканированных в формате PDF, и я хочу написать сценарий оболочки, который преобразует каждый документ в формат DjVu . Некоторые документы были отсканированы с разрешением 200 т / д, некоторые с разрешением 300 т / д, а некоторые - с разрешением 600 т / д. Поскольку DjVu является пиксельным форматом, я хочу быть уверенным, что в целевом файле DjVu используется то же разрешение, которое использовалось для сканирования.
Кто-нибудь знает, какую программу я могу запустить или как я могу написать программу, чтобы определить, какое разрешение использовалось для создания отсканированного PDF? (Количество пикселей может также работать, так как почти все документы имеют размер 8,5 на 11 дюймов.)
Разъяснение после ответов: я знаю о трудностях, отмеченных Бретоном, и я готов признать, что проблема в целом некорректна, но я не спрашиваю о общем PDF документы. Мои конкретные документы вышли из сканера. Они содержат одно отсканированное изображение на странице, одинаковое разрешение на каждой странице. Если я конвертирую PDF в PostScript, я могу легко передвигаться и легко находить размеры в пикселях; Я мог бы, вероятно, найти размеры изображения с большим количеством работы. И в случае крайней необходимости я мог бы изменить стек словарей, который использует gs
; давно я написал интерпретатор для PostScript уровня 1.
Все это то, чего я пытаюсь избежать.
Благодаря полученной помощи я разместил ответ ниже:
- Извлеките ограничивающую рамку из PDF, используя
identify
, взяв только выходные данные для первой страницы и поняв, что единицами измерения будут точки PostScript, из которых от 72 до дюйма.
- Извлечение изображений с первой страницы с помощью
pdfimages
.
- Получить высоту и ширину изображения. На этот раз
identify
даст количество пикселей.
- Добавьте общее количество областей изображений, чтобы получить количество точек в квадрате.
- Чтобы получить разрешение, вычислите области ограничительной рамки в квадратах в дюймах, разделите точки в квадрате на квадратные дюймы, возьмите квадратный корень и округлите до ближайшего кратного 10.
Полный ответ со сценарием ниже. Я использую его в живом огне, и он прекрасно работает. Спасибо Арлекину за pdfimages
и Спиффеа за оповещение о нескольких изображениях на странице (это редко, но я нашел некоторые).