Nombre de pages dans un pdf

© Christian PAULUS. Document créé le 12 juillet 2010 , mis à jour le 13 juillet 2010.

Si perçante soit la vue, on ne se voit jamais de dos. Proverbe chinois

Accueil du site > Astuces > MacOSX > Nombre de pages dans un pdf

pdf2ps, pdftops, pdfinfo / MacOsX 10.6 (Snow Leopard)

Trois outils en ligne de commande permettent d’obtenir le nombre de pages d’un fichier PDF : pdf2ps , pdftops et pdfinfo.

Ces trois outils sont à installer via les MacPorts. pdinfo est fourni dans le port xpdf.

pdf2ps lit le fichier PDF donné en paramètre et le traduit en fichier postscript. Reste ensuite à compter le nombre de « showpage » rencontré dans ce fichier postscript.

Voici un exemple de script à utiliser en ligne de commande (Terminal.app).

#!/bin/sh

PDF2PS="/opt/local/bin/pdf2ps"
DEST="/tmp/pdf2ps_temp.ps"

for f in *.pdf
do
cat /dev/null > $DEST
$PDF2PS $f $DEST 2>/dev/null
r=`grep -c 'showpage' $DEST`
echo "$f\t$r"
done

D’une grande lenteur ! D’aucuns préféreront l’usage de pdftops, environ 20 fois plus rapide et qui permet l’édition sur la sortie standard (stdout) et donc l’usage du pipe.

Avec pdftops, le script devient :

#!/bin/sh

PDF2PS="/opt/local/bin/pdftops"

for f in *.pdf
do
r=`$PDF2PS $f -  2>/dev/null | grep -c 'showpage'`
echo "$f\t$r"
done

pdfinfo, le plus efficace pour compter les pages pdf

Encore plus rapide, pdfinfo analyse le fichier PDF sans passer par la case « convertir en ps ». C’est de loin la meilleure solution pour dresser un inventaire du nombre de pages dans les fichiers PDF d’un répertoire.

Et donc, la version script shell devient au final :

#!/bin/sh

PDFINFO="/opt/local/bin/pdfinfo"
GREP="/usr/bin/grep"
SED="/usr/bin/sed"

if [ ! -n "$1" ]
then
       echo "Usage: `basename $0` fichier [fichier ...]"
       exit
fi  

for f in "$@"
do
r=`$PDFINFO $f 2>/dev/null | $GREP "Pages" | $SED 's/Pages: *//'`
echo "$f\t$r"
done

Problème de copier/coller ? Voici le script :

GZ - 243 octets
pdf_compter_pages

A utiliser en précisant le ou les fichiers PDF à analyser. Par exemple :

cd mon_repertoire_de_pdf
pdf_compter_pages *.pdf

Une piste à ne pas suivre

Aperçu sur le net : compter les occurences de "/Type /Page" dans le fichier PDF.

Par exemple en PHP :

preg_match("/Type\s*\/Page[^s]/")

Trop aléatoire ! Cette chaîne peut être présente plusieurs fois pour la même page. Un gros fichier me donnait via cette commande un nombre de pages 3 fois supérieur à la réalité.

Compter les caractères dans un PDF

Pour ajouter au script ci-dessus la possibilité de compter les caractères d’un document PDF, il faut extraire le texte du fichier via pdftotext.

#!/bin/sh

PDFINFO="/opt/local/bin/pdfinfo"
PDFTOTEXT="/opt/local/bin/pdftotext"
GREP="/usr/bin/grep"
SED="/usr/bin/sed"
WC="/usr/bin/wc"

if [ ! -n "$1" ]
then
       echo "Usage: `basename $0` fichier [fichier ...]"
       exit
fi

for f in "$@"
do
r=`$PDFINFO $f 2>/dev/null \
       | $GREP "Pages" \        | $SED 's/Pages: *//'`
c=`$PDFTOTEXT $f - 2>/dev/null \
       | $SED 's/^[[:space:]]*//;s/[[:space:]]*$//;/^$/d' \
       | $WC -c`
echo "$f\t$r\t$c"
done

Donnera comme résultat :

nom_fichier.pdf nombre_de_pages nombre_de_caractères

Le résultat est en général supérieur à la réalité. Ce script est à affiner.

Problème de copier/coller ? Voici le script :

GZ - 306 octets
pdf_stats

Plussoyez !

Les forums sont fermés.