fessでthumbnail画像が生成されない問題

以前にも書いたように自宅内のサーバ上でオープンソース全文検索サーバ Fess を利用して、自炊した書籍の検索システムを構築しています。

紙の書籍のようにバラバラとページをめくりつつ目的のページを探せなくなった代わりに、全文検索が使えるのが大きなメリットなのです。

今日、調べ物の為に検索していて、ふと気がついてしまいました。

サムネイルが表示されていない!!

サムネイル生成機能は、表紙(1ページ目)を画像に変換して検索画面に一緒に表示しするもので、検索結果の視認性が向上します。以下の画像をみれば、その違いは一目瞭然だと思います。

サムネイル無し

サムネイル有り

原因と対策

私の環境は、以下のとおりです。また、基本的にPDFファイルしか検索対象にしていない為、PDFファイルの処理部分のみ修正しています。

OS (distribution) debian buster (10.10 Stable)
Fess 13.12.1 ( deb package を install)
Elasticsearch 7.12.1

ドキュメントの設定ガイドを確認して必要なパッケージが入っている事を確認し、必要なコマンドが起動できる事も確認しておきます。

convertはImagemagick、pdftoppmはpoppler-utilsにそれぞれ入っています。

サムネイル生成周りの挙動を調べてみると、ドキュメントから表紙のpng画像ファイルを生成するはずが、ディレクトリだけが掘られ肝心のサムネイルファイルが作成されていません。

debian packageでインストールした場合、サムネイルを生成するコマンドは、/usr/share/fess/bin/generate-thumbnailです。

Issue 1

generate-thumbnail スクリプトが正常に動いていない。

原因

Red Hat系ディストリビューションに於いて/bin/sh の実体はbashである。しかし、Debian系ディストリビューションの /bin/shは、dashになっている。

generate-thumbnailコマンドの中で、bashの組み込みコマンドである[[ xxx ]]を利用している為、Debian系ディストリビューション(Ubuntuを含む)では、期待する動作をしない。

解決策

/bin/shではなく、bashを起動するようにshebangを書き換える。

Issue 2

PDFファイルによって、サムネイル画像生成に成功したり失敗したりする。

原因

pdftoppm コマンドが出力するファイル名にはページ数が連番で付与される。ページ数が多いPDFファイルを処理する場合、連番の桁数が期待する物では無い場合がある。結果として、generate-thumbnailスクリプトが失敗しexitしてしまう。

[注意]うちの環境にインストールされている pdftoppm コマンドのせいかもしれません。

解決策

generate-thumbnailスクリプトのPDFファイルを処理している部分から呼び出される pdftoppm コマンドで -singlefile オプションを利用し、連番ファイルが付かないようにする。

issue 3

検索結果に表示される文書のサムネイル画像が歪んで表示される。

動作に問題はありません。

原因

生成されるサムネイル画像がアスペクト比を無視して 100×100ピクセルに縮小される為。

対策

アスペクト比を保存しつつ縮小するようconvertコマンドへ渡す画像サイズの指定を変更する。

修正パッチ

  • 5,6行目:
    環境の差異を吸収する為、/usr/bin/envを通して bashを呼び出す。
  • 8,9行目:
    サイズ指定の最後に!を付けるとアスペクト比を保存しない。
  • 11-14行目:
    pdftoppmで最初の1ページのみ画像化する。出力ファイルに数字は付かない。
  • 16-17行目:
    -f で一時ファイルの強制削除

後は更新されるのを待つか or すぐに再生成したければ文書を全てクロールし直すことで強制的に再生成されます。

良い感じに表示されました!

カテゴリー PC

コメントを残す

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

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)