📇

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なので慣れればそこまで難しくはないと思います。

http://pdfmake.org/playground.html

実装

以下が今回実装したサンプルアプリケーションです。
https://github.com/ytk728/nestjs-pdfmake-example

主なディレクトリ構成は以下の通りです。

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作)
business-card.png

おわりに

NestJSとpdfmakeにて、PDF生成APIを実装できました。
デザインは専門外のため、それなりな感じで許してください。
これから開発される皆様の参考になれば幸いです。

参考文献

Discussion