はじめに
私は普段、Go言語で開発を行うことが多いです。
その中で、PDFを作成する処理が必要となりました。
課金せずに実装したく、何を使えば良いのか悩んだ中で私が取った方法を紹介します。
結論
- Excelのテンプレートを作成
- テンプレートに値を挿入し、Excelファイルを作成
- ExcelをPDFに変換
以上の方法で実現しました。
Excelファイルの操作
excelizeを使用。
テンプレートに変数名を埋め込み、その埋め込まれた箇所に変数を挿入することで動的なファイル作成を実現。
ExcelをPDFに変換
LibreOfficeの変換機能をREST APIで提供するunoserverのdocker imageを使用することにしました。
デフォルトだと2004番ポートにexcelファイルをPOSTするだけでPDF出力をしてくれます。
使い方の参考
最初に考えた方法
GoのPDF作成ライブラリで検索すると、いくつか存在します。
- https://github.com/jung-kurt/gofpdf
- https://github.com/signintech/gopdf
- https://github.com/go-pdf/fpdf
- https://github.com/unidoc/unipdf
いくつか存在するのですが、実際に使ってみると、日本語フォントの適用が難しかったり、レイアウト調整が面倒だったりとしっくりこない。
テンプレートをもとに文書を作成したいけれど、コードベースだとテンプレートを変えたい時に工数がかかる。
HTML/CSSで作成
きれいな文書、という意味ではこれが良い方法かもしれない。
ただ、今回の場合はexcelファイルも作成できるということもあり、最初の方法を採用しました。
例えば、作成したxlsxをダウンロードしてそこにユーザーが直接データを入力、それをアップロードしてもらう、などというユースケースにも使うことができます。
まとめ
今の私が調査した中で、採用した方法を紹介しましたが、結局docker imageに頼ってしまっており、もっと良い方法があれば教えていただきたいです!