📇
NestJSでpdfmakeを使い、PDFダウンロードAPIを実装する
はじめに
NestJSとpdfmakeはどちらも比較的広く使用されているフレームワーク/ライブラリだと思います。
どちらも使いやすかったので、本記事では、swagger-uiを用いて、リクエストパラメータで与えた情報から名刺PDFを出力するサンプルアプリケーションを実装して紹介します。
開発環境
- NestJS 11.0.1
- TypeScript 5.7.3
- PdfMake 0.2.20
準備
NestJSプロジェクトの作成
npm i -g @nestjs/cli
nest new nestjs-pdfmake-example
cd nestjs-pdfmake-example
日本語フォントファイルの準備
日本語フォントをダウンロードします。
※本記事ではIPAexゴシック(Ver.004.01)を利用
IPAフォントライセンスに従ってご利用ください。
PDF出力するファイルのレイアウトデザイン
以下で、アプリケーションを実装しなくてもレイアウトの確認ができます。
結局は、jsonなので慣れればそこまで難しくはないと思います。
実装
以下が今回実装したサンプルアプリケーションです。
主なディレクトリ構成は以下の通りです。
src/
├── assets/
│ ├── fonts/
│ │ └── ipaexg.ttf # 日本語フォント(IPAexゴシック)
│ └── image/
│ └── image.png # 背景画像(オプション)
├── business-card/ # 名刺関連モジュール
│ ├── business-card.controller.ts
│ ├── business-card.service.ts
│ ├── business-card.module.ts
│ └── dto/
│ └── business-card.dto.ts
├── pdf/ # PDF生成関連モジュール
│ ├── pdf.service.ts
│ └── pdf.module.ts
├── app.module.ts
└── main.ts
実際に動かしてみる
起動後、localhost:3000/api
にて/business-card/generate-pdf
をリクエスト
出力例(背景画像はChat GPT作)
おわりに
NestJSとpdfmakeにて、PDF生成APIを実装できました。
デザインは専門外のため、それなりな感じで許してください。
これから開発される皆様の参考になれば幸いです。
Discussion