最終更新:2007-06-29 (金) 12:02:04 (4156d)

TeX用語集?

pdftoppm

Xpdf utilities 付属の PDF を PPM 画像に変換するための プログラム。

mkdir img
pdftoppm -r 36 hoge.pdf img/

とすることにより 36 dpi で img 以下に PPM 画像を出力することができるので PDF ファイルのサムネイル一覧を作成することもできる。または、めちゃくちゃ 解像度をあげてごにょごにょすることも可能。

例えばあるディレクトリに たくさんの PDF *.pdf が存在したとします。 ウェブから適当にダウンロードした PDF なのでファイル名から何の PDF かを判別する事もできません。そのため、 PDF をすべて Xpdf などから プレビューしては面倒です。そこで、 pdftoppm を使ってサムネイルの 一覧を作成します(ghostscript を使ってもできますが、フォントのラスタライズ や処理速度で満足のいく結果とならないことが多いようです)。

zsh などを使っているのであれば、次のようにできます。

こいつは pdf --(pdftoppm)--> ppm --(convert)--> png という ことをやるのですが、ついでに HTML で出力してウェブブラウザ からアクセスできるようにしましょう。そうするとクリック一つで 該当する PDF にアクセスできるようになりますので。

html='index.html';
pngdir=`pwd`;

echo "<html><boody bgcolor=\"black\"><p>">${html};

mkdir -p ${pngdir}/img;

for f in *.pdf; do
  g=`basename ${f} .pdf`;
  if [ -f img/$g.png ] ; then
      echo "Already $g.png exists.";
  else
      echo "creating $g.png from $f";
      pdftoppm -l 1 -r 30 $f ${pngdir}/img/;
      convert img/-000001.ppm img/$g.png;   
  fi
  echo "<a href=\"$f\"><img border=1 src=\"img/$g.png\"></a> ">>${html};
done 

echo "</p></boody></html>">>${html};

exit;

このようなスクリプト thumb.sh をあるディレクトリ ~/public_html/work などにおき、ここの PDF が有るとします。すると work ディレクトリに index.html と img ディレクトリが作成され、img ディレクトリに生成された png 画像がおさめられます。

Mac OS X + EasyPackage? で xpdf のソースを make すると ld の関係で pdftoppm がコンパイルできない事があります。freetype2 自体はインストール されているならば、 xpdf-3.00/xpdf/Makefile の中の PDFTOPPM_LIBS 変数を 次のようにするとうまく行きます。

PDFTOPPM_LIBS = -L$(GOOLIBDIR) -lGoo $(SPLASHLIBS) $(T1LIBS) $(FTLIBS) \
	$(OTHERLIBS) -lm -L/usr/X11R6/lib

要するに -L/usr/X11R6/lib を追加すれば良いのです。

手順をおおざっぱに示すと以下のようになります。

./configure --with-freetype2-includes=/usr/local/include/freetype2
emacs xpdf/Makefile (ここで PDFTOPPM_LIBS を編集)
make 
sudo make install

こんなかんじです。 まぁ、patch のたぐいはすべて適用します。 適当なページを参照して みてください。

別のアプローチとして ImageMagick + Ghostscript という方法があると 思います。

for f in *.pdf; do
  g=`basename $f .pdf`;
  width=300;
  convert -thumbnail ${width} "${f}[0]" $g.png;
done

とかやると良いのでしょうか。