You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PayPal API生成/下载PDF发票?求Node.js工具推荐

PayPal PDF发票生成/下载方案及Node.js工具推荐

PayPal官方Invoices API目前没有提供直接生成或下载PDF发票的端点,不过可以通过以下两种方式实现需求:

一、官方间接实现方式

  1. 获取发票详情:先调用GET /v2/invoicing/invoices/{invoice_id}接口拿到完整的发票数据(包括商家信息、客户信息、商品明细、金额等)。
  2. 基于发票公共页面生成PDF:创建发票时接口会返回invoice_url(公开可访问的发票查看链接),可以用无头浏览器加载这个页面并导出PDF。这种方式能完美还原PayPal官方发票的样式,无需自己排版。

二、Node.js工具包推荐

1. Puppeteer(无头浏览器方案)

这是最简便的实现方式,直接抓取PayPal发票页面生成PDF,代码示例:

const puppeteer = require('puppeteer');

async function generatePayPalInvoicePDF(invoiceUrl) {
  const browser = await puppeteer.launch({ headless: 'new' });
  const page = await browser.newPage();
  // 等待页面完全加载,确保所有元素渲染完成
  await page.goto(invoiceUrl, { waitUntil: 'networkidle2' });
  // 生成PDF,可自定义格式、边距等参数
  const pdfBuffer = await page.pdf({
    format: 'A4',
    margin: { top: '20px', right: '20px', bottom: '20px', left: '20px' }
  });
  await browser.close();
  // 可将buffer写入文件或返回给前端
  return pdfBuffer;
}

2. PDFKit(手动构建PDF方案)

如果需要高度定制发票样式,可使用PDFKit基于发票详情手动构建PDF。这种方式需要自己处理所有排版逻辑,但灵活性更高,代码示例:

const PDFDocument = require('pdfkit');
const fs = require('fs');

function buildCustomInvoicePDF(invoiceData) {
  const doc = new PDFDocument();
  // 将PDF写入文件,也可直接返回buffer
  doc.pipe(fs.createWriteStream('custom-invoice.pdf'));

  // 自定义发票内容
  doc.fontSize(22).text('Custom Invoice', { align: 'center' }).moveDown();
  doc.fontSize(14).text(`Invoice ID: ${invoiceData.id}`);
  doc.text(`Issue Date: ${new Date(invoiceData.issue_date).toLocaleDateString()}`).moveDown();
  
  // 添加客户信息
  doc.font('Helvetica-Bold').text('Bill To:', { underline: true }).moveDown();
  doc.font('Helvetica').text(`${invoiceData.primary_recipient.name.given_name} ${invoiceData.primary_recipient.name.surname}`);
  doc.text(invoiceData.primary_recipient.email_address).moveDown();
  
  // 添加商品明细表格(需自行处理表格绘制)
  // ... 此处省略表格绘制逻辑
  
  // 添加总金额
  doc.fontSize(16).text(`Total: ${invoiceData.total.amount.value} ${invoiceData.total.amount.currency_code}`, { align: 'right' });

  doc.end();
}

注意事项

  • 使用Puppeteer时,若发票页面需要登录验证,需提前通过PayPal OAuth获取会话Cookie,在页面加载时注入。
  • 若选择手动构建PDF,需确保完整覆盖发票所有字段,避免遗漏关键信息。

内容的提问来源于stack exchange,提问作者Dima jangveladze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 12:33:21