PDFファイルの印刷サイズを取得(pdfinfoを使用)

書籍はかなりかさばるということもあり、大分昔(20年位前)から、書籍をスキャンして、できるだけ処分するようにしてきました。しかし、処分をためらう場合(本当に原本を所有しているかとか、スキャン品質を十分にチェックしていない、あるいは、うまくスキャンできているか心配)もあって、段ボールに詰めて保管しているものも多くあります。原本を保管してしまうと、

スペースを節約するためにスキャンした意味が半減してしまうのですが、少なくとも、段ボールへ保管する際、効率よくパッキングたいと思いました。裁断後の書籍は、実にいろいろなサイズとページ数で、スキャンの都度、ちゃんとスキャンサイズを確認しておけばよかったと後悔していました。

PDFファイルの印刷サイズに合わせて用紙が選択されるくらいですから、PDFファイルのプロパティには印刷サイズが情報として記録されているはずです。印刷サイズを調べ、段ボールの大きさとそれぞれの書籍のサイズとページ数(厚み)を把握しておけば、うまく段ボールにパッキングできそうです(一方で、書籍の内容やタイトル名ごとに集めた方が取り出すときの検索性が上がるという話はありますが、ここでは置いておきます)。




当初、Adobe AcrobatのJavaScriptの機能を利用しようとしましたが、私にはハードルの高いものでした。いろいろと調べてみると、PDFファイルを扱うには、Popplerライブラリという便利なツールがあることを知りました。Windows版のexeファイルもありますので、コマンドプロンプトからも同様に動作を行うことができます。CentOS 6.9には、Popplerライブラリのpdfinfoが標準で入っていました。

$ pdfinfo
pdfinfo version 0.26.5
Copyright 2005-2014 The Poppler Developers
Copyright 1996-2011 Glyph & Cog, LLC
Usage: pdfinfo [options] <PDF-file>
  -f <int>          : first page to convert
  -l <int>          : last page to convert
  -box              : print the page bounding boxes
  -meta             : print the document metadata (XML)
  -js               : print all JavaScript in the PDF
  -rawdates         : print the undecoded date strings directly from the PDF file
  -enc <string>     : output text encoding name
  -listenc          : list available encodings
  -opw <string>     : owner password (for encrypted files)
  -upw <string>     : user password (for encrypted files)
  -v                : print copyright and version info
  -h                : print usage information
  -help             : print usage information
  --help            : print usage information
  -?                : print usage information
$

まず、手元にあった適当なA4サイズのPDFファイルをpdfinfoで内容を表示してみます。

$ pdfinfo test.pdf
Title:          A TESTBOOK - marvelous ideas
Creator:        Adobe Illustrator CS5.1
Producer:       Adobe PDF library 9.90
CreationDate:   Tue May 24 16:22:21 2016
ModDate:        Thu Jun 16 09:18:35 2016
Tagged:         no
UserProperties: no
Suspects:       no
Form:           AcroForm
JavaScript:     no
Pages:          12
Encrypted:      no
Page size:      595.274 x 841.89 pts (A4)
Page rot:       0
File size:      1510040 bytes
Optimized:      yes
PDF version:    1.3
$

12行目、14行目のPagesとPage sizeが、今回、必要とする情報です。PDFファイルの集まったフォルダにある、PDFファイル名を片っ端から取得して、そのファイルをpdfinfoで処理し、表示された情報のうち、PagesとPage sizeをgrepコマンドで抜き出してファイルに出力すれば完了します。以下のシェルスクリプトを書きました(pdfpagesize.sh)。

#!/bin/sh

dir="/home/username/books/*.pdf"

for filename in ${dir}
do
  var=`basename ${filename}`
  echo $var
  pdfinfo $var | grep "Pages"
  pdfinfo $var | grep "Page size"
done

PDFファイルを同じフォルダに入れておき、シェルスクリプトを実行します。うまく行ったので、もう一度、シェルスクリプトを実行し、result.txtに内容を保存しました。

$ . pdfpagesize.sh
C言語によるはじめてのアルゴリズム入門.pdf
Pages:          488
Page size:      420 x 595 pts
はじめてのAIプログラミング-C言語で作る人工知能と人工無能_OCR.pdf
Pages:          336
Page size:      420.48 x 595.26 pts (A5)
酵素反応の仕組み.pdf
Pages:          190
Page size:      362.88 x 515.88 pts
社長島耕作10.pdf
Pages:          186
Page size:      514.56 x 362.88 pts
重要事項説明書.pdf
Pages:          8
Page size:      595.276 x 841.89 pts (A4)
普通保険約款・特約.pdf
Pages:          68
Page size:      283.465 x 595.276 pts
$ . pdfpagesize.sh > result.txt
$

情報がテキストファイルとして出力されたので、あとはExcelに持っていくなり自由です!

ページサイズの計算方法
Page sizeの単位は、ptsです。例えば、横幅が420 ptsだと、420 pts / 72 (pts/inch) * 25.4 (mm/inch) = 148 mmでA5となります(一部、pdfinfoの出力には表示されています)。

PDF情報取得プロジェクト完了後
この手の話にはよくあることですが、この作業は、サイズを取得できたので、自己満足して終了しました。すでに段ボールに収められた裁断後の大量の書籍を整理し直すなど、面倒くさいです!!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です