Ich habe dies verwendet, um eine Seitenzahl von PDFs in Shell-Skripten in OS X zu erhalten:
pdftk "$i" dump_data | grep NumberOfPages | awk '{print $2}' | tr -dc '[0-9]'
(wo $i
ist der PDF-Dateiname)
Es gibt jedoch Zeiten, in denen das nicht zu funktionieren scheint, daher würde ich gerne einen anderen Weg finden, dies zu tun.
Noch eine andere exiftool
Lösung:
cd /path/to/pdf/directory
exiftool -T -filename -PageCount -s3 -ext pdf .
Sie sollten in der Lage sein, mdls
die Metadatenattribute für ein PDF anzuzeigen:
mdls -n kMDItemNumberOfPages "$i" | cut -c24-
mdls -raw -name kMDItemNumberOfPages
Ich wusste nicht, dass es dafür ein Attribut gibt. Alle meine Dateien befinden sich auf indizierten HFS+-Geräten, das wird also gut funktionieren.Sie können das Befehlszeilendienstprogramm qpdf verwenden , um die Anzahl der Seiten in einem PDF-Dokument zu zählen. qpdf
kann über Homebrew installiert werden, indem der folgende Befehl ausgeführt wird:
brew install qpdf
Führen Sie nach der Installation Folgendes aus, um die Anzahl der Seiten zu zählen:
qpdf --show-npages file.pdf
Unabhängig davon, ob die Datei indiziert ist oder nicht, funktioniert dies jedoch, wenn sich die Zieldatei nicht auf einem Volume/Speicherort befindet, der indiziert wird, dann ist hier eine Alternative zu der hervorragenden Lösung von jordanmerrick.
Ich habe das gerade mit exiftool ausprobiert und wenn es nur die Seitenzahl ist, die Sie als Zahl wollen, dann funktioniert das:
exiftool "$i" | awk -F": " '/Page Count/{print $2}'
mdls hat bei mir auch nicht funktioniert. Ich habe das auf einem Mac gemacht, aber ich gehe davon aus, dass es auf jeder Bash oder ähnlichen Shell genauso sein wird. Auf dem Mac habe ich Homebrew bereits installiert, also habe ich zuerst den Befehl "homebrew install exiftool" eingegeben.
Hier ist das Skript, das ich ausgeführt habe. Sie können es für Ihre Zwecke einrichten. Ich hatte einen ganzen Ordner mit PDF-Dateien und wollte Seitenzahlen auf jeder von ihnen, also ließ ich die Dateien durchsehen und den Dateinamen und die Seite mit einem dazwischen liegenden ausdrucken
#!/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
Eine andere Lösung ist die Verwendung des pdfinfo
Befehls aus dem xpdf- Paket. Nach der Installation können Sie die Anzahl der Seiten neben dem Dateinamen wie folgt abrufen:
pdfinfo /path/to/file.pdf | grep -- ^Pages
Oder als Stapellauf (mit dem gewünschten Ausgabeformat):
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
gibt im Allgemeinen die folgenden Informationen aus:
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
Ich verwende es häufig, um zu überprüfen, ob das PDF "optimiert" ist oder nicht. Falls es nicht optimiert ist, kann ich es dann durch das folgende Skript laufen lassen, um seine Dateigröße (oft erheblich) zu reduzieren:
#!/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