Laravelで業務システム

Laravel関連の記事掲載してます

dompdfを使ってみる1

業務システムと言えば帳票出力機能は欠かせないものですよね。今回はLaravelで扱いやすいdompdfとよばれる、pdf形式で帳票出力できるライブラリを使ってみたいと思います。

インストールについては、ググっていただければたくさんでてきますのでそちらを参照ください。

dompdfの便利なところはhtmlを読み取って、それをpdfにしてくれるというところです。 つまりはLaravelのbladeファイルとの相性がよく、コーディングもしやすいわけです。 線を一本一本引いたりする必要もないし、タグ操作でいろいろとできるわけですね。

さて、ここからが本題なのですが、htmlを作るのって簡単かといわれれば、座標指定して線引いたりするのに比べればはるかに楽です。ただ、面倒なことに変わりないですよね。

ここで、レガシープログラマーの小生が考えることはExcelでレイアウト作ってVBAでタグを吐き出せればいいんじゃね?という結論に至るわけです。

とはいえ、VBはずいぶん利用してないので、とりあえず、いいサンプルが転がっていないかググることに。 探した限りは、単純な、TABLEタグ吐き出しはあるけど、セル結合や、線の色やフォントサイズとかまで加味しているのはほとんどない感じ。

というわけで、html吐き出しのVBAアドインを自作してみることにした。

EXCELのすべての機能をhtmlに吐き出すのはさすがに限界があるので、以下の情報をhtml出力できるようにする。もっとも、出力してもdompdfやhtmlで対応してないものもありますしね。

  1. フォントサイズ
  2. フォントカラー
  3. 線種
  4. 線幅
  5. 線色
  6. 背景色
  7. セルの連結

実際、作ったアドインの動きを以下に記載します。

1 作成した帳票の右下をクリック(範囲指定していると考えてください。)

f:id:pgslit:20211023203741j:plain

2 アドインメニューの"HTML出力ツール"ボタンをクリック

f:id:pgslit:20211023203952j:plain

3 表示されたウィンドウの"出力"ボタンをクリック

f:id:pgslit:20211023204101j:plain

4 すると、表示用ウィンドウに、以下画像の通り、HTMLが出力されます。尚、装飾はほぼCSSで行うようにしており、かつ対象の帳票にない、不要なCSSは吐き出さないようにしました。CSSでなく、タグに直接属性指定したり、不要なCSSがあるとPDFの出力が遅くなったりするので。

f:id:pgslit:20211023204222j:plain

5 上記のHTMLをBladeファイルに張り付けて、実際にdompdfで出力したイメージが以下の通りです。いい感じですが、見積番号のところ等が、ラップしているのでここは、直接タグに"nowrap"をつけます。

f:id:pgslit:20211023204837j:plain

6 以下が、"nowrap"をつけたものです。どうですか!いい感じですね。VBAExcelの幅の割合を算出して、"width" 属性を吐き出すという手もありますが、dompdfが旨く幅の調整してくれるので、かえってレイアウトが崩れる可能性もあるので、後で微調整するのが無難かもしれません。

f:id:pgslit:20211023205154j:plain

7 尚、以下のように、画像を出力したいところは、画像作って、所定フォルダに保存し、そのまま”img”タグを書けばいいわけです。Laravelとdompdfのタッグが生んだ機能ですね。同様に、変数とかもあらかじめ埋め込んでおけば、かなり楽になりますよね。

f:id:pgslit:20211023205630j:plain

8 ちなみに出力イメージは以下になります。注意が必要なのは、"<"や">"といった、文字をそのまま出力したい場合もあるかと思うので、一応、出力画面の"実態参照を利用する"をチェックすることで、文字変換できるようにはしました。

f:id:pgslit:20211023210054j:plain

といった感じでいいようにも見えますが、実はわりと意識してExcelで帳票レイアウト作る必要があります。 もちろん、吐き出せない内容があるのは止む無しですが、残念ながら、意識しないと、帳票のレイアウトがくずれる、問題点あります。(これじゃー公開できない)

この問題は次回お話ししようと思います。今回はここまで。