Jak zapytać o rozmiar strony pdf z wiersza poleceń?

35

Do pisania skryptów muszę uzyskać wymiary strony pliku PDF (w mm).

pdfinfo po prostu drukuje to w „pts”, np .:

Page size:      624 x 312 pts

Czego powinienem użyć?

Albo jaką jednostką jest i tak „pts” - na wypadek, gdybym chciał je przekonwertować ...

maxschlepzig
źródło
2
Punkt na Wikipedii
Mat
Jakiej strony chcesz rozmiar? Czy rozmiar zewnętrzny jest zgodny z prawem? Rozmiar ulotki „ta strona jest celowo pusta”? Podwójne strony rozmiaru litery?
Ignacio Vazquez-Abrams

Odpowiedzi:

31

Jednostka „pts” używana przez pdfinfooznacza punkt PostScript. Punkt PostScript jest zdefiniowany w calach i rozdzielczości 72 kropek na cal:

Na przełomie lat 80. i 90. tradycyjny punkt został zastąpiony przez punkt publikacji na pulpicie (zwany także punktem PostScript), który został zdefiniowany jako 72 punkty na cal ( 1 punkt = 1⁄72 cali = 25,4⁄72 mm = 0,352 ¯7 mm [≙ 0,3528 mm ]).

Podręcznik gvzawiera listę popularnych formatów papieru określonych w punktach PostScript.

maxschlepzig
źródło
1
na popularnych formatach papieru: pdfinfoczasami podaje mi format papieru (jak Page size: 595.28 x 841.89 pts (A4)) - zastanawiam się, czy to robi, jeśli chodzi o listę rozmiarów stron, o których wie?
njsg
2
Punkt wynosi w rzeczywistości 0,352777777 ... mm, więc 0,3528 mm jest bliższym przybliżeniem.
cjm
15

Nie najłatwiejszy sposób, ale podany imagemagicki unitsmożna go również użyć

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

znaleźć rozmiar strony w calach (może to dać kilka wyników, jeśli plik PDF używa innych wymiarów), a następnie przekonwertować liczby w następujący sposób:

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

Oznacza to, że 8,26 cala to 209,9 mm (użyłem do tego formatu A4 PDF).

Axel Knauf
źródło
1
Kiedy mam identifyplik PDF w systemie OS XI, nie otrzymuję żadnych danych wyjściowych.
David Moles
bardzo późno, ale identifywymaga ImageMagick
odmówiono
6

Natknąłem się na ten sam problem i doszedłem do następującego rozwiązania. Nie wdałem się w dokumentację dotyczącą budowy plików pdf. Porównałem tylko dwa puste pliki pdf o różnych rozmiarach stron.

Wygląda na to, że pliki pdf mają wszelkiego rodzaju atrybuty osadzone między „<<” a „>>”. Odkryłem, że informacje o rozmiarze strony są w postaci zwykłego tekstu i można je znaleźć za pomocą prostego wyszukiwania wyrażeń regularnych.

To może, ale nie musi, być prawdziwe dla wszystkich plików pdf, ale działało na wszystkim, co mogłem znaleźć z różnych źródeł.

Odpowiednia część może wyglądać tak jak każda z tych stron formatu A4:

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

Oznacza to [0 0 szerokość wysokości], więc oto mój super kiepski, ale działający sposób na wyodrębnienie tego:

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

Po prostu zmień test.pdf na swój plik.

Peter Rakmanyi
źródło
1
zwróć uwagę, że wartości zwracane przez to są w „punktach”, a nie w mm, pikselach lub calach
odmówiono
0

Użyłem odpowiedzi maxchlepzigs, aby bezpośrednio obliczyć mm:

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

działa to również z odpowiedzią Alexa Knaufsa, ale identyfikacja trwa znacznie dłużej niż pdfinfo i wymaga imagemagick, jednak zaletą jest to, że możesz użyć tego do wielu plików (np. poprzez cd'ing do katalogu i użycie *.pdf):

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

Drugie greppolecenie pobiera dwie wartości punkt / cal. Jestem całkiem pewien, że możesz pominąć wyrażenie regularne grep i zrobić to bezpośrednio za pomocą awk, ale nie mogłem tego rozgryźć.

odmówił
źródło