ことの発端

Spring bootを利用した社内システムを作成していますが、表示されたHTMLを紙に印刷して掲示する、という運用をしています。
これを、印刷せずにAndroidタブレット端末に表示させて設置し、デジタルサイネージ的に表示させたいと思いました。

ところが意外な問題は、紙はA4サイズ、タブレット画面は16:9となり、ページがタブレット画面に収まらない。

解決案としては

  • 完全にページを分ける(印刷用、タブレット用)
  • cssのmediaクエリを使う
  • pdfにして画面に収める

があります。mediaクエリが良さそうに見えますが、タブレットは解像度が高いのでPCとタブレットが区別できません。
そこでpdfです。pdfの場合、一回の出力で紙だろうがPCだろうがタブレット端末だろうが問題ないし、あとなんとなくpdf出力できる感じがかっこいいと思ったのでこのパターンをとることにしました。

作成法

システムがSpring bootで、ここからpdfを作成する方法を検討します。

調査の結果

  • AbstractPdfViewを使う(Springのクラス。htmlのviewの代わりにpdfを表示するviewとして使える)
  • flying-saucer-pdfを使う(この場合 “How To Create PDF through HTML Template In Spring Boot” が秀逸。ただし渡すMapはMap<String, Object>にした方がいい)
  • WkHTMLtoPDFを使う(コマンドラインアプリ 参照:wkhtmltopdf.org

これらが見つかりました。

ただ、AbstractPdfViewもflying-saucer-pdfも外部cssや画像を取り込むのが難しそうで、フォントの扱いやレイアウトのコントロールについて煩雑な印象がありました。その点WkHTMLtoPDFはhtmlを直接読み込んで、内部のレンダリングエンジン(webkit)の表示結果をpdf化するということなので、出来上がりイメージが全く想定通り!これは素晴らしいです!

ローカルファイルを扱う場合の注意点は –enable-local-file-access オプションを使うこと。これがあればcssや画像もしっかり読み込んでくれます。

まとめ

出来上がったHTMLを表示イメージ通りにpdfにするならWkHTMLtoPDFがベスト。

ローカルファイルを指定するなら –enable-local-file-access オプションを使いましょう。

コメントを残す

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