OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  invoice-generator:从 JSON 数据生成专业的 PDF 发票

invoice-generator:从 JSON 数据生成专业的 PDF 发票

 
  app ·  2026-02-07 00:05:23 · 3 次点击  · 0 条评论  

名称: invoice-generator
描述: 根据 JSON 数据生成专业的 PDF 发票。当用户需要创建包含公司/客户详情和明细项目的发票、账单或付款请求时使用。
元数据: {"clawdbot":{"emoji":"🧾","requires":{"bins":["node","jq","weasyprint"],"env":["INVOICE_DIR"]},"primaryEnv":"INVOICE_DIR"}}


发票生成器

根据结构化的 JSON 数据生成 PDF 发票。

设置

  1. 安装 Node.js 依赖:
cd invoice-generator && npm install
  1. 设置 INVOICE_DIR 环境变量(或在 skills.entries.invoice-generator.env 中设置):
export INVOICE_DIR="/path/to/your/invoices"

这将创建以下目录结构:

$INVOICE_DIR/
├── configs/    # 可选:保存的发票配置
└── invoices/   # 生成的 PDF 输出文件

使用方法

# 从标准输入(即时生成)
cat invoice-data.json | {baseDir}/scripts/generate.sh

# 从完整文件路径
{baseDir}/scripts/generate.sh /path/to/invoice-data.json

# 从已保存的配置(在 $INVOICE_DIR/configs/ 中查找)
{baseDir}/scripts/generate.sh client-template
# 加载:$INVOICE_DIR/configs/client-template.json

# 输出文件位于:$INVOICE_DIR/invoices/invoice-{number}.pdf(如果文件已存在,会自动添加版本号)

输入数据格式

JSON 输入必须包含以下字段:

{
  "company": {
    "name": "您的公司",
    "address": "主街 123 号",
    "cityStateZip": "城市,州,12345",
    "country": "国家"
  },
  "client": {
    "name": "客户名称",
    "address": "客户大道 456 号",
    "cityStateZip": "城市,州,67890",
    "country": "国家",
    "taxId": "TAX123"
  },
  "invoice": {
    "number": "INV-2025.01",
    "date": "2025年1月15日",
    "dueDate": "2025年1月30日"
  },
  "items": [
    {
      "description": "服务描述",
      "rate": "1000.00",
      "currency": "USD"
    }
  ],
  "totals": {
    "currency": "USD",
    "total": "1,000.00"
  }
}

完整字段说明请参阅 references/data-schema.md

输出

脚本成功运行后,会输出生成的 PDF 文件路径:

$INVOICE_DIR/invoices/invoice-INV-2025.01.pdf
# 如果该文件名已存在,脚本将写入:
# $INVOICE_DIR/invoices/invoice-INV-2025.01-2.pdf(然后是 -3,依此类推)

错误处理

  • 如果 JSON 无效或缺少必填字段,则以代码 1 退出
  • 如果 weasyprint 生成 PDF 失败,则以代码 2 退出
  • 错误信息将写入 stderr
3 次点击  ∙  0 人收藏  
登录后收藏  
目前尚无回复
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor