Open4

[Elixir] PDF生成

snamiki1212snamiki1212

PDF生成をElixirでやる必要が出てきたので、その調査をメモ書きしておく

snamiki1212snamiki1212

HTML=>PDF でconvertしたい。PureにPDFを生成するとのは辛い。

そうなると、package の前にHTML=coreなconverter について前提知識を整理する。最初はここらへんも知らなくて、packageを見始めたがpackageなのかconverterなのかで混乱したので整理。

Core HTML => PDF

Package

  • 後述
snamiki1212snamiki1212

Packageを見てみる。

GitHub - gutschilla/elixir-pdf-generator: Create PDFs with wkhtmltopdf or puppeteer/chromium from Elixir.

Create PDFs with wkhtmltopdf or puppeteer/chromium from Elixir.

  • (star: 272)

  • pupetter か wkhtmltopdf で実行可能

  • pupetter の場合は node で install する

GitHub - bitcrowd/chromic_pdf: Convenient HTML to PDF/A rendering library for Elixir based on Chrome & Ghostscript

Convenient HTML to PDF/A rendering library for Elixir based on Chrome & Ghostscript

  • (star: 163)

  • Pupetter は使わないで Dev Tool API 経由で直接 chromium とやりとりする。

GitHub - coletiv/puppeteer-pdf: PDF generation wrapper for Elixir using Puppeteer

PDF generation wrapper for Elixir using Puppeteer

  • (star: 86)

  • gutnex だと Elixir でデザインするので HTML を書くよか大変

  • Wkhtmltopdf だと table のデザイン崩れがおきる。Chinese Character などがバグる。Machine Display ベースでデザインするのでfont-size:42pxとかになってかなり違和感を覚える。

  • ファイルサイズは 10 倍デカくなる(wkgtmltopdf よか)

  • 所感として、このライブラリの紹介してる著者の記事にて他のライブラリとの比較がない。なので、star 数から来る安定度を考えると他のメジャーのもののほうが良いかも。

GitHub - andrewtimberlake/elixir-pdf: An attempt to get a nice API for PDF generation in Elixir

An attempt to get a nice API for PDF generation in Elixir

  • (star: 26)

  • Pure に Elixir で PDF を書けるので、本当に要件が少ないならこれで良さそう。

snamiki1212snamiki1212

assetsを反映させるにあたっていくつかのハマリポイントがありそう?

  • fontとかは事前にロードさせないとPDFで表示できない
  • セキュリティ的にremoteのデータ取得は非推奨なのでdefaultでNG

セキュアな方法として

  • assetsはrenderする前に取得+base64変換しておき、それをHTMLにinjectする
  • fontの場合は他にも、linux側にfontを事前に取得させておけば読み込ませられる?

非セキュアな方法として

  • external networkを許可しちゃえばassetsもデータ取得できちゃいそう