41

PDFを動的に生成しています。シェル スクリプトを使用して PDF のページ数を確認するにはどうすればよいですか?

4

10 に答える 10

60

追加パッケージなし:

strings < file.pdf | sed -n 's|.*/Count -\{0,1\}\([0-9]\{1,\}\).*|\1|p' \
    | sort -rn | head -n 1

pdfinfo の使用:

pdfinfo file.pdf | awk '/^Pages:/ {print $2}'

pdftk の使用:

pdftk file.pdf dump_data | grep NumberOfPages | awk '{print $2}'

次のように、pdfinfo を使用して、すべての PDF の合計ページ数を再帰的に合計することもできます。

find . -xdev -type f -name "*.pdf" -exec pdfinfo "{}" ";" | \
    awk '/^Pages:/ {n += $2} END {print n}'
于 2013-02-06T18:53:23.740 に答える
10

imagemagick ライブラリは、identify と呼ばれるツールを提供します。これは、出力の行数をカウントすることと組み合わせて、目的の結果を得ることができます...imagemagick は、brew を使用して osx に簡単にインストールできます。

これは、シェル変数にキャプチャして画面にダンプする機能的なbashスクリプトです...

#/bin/bash
pdfFile=$1
echo "Processing $pdfFile"
numberOfPages=$(/usr/local/bin/identify "$pdfFile" 2>/dev/null | wc -l | tr -d ' ')
#Identify gets info for each page, dump stderr to dev null
#count the lines of output
#trim the whitespace from the wc -l outout
echo "The number of pages is: $numberOfPages"

そして、それを実行した結果...

$ ./countPages.sh aSampleFile.pdf 
Processing aSampleFile.pdf
The number of pages is: 2
$ 
于 2013-02-06T14:16:28.357 に答える
8

これは、コマンドラインを直接使用するためのバージョンです (pdfinfo に基づく):

for f in *.pdf; do pdfinfo "$f" | grep Pages | awk '{print $2}'; done
于 2019-01-20T17:50:44.953 に答える
2

私が見つけた古いスクリプト(kshで)を掘り出しました:

#!/usr/bin/env ksh
# Usage: pdfcount.sh file.pdf
#
# Optimally, this would be a mere:
#       pdfinfo file.pdf | grep Pages | sed 's/[^0-9]*//'

[[ "$#" != "1" ]] && {
   printf "ERROR: No file specified\n"
   exit 1
}

numpages=0
while read line; do
   num=${line/*([[:print:]])+(Count )?(-)+({1,4}(\d))*([[:print:]])/\4}
   (( num > numpages)) && numpages=$num
done < <(strings "$@" | grep "/Count")
print $numpages
于 2015-05-06T13:55:03.643 に答える