0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PDFからページ数の情報を抜いて総ページ数を計算して表示する

Last updated at Posted at 2022-12-30

背景

最近自宅の蔵書を裁断して電子書籍にしていますが
どれだけの量になったか確認したくて
色々調べてみました。

pdfinfoコマンド

たとえばsample.pdfの情報がほしい場合、次のコマンドを実行します。

$pdfinfo sample.pdf

そうすると次のような情報が得られます。

Creator:         PFU ScanSnap Cloud #iX1600
Producer:        PFU PDF
CreationDate:    Sun Nov 20 01:55:39 2022 JST
ModDate:         Sun Nov 20 01:55:39 2022 JST
Custom Metadata: no
Metadata Stream: no
Tagged:          no
UserProperties:  no
Suspects:        no
Form:            none
JavaScript:      no
Pages:           204
Encrypted:       no
Page size:       410 x 591 pts
Page rot:        0
File size:       23174948 bytes
Optimized:       no
PDF version:     1.3

スキャナでPDFに変換していることがわかります。またページ数の情報もあります。
ここからページ数を抜いてくることができそうです。

作成したシェルスクリプト

ワンライナーできれいにやってみたかったのですが、可読性を考慮し次のように書きました。

pageCount.sh
#!/bin/bash

pages=0
for file in `find . -name '*.pdf'`; do
        page=`pdfinfo ${file} | grep Pages | sed -e 's/Pages:           //g'`
        echo "${file} ${page}"
        pages=$(($page+$pages))
done

echo "Total Page ${pages}"

内容を解説していきます。
やりたいことは各PDFファイルのページ数とファイル名を表示し、
PDFを格納するディレクトリ(サブディレクトリの配下含む)にあるPDFの総ページ数も合わせて表示することです。

注意すべきポイントを挙げていきます。

  1. 各PDFファイルに対しpdfinfoを実行する必要があります。
    xargsが使えなかったので、for文を律儀に書くことにしました。
    pdfinfoの出力からgrepでPagesを含む行を抜き出しています。
    そして最後にsedでページの数字だけが残るように加工します。

  2. ページ数の総和を足し上げる際は
    $(())を使わないと文字列の結合になってしまうので注意が必要です。

最後に

蔵書を自炊してPCに格納する場合、
管理が必要になります。
あり物のツールでもいいのですが、
独自のディレクトリ構造でファイルを大量に(300冊くらい)格納してしまっているので、
これからそれに合わせてツールの自作をすることが必要だと感じています。
その際やったことをこれからQiitaで報告していきたいと思うのでぜひご覧いただければと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?