📄
概念 #n8n #ユースケース #PDF生成 #Codeノード #pdfkit #請求書 #自動化 📚 n8nワークフロー自動化

npmライブラリを使ったPDF自動生成フロー

n8nのCodeノードでpdfkitなどのnpmライブラリを使って見積書・請求書・レポートPDFを自動生成し、メールに添付してGoogleDriveに保存するワークフロー。

ユースケース概要

注文データや見積もりデータを受け取り、CodeノードでPDFを動的に生成してメール添付・Google Driveへの保存を自動化する。請求書・見積書・月次レポートなどに活用できる。

解決する課題: PDF生成のためにバックエンドサーバーを立てる必要をなくし、n8nで完結させる

使用するn8nノード:

  • Webhook Trigger(注文データ受信)
  • Code(PDF生成 - pdfkit使用)
  • Gmail(PDF添付メール送信)
  • Google Drive(PDF保存)

事前設定: npmパッケージの許可

セルフホストのn8nでpdfkitを使うには環境変数を設定する。

# docker-compose.yml
environment:
  - NODE_FUNCTION_ALLOW_EXTERNAL=pdfkit,pdfkit-table

Cloudの場合はn8n Cloudが許可するライブラリリストを確認する。

ワークフロー構成

[Webhook Trigger: POST /generate-invoice]

[Code: pdfkitでPDF生成 → Binary dataとして出力]

[Gmail: PDF添付でメール送信]

[Google Drive: PDFファイルを保存]

実装手順

Step 1: Webhookで注文データを受信

{
  "invoiceNumber": "INV-2026-001",
  "customer": { "name": "株式会社Example", "email": "billing@example.com" },
  "items": [
    { "name": "Proプラン", "quantity": 1, "price": 50000 },
    { "name": "オプション機能A", "quantity": 2, "price": 10000 }
  ],
  "issueDate": "2026-04-09",
  "dueDate": "2026-04-30"
}

Step 2: PDF生成(Codeノード)

const PDFDocument = require('pdfkit');

const data = $json;
const doc = new PDFDocument({ margin: 50 });

// バッファに書き込むためのPromise化
const getBuffer = () => new Promise((resolve) => {
  const chunks = [];
  doc.on('data', chunk => chunks.push(chunk));
  doc.on('end', () => resolve(Buffer.concat(chunks)));

  // ヘッダー
  doc.fontSize(20).text('請 求 書', { align: 'center' });
  doc.moveDown();
  doc.fontSize(12).text(`請求番号: ${data.invoiceNumber}`);
  doc.text(`発行日: ${data.issueDate}`);
  doc.text(`支払期限: ${data.dueDate}`);
  doc.moveDown();
  doc.text(`請求先: ${data.customer.name}`);
  doc.moveDown();

  // 明細
  doc.text('<明細>');
  let total = 0;
  for (const item of data.items) {
    const subtotal = item.quantity * item.price;
    total += subtotal;
    doc.text(`${item.name}: ¥${item.price.toLocaleString()} × ${item.quantity} = ¥${subtotal.toLocaleString()}`);
  }
  doc.moveDown();
  doc.fontSize(14).text(`合計(税抜): ¥${total.toLocaleString()}`, { align: 'right' });
  doc.text(`消費税(10%): ¥${(total * 0.1).toLocaleString()}`, { align: 'right' });
  doc.text(`合計(税込): ¥${(total * 1.1).toLocaleString()}`, { align: 'right' });

  doc.end();
});

const buffer = await getBuffer();
const base64 = buffer.toString('base64');

return [{
  json: { invoiceNumber: data.invoiceNumber, customerEmail: data.customer.email },
  binary: {
    invoice: {
      data: base64,
      mimeType: 'application/pdf',
      fileName: `${data.invoiceNumber}.pdf`,
    }
  }
}];

Step 3: Gmailで添付送信

To: {{ $json.customerEmail }}
Subject: 【請求書】{{ $json.invoiceNumber }}
Attachments: Binary Field = invoice

Step 4: Google Driveに保存

Operation: File → Upload
File Name: {{ $json.invoiceNumber }}.pdf
Input Data Field Name: invoice
Folder: 請求書/2026年

ポイント・注意事項

  • pdfkitは英語フォントがデフォルト。日本語表示には日本語フォントファイルを登録する必要がある
  • Codeノードでのファイル生成はBinaryデータとして出力する。binary キーに含める
  • 複雑なレイアウトが必要な場合はHTMLテンプレート→Puppeteer PDF変換の方が柔軟

関連機能

  1. 1. 🔄n8n概要 - ワークフロー自動化プラットフォーム
  2. 2. ⚙️n8nワークフローの基本(ノード・コネクション・実行)
  3. 3. n8nトリガーの種類(Webhook・スケジュール・イベント)
  4. 4. 🔀n8nロジック制御(フィルター・条件分岐・ループ・マージ)
  5. 5. 🌐n8n HTTP Request・API連携
  6. 6. 🔗n8n主要インテグレーション(Slack・Gmail・GitHub)
  7. 7. 🛡️n8nエラーハンドリング・デバッグ
  8. 8. 🤖n8n AI・LLMエージェント(Chain・Agent)
  9. 9. 💻n8n Codeノード・カスタム処理
  10. 10. 🏢n8nエンタープライズ機能(ソース管理・シークレット・チーム管理)
  11. 11. 🌤️毎朝SlackにAIで天気・ニュースを通知する
  12. 12. 📊GitHubのPRをGoogleシートに自動記録する
  13. 13. 📧新規ユーザー登録時にWelcomeメールを自動送信する
  14. 14. 💳StripeのWebhookで決済完了を検知して処理する
  15. 15. 📈スケジュールトリガーで週次レポートを自動生成する
  16. 16. 🎫Gmailトリガーでサポートメールを自動Notionチケット化する
  17. 17. 🎯条件分岐でリード属性に応じて担当者を振り分ける
  18. 18. 📨ループ処理でリストを走査し一括メール送信する
  19. 19. 📋複数APIのデータをマージして統合レポートを作成する
  20. 20. 🗄️外部REST APIからデータを取得してDBに保存する
  21. 21. 🔍GraphQL APIでGitHubのIssueを取得・加工する
  22. 22. 🔐Bearer認証付きAPIを呼び出してデータ同期する
  23. 23. SlackとNotionを連携したチームタスク管理フロー
  24. 24. 🤝GmailとHubSpotを連携したCRM自動化フロー
  25. 25. 🚀GitHubデプロイイベントをSlackに通知する
  26. 26. 🚨APIエラー発生時にSlackへアラートを送る
  27. 27. 🔁リトライ付きの堅牢なデータ同期フローを構築する
  28. 28. 📝エラーログをAirtableに自動記録する
  29. 29. 🤖LLMを使ったカスタマーサポート自動応答ボット
  30. 30. 🔎ドキュメントRAG検索システムを構築する
  31. 31. 📬AIでメール内容を自動分類・ルーティングする
  32. 32. 🔧JavaScriptで複雑なデータ変換処理を実装する
  33. 33. 📄npmライブラリを使ったPDF自動生成フロー
  34. 34. ✔️カスタムバリデーションロジックをCodeノードで実装する
  35. 35. 🗂️Gitでワークフローをバージョン管理する
  36. 36. 🌍環境変数で本番・ステージングを切り替える
  37. 37. 👥チームでのワークフロー共同管理フロー
  38. 38. 📋AIで履歴書を自動スクリーニング・スコアリングする
  39. 39. 🧾請求書PDFをOCRで自動データ入力・会計ソフト登録する
  40. 40. 📱ブログ記事→SNS自動投稿パイプラインを構築する
  41. 41. 📦Shopify注文処理を完全自動化する(在庫・配送・顧客通知)
  42. 42. 🔔予約リマインダーを自動送信してノーショーを削減する
  43. 43. 📊経営ダッシュボードを毎朝Slackに自動配信する
  44. 44. 🔭競合情報を自動収集してWeeklyレポートにまとめる
  45. 45. 🎉新入社員オンボーディングを完全自動化する

出典: https://docs.n8n.io/code/