He estado usando esto para obtener un recuento de páginas de archivos PDF en scripts de shell en OS X:
pdftk "$i" dump_data | grep NumberOfPages | awk '{print $2}' | tr -dc '[0-9]'
(dónde $i
está el nombre del archivo PDF)
Sin embargo, hay momentos en los que eso no parece funcionar, por lo que me gustaría encontrar otra forma de hacerlo.
Otra exiftool
solución más:
cd /path/to/pdf/directory
exiftool -T -filename -PageCount -s3 -ext pdf .
Debería poder usar mdls
para ver los atributos de metadatos para un PDF:
mdls -n kMDItemNumberOfPages "$i" | cut -c24-
mdls -raw -name kMDItemNumberOfPages
no me di cuenta de que había un atributo para esto. Todos mis archivos están en dispositivos HFS+ indexados, por lo que funcionará bien.Puede usar la utilidad de línea de comando qpdf para contar el número de páginas en un documento PDF. qpdf
se puede instalar a través de Homebrew ejecutando el siguiente comando:
brew install qpdf
Una vez instalado, para contar el número de páginas ejecutar:
qpdf --show-npages file.pdf
Ya sea que el archivo esté indexado o no, esto funciona; sin embargo, si el archivo de destino no reside en un volumen/ubicación que se está indexando, aquí hay una alternativa a la excelente solución presentada por jordanmerrick.
Acabo de probar esto usando exiftool y si es solo el recuento de páginas que desea como número, entonces esto funciona:
exiftool "$i" | awk -F": " '/Page Count/{print $2}'
mdls tampoco funcionó para mí. Hice esto en una Mac, pero espero que sea lo mismo en cualquier shell bash o similar. Con la Mac, ya tengo homebrew instalado, así que primero escribí el comando "homebrew install exiftool".
Aquí está el script que ejecuté, puede configurarlo para sus propósitos. Tenía una carpeta completa de archivos PDF y quería el recuento de páginas en cada uno de ellos, así que hice que revisara los archivos e imprimiera el nombre del archivo y la página con un , en el medio
#!/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
Otra solución es usar el pdfinfo
comando del paquete xpdf . Una vez instalado, puede obtener el número de páginas junto con el nombre del archivo de la siguiente manera:
pdfinfo /path/to/file.pdf | grep -- ^Pages
O como una ejecución por lotes (con el formato de salida que solicitó):
while read pdf; do
pages=$(pdfinfo "$pdf" 2>&1 | grep -- ^Pages | tr -dc '[0-9]')
printf "%s %d\n" "$pdf" "$pages"
done < <(find /path/to/pdfs -name "*.pdf" -noleaf -type f)
pdfinfo
en general genera la siguiente información:
Creator: Microsoft� Office Word 2007
Producer: Microsoft� Office Word 2007
CreationDate: Tue Feb 25 14:46:56 2014
ModDate: Tue Feb 25 14:46:56 2014
Tagged: yes
Form: none
Pages: 3
Encrypted: no
Page size: 595.32 x 841.92 pts (A4) (rotated 0 degrees)
File size: 102155 bytes
Optimized: no
PDF version: 1.5
Lo uso con frecuencia para verificar si el pdf está "optimizado" o no. En caso de que no esté optimizado, puedo ejecutarlo a través de la siguiente secuencia de comandos para reducir el tamaño del archivo (a menudo de manera significativa):
#!/usr/bin/env bash
#
# makeSmall.sh
input=$1
output=$2
gs \
-o $output \
-sDEVICE=pdfwrite \
-dPDFSETTINGS=/screen \
-dCompatibilityLevel=1.8 \
-dDetectDuplicateImages=true \
-dEmbedAllFonts=false \
-dSubsetFonts=true \
-dConvertCMYKImagesToRGB=true \
-dCompressFonts=true \
-dNOPAUSE \
-dQUIET \
-dBATCH \
-c '<</AlwaysEmbed [ ]>> setdistillerparams' \
-c '<</NeverEmbed [/Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic /Symbol /ZapfDingbats /Arial]>> setdistillerparams' \
-f $input
$ pdfinfo F.pdf | grep -- ^Optimized
Optimized: no
$ ./makeSmall.sh F.pdf F-reduced.pdf 2>/dev/null
$ gstat --printf "%13n [size=%6s Bytes]\n" F*.pdf
F-reduced.pdf [size= 15983 Bytes]
F.pdf [size=102155 Bytes]
Stéphane Gourichon
flomei
exiftool -T -r -filename -PageCount -s3 -ext pdf . > pages.txt