Bagaimana cara kueri ukuran halaman pdf dari baris perintah?

35

Untuk scripting saya perlu mendapatkan dimensi halaman dari file PDF (dalam mm).

pdfinfo cukup cetak dalam 'pts', mis:

Page size:      624 x 312 pts

Apa yang harus saya gunakan?

Atau unit apa itu 'Poin' - kalau-kalau saya ingin mengubahnya ...

maxschlepzig
sumber
2
Point di Wikipedia
Mat
Ukuran halaman mana yang Anda inginkan? Ukuran luar ukuran legal? Ukuran selebaran "halaman ini sengaja dikosongkan"? Ukuran surat halaman ganda?
Ignacio Vazquez-Abrams

Jawaban:

31

Unit 'pts' yang digunakan oleh pdfinfomenunjukkan titik PostScript. Sebuah titik PostScript didefinisikan dalam hal inci dan resolusi 72 titik per inci:

Pada akhir 1980-an hingga 1990-an, titik tradisional digantikan oleh titik desktop publishing (juga disebut titik PostScript), yang didefinisikan sebagai 72 poin ke inci ( 1 poin = 1/72 inci = 25.4/72 mm = 0,352 ¯7 mm [≙ 0,3528 mm ]).

Manual untuk gvmemuat daftar format kertas umum yang ditentukan dalam poin PostScript.

maxschlepzig
sumber
1
pada format kertas umum: pdfinfokadang-kadang memberi saya format kertas (seperti Page size: 595.28 x 841.89 pts (A4)) - Saya ingin tahu apakah itu untuk daftar ukuran halaman yang diketahuinya?
njsg
2
Suatu titik sebenarnya 0,352777777 ... mm, jadi 0,3528 mm adalah perkiraan yang lebih dekat.
cjm
15

Bukan cara termudah, tapi diberikan imagemagickdan unitsAnda juga bisa menggunakannya

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

untuk menemukan ukuran halaman dalam inci (ini dapat menghasilkan beberapa hasil jika PDF menggunakan dimensi yang berbeda) dan kemudian mengonversi angka-angka seperti ini:

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

Berarti 8,26 inci adalah 209,9 mm (saya menggunakan A4 PDF untuk ini).

Axel Knauf
sumber
1
Ketika saya identifyPDF pada OS XI saya tidak mendapatkan output.
David Moles
sangat terlambat, tetapi identifymembutuhkan ImageMagick
defuzed
6

Datang di masalah yang sama dan datang ke solusi berikut. Saya tidak masuk ke dokumentasi tentang bagaimana file pdf dibangun. Saya hanya membandingkan dua file pdf kosong dengan ukuran halaman yang berbeda.

Sepertinya pdf memiliki semua jenis atribut yang disematkan antara "<<" dan ">>". Saya menemukan bahwa info ukuran halaman ada dalam teks biasa dan dapat ditemukan dengan pencarian regex sederhana.

Ini mungkin atau mungkin tidak benar untuk semua pdf tetapi itu bekerja pada semua yang dapat saya temukan dari sumber yang berbeda.

Bagian yang relevan dapat terlihat seperti ini untuk halaman ukuran A4:

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

Ini berarti [0 0 lebar lebar] jadi di sini adalah solusi super timpang saya tetapi berfungsi untuk mengekstrak ini:

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

Ubah saja test.pdf ke file Anda.

Peter Rakmanyi
sumber
1
Perhatikan bahwa nilai yang dikembalikan oleh ini adalah dalam "poin" bukan mm, piksel atau inci
defuzed
0

Saya menggunakan jawaban maxchlepzigs untuk menghitung mm secara langsung:

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

ini juga bekerja dengan jawaban Alex Knaufs tetapi mengidentifikasi membutuhkan waktu lebih lama dari pdfinfo dan memerlukan imagemagick, meskipun terbalik adalah bahwa Anda dapat menggunakan ini untuk beberapa file (yaitu dengan cd ke direktori dan menggunakan *.pdf):

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

grepPerintah kedua mendapatkan nilai dua titik / inci. Saya cukup yakin Anda dapat melewati reg grep dan melakukannya langsung dengan awk tetapi saya tidak bisa mengetahuinya.

defuzed
sumber