Comment interroger la taille de page pdf à partir de la ligne de commande?

35

Pour le script, je dois obtenir les dimensions de la page d'un fichier PDF (en mm).

pdfinfo il suffit de l'imprimer en 'pts', par exemple:

Page size:      624 x 312 pts

Que devrais-je utiliser?

Ou quelle unité est "pts" de toute façon - au cas où je veux les convertir ...

maxschlepzig
la source
2
Point sur Wikipedia
Mat
Quelle page avez-vous voulu la taille? La couverture légale de taille? La taille de la notice "cette page est intentionnellement vide"? La taille de la lettre double pages?
Ignacio Vazquez-Abrams

Réponses:

31

L'unité 'pts' utilisée par pdfinfodésigne un point PostScript. Un point PostScript est défini en termes de pouce et de résolution de 72 points par pouce:

De la fin des années 1980 aux années 1990, le point traditionnel a été remplacé par le point de publication assistée par ordinateur (également appelé point PostScript), défini comme 72 points au pouce ( 1 point = 1⁄72 pouces = 25,4⁄72 mm = 0,352 ¯7 mm [≙ 0,3528 mm ]).

Le manuel to gvcontient une liste des formats de papier courants spécifiés en points PostScript.

maxschlepzig
la source
1
sur les formats de papier courants: pdfinfome donne parfois le format de papier (du type Page size: 595.28 x 841.89 pts (A4)) - je me demande si elle le fait pour une liste de formats de page qu’elle connaît?
mardi
2
Un point correspond en réalité à 0,352777777 ... mm, donc 0,3528 mm est une approximation plus proche.
cjm
15

Pas le moyen le plus simple, mais étant donné imagemagicket unitsvous pouvez également utiliser

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

pour trouver la taille de la page en pouces (cela peut donner plusieurs résultats si le PDF utilise des dimensions différentes), puis convertir les nombres de la manière suivante:

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

Ce qui signifie que 8,26 pouces sont 209,9 mm (j'ai utilisé un PDF A4 pour cela).

Axel Knauf
la source
1
Quand je identifyPDF sur OS XI, je ne reçois aucune sortie.
David Moles
très tard, mais identifynécessite ImageMagick
arrêté le
6

A rencontré le même problème et est venu à la solution suivante. Je ne suis pas entré dans la documentation sur la manière dont les fichiers pdf sont construits. Je viens de comparer deux fichiers pdf vides avec différentes tailles de page.

Il semble que les fichiers PDF contiennent toutes sortes d'attributs intégrés entre "<<" et ">>". J'ai trouvé que les informations de taille de page sont là en texte brut et peuvent être trouvées avec une simple recherche de regex.

Cela peut être vrai ou non pour tous les fichiers PDF, mais cela a fonctionné pour tout ce que je pouvais trouver à partir de sources différentes.

La partie pertinente peut ressembler à l’un de ces types pour une page de format A4:

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

Cela signifie [0 0 width height] alors voici ma solution boiteuse mais efficace pour extraire ceci:

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

Il suffit de remplacer test.pdf par votre fichier.

Peter Rakmanyi
la source
1
notez que les valeurs renvoyées par ceci sont en "points" pas en mm, en pixels ou en pouces
défusée le
0

J'ai utilisé maxchlepzigs answer pour calculer le mm directement:

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

cela fonctionne aussi avec Alex Knaufs, mais identifier prend beaucoup plus de temps que pdfinfo et nécessite imagemagick, mais vous pouvez l’utiliser pour plusieurs fichiers (c-à-d. en les insérant dans un répertoire et en utilisant *.pdf):

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

La deuxième grepcommande obtient les deux valeurs de point / pouce. Je suis assez sûr que vous pouvez ignorer la regex grep et le faire directement avec awk mais je ne pouvais pas le comprendre.

défardé
la source