Commande Shell pour compter les pages d'un fichier PDF (autre que pdftk)?

4

Je l'utilisais pour obtenir un nombre de pages de fichiers PDF dans des scripts de shell sous OS X:

pdftk "$i" dump_data | grep NumberOfPages | awk '{print $2}' | tr -dc '[0-9]'

(où $iest le nom du fichier PDF)

Cependant, il y a des moments où cela ne semble pas fonctionner, alors j'aimerais trouver un autre moyen de le faire.

TJ Luoma
la source

Réponses:

5

Vous devriez pouvoir utiliser mdlspour afficher les attributs de métadonnées d'un PDF:

mdls -n kMDItemNumberOfPages "$i" | cut -c24-

JordanMerrick
la source
Remarque: cette solution ne fonctionne que si le fichier cible réside sur un volume / emplacement indexé. Personnellement, certains endroits sont exclus, donc, dans certains cas, cela ne fonctionnerait pas. Cela dit, c’est un meilleur moyen que de l’acheminer aussi souvent, comme indiqué dans le PO. Cela vaut un +1 cependant! :)
user3439894
1
Encore plus facile: mdls -raw -name kMDItemNumberOfPagesje n'avais pas réalisé qu'il y avait un attribut à cela. Tous mes fichiers sont sur des périphériques HFS + indexés, donc cela fonctionnera bien.
TJ Luoma
4

Encore une autre exiftoolsolution:

cd /path/to/pdf/directory
exiftool -T -filename -PageCount -s3 -ext pdf .
fd0
la source
Celui-ci est très bon à mon humble avis. Il (1) est simple (2) produit une sortie propre: nom de fichier [espaces] nombre de pages (3) peut traiter tous les fichiers PDF dans un répertoire même s'il existe d'autres fichiers (4) qui fonctionneront probablement sur un ordinateur avec des paramètres régionaux différents ( 5) est portable sur d'autres systèmes (en l'utilisant sous Linux).
Stéphane Gourichon
Excellente solution! En l'utilisant maintenant pour compter les pages de milliers de fichiers de manière récursive et diriger la sortie vers un fichier. La commande est alors comme ceci:exiftool -T -r -filename -PageCount -s3 -ext pdf . > pages.txt
flomei
0

Que le fichier soit indexé ou non, cela fonctionne. Cependant, si le fichier cible ne réside pas sur un volume / emplacement indexé, voici une alternative à l'excellente solution présentée par jordanmerrick.

Je viens d’essayer d’utiliser exiftool et s’il s’agit simplement du nombre de pages que vous souhaitez, cela fonctionne:

exiftool "$i" | grep 'Page Count' | cut -c35-
utilisateur3439894
la source
0

mdls n'a pas fonctionné pour moi non plus. Je l'ai fait sur un Mac, mais je m'attends à ce que ce soit la même chose sur n'importe quel shell bash ou similaire. Avec le Mac, homebrew est déjà installé et je viens de taper la commande "homebrew install exiftool" en premier.

Voici le script que j'ai exécuté, vous pouvez le configurer pour vos besoins. J'avais tout un dossier de fichiers PDF et je voulais des pages sur chacun d'entre eux, je l'ai donc regardé à travers les fichiers et imprimé le nom du fichier et la page avec un, entre les deux

#!/bin/sh

FILES=/path/to/files/*
for f in $FILES
do
    fn=$(basename "$f")
    printf "$fn"
    pg=$(exiftool "$f" | grep 'Page Count' | cut -c35-)
    printf ",$pg\n"
done
RKaneKnight
la source
0

Vous pouvez utiliser l' utilitaire de ligne de commande qpdf pour compter le nombre de pages d'un document PDF. qpdfpeut être installé via Homebrew en exécutant la commande suivante:

brew install qpdf

Une fois installé, pour compter le nombre de pages exécutées:

qpdf --show-npages file.pdf

Geek
la source