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