Как запросить размер страницы PDF из командной строки?

35

Для сценариев мне нужно получить размеры страницы PDF-файла (в мм).

pdfinfo просто печатает его в 'pts', например:

Page size:      624 x 312 pts

Что я должен использовать?

Или, в любом случае, какая единица измерения 'pts' - на случай, если я захочу их преобразовать ...

maxschlepzig
источник
2
Point на Википедию
Мат
Какую страницу вы хотели размер? Легальный размер внешнего покрытия? Размер листовки "эта страница намеренно пуста"? Буква размером в две страницы?
Игнасио Васкес-Абрамс

Ответы:

31

Единица 'pts', используемая pdfinfoсимволом, обозначает точку PostScript. Точка PostScript определяется в дюймах и разрешением 72 точки на дюйм:

В конце 1980-х и в 1990-е годы традиционная точка была вытеснена точкой настольной публикации (также называемой точкой PostScript), которая была определена как 72 точки на дюйм ( 1 точка = 1⁄72 дюйма = 25.4⁄72 мм = 0.352 7 мм [ 0,3528 мм ]).

В руководстве gvсодержится список распространенных форматов бумаги, указанных в точках PostScript.

maxschlepzig
источник
1
на общих форматах бумаги: pdfinfoиногда дает мне формат бумаги (например Page size: 595.28 x 841.89 pts (A4)) - интересно, если он делает это для списка размеров страниц, о которых он знает?
njsg
2
Точка на самом деле равна 0,352777777 ... мм, поэтому 0,3528 мм - более близкое приближение.
CJM
15

Не самый простой способ, но данный, imagemagickи unitsвы также можете использовать

$ identify -verbose some.pdf | grep "Print size" 
Print size: 8.26389x11.6944

найти размер страницы в дюймах (это может дать несколько результатов, если PDF использует разные размеры), а затем преобразовать числа следующим образом:

$ units -t '8.26389 inch' 'mm'
  209.90281

Это означает, что 8,26 дюйма - это 209,9 мм (для этого я использовал формат А4 PDF).

Аксель Кнауф
источник
1
Когда я identifyPDF на OS X, я не получаю вывод.
Дэвид Моулз
очень поздно, но identifyтребует ImageMagick
обезврежено
6

Наткнулся на ту же проблему и пришел к следующему решению. Я не попал в документацию о том, как создаются PDF-файлы, я просто сравнил два пустых PDF-файла с разными размерами страниц.

Похоже, PDF-файлы имеют всевозможные атрибуты, встроенные между «<<» и «>>». Я обнаружил, что информация о размере страницы находится в виде простого текста и может быть найдена с помощью простого поиска регулярных выражений.

Это может или не может быть верно для всех PDF-файлов, но это работало на все, что я мог найти из разных источников.

Соответствующая часть может выглядеть как любая из них для страницы формата А4:

/MediaBox [0 0 595 842]
/MediaBox[0 0 595 842]
/MediaBox[ 0 0 595.32 841.92]

Это означает [0 0 width height], поэтому вот мое супер хромое, но рабочее решение, чтобы извлечь это:

cat test.pdf | egrep -ao "/MediaBox ?\[ ?[0-9]+ [0-9]+ [0-9]+(\.[0-9]+)? [0-9]+(\.[0-9]+)?\]" | head -1

Просто измените test.pdf на ваш файл.

Петр Ракманьи
источник
1
обратите внимание, что возвращаемые значения находятся в «точках», а не в миллиметрах, пикселях или дюймах
умолчанию
0

Я использовал ответ maxchlepzigs, чтобы вычислить мм напрямую:

$ pdfinfo test.pdf | grep "Page size" | grep -Eo '[-+]?[0-9]*\.?[0-9]+' | awk -v x=0.3528 '{print $1*x}'

это также работает с ответом Алекса Кнауфа, но для идентификации требуется гораздо больше времени, чем для pdfinfo, и требуется imagemagick, однако, положительным моментом является то, что вы можете использовать это для нескольких файлов (то есть, перейдя в каталог и используя *.pdf):

$ identify -verbose some.pdf | grep "Print size" | grep -Eo '[-+]?[0-9]*\.?[0-9]+' | awk -v x=25.4 '{print $1*x}'

Вторая grepкоманда получает значения двух точек / дюйм. Я вполне уверен, что вы можете пропустить регулярное выражение grep и сделать это напрямую с помощью awk, но я не мог понять это.

defuzed
источник