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

如何用pdfmake从数据库多维数组数据分章节生成动态PDF表格?

使用pdfmake实现你的PDF表格需求

当然可以!pdfmake完全能搞定这个需求,根本不需要换其他方案。我来给你拆解下怎么用它处理你的多维数组数据,生成带两个章节表格的PDF。

1. 先理清楚数据处理逻辑

首先得把你的多维数组里对应章节的数据拆分出来——比如把以consentId开头、对应「同意状态」的对象数组单独提取,「许可状态」的同理。举个贴近你场景的示例数据:

// 你的原始多维数组数据
const consentData = {
  consentId_consentStatus: [
    { userId: 'U001', userName: '张三', status: '已同意', updateTime: '2024-05-20' },
    { userId: 'U002', userName: '李四', status: '已拒绝', updateTime: '2024-05-21' },
    { userId: 'U003', userName: '王五', status: '待确认', updateTime: '2024-05-22' }
  ],
  consentId_permissionStatus: [
    { userId: 'U001', permissionType: '数据读取', status: '已授权', expireTime: '2025-05-20' },
    { userId: 'U002', permissionType: '数据修改', status: '未授权', expireTime: '-' },
    { userId: 'U003', permissionType: '数据删除', status: '已授权', expireTime: '2024-12-31' }
  ]
};

2. 用pdfmake构建带章节的PDF

pdfmake的核心是编写documentDefinition对象,你可以把两个章节作为独立区块,每个区块包含标题和对应的表格。下面是完整的可运行示例:

// 环境适配:Node.js需先npm install pdfmake;浏览器直接引入CDN即可
const pdfMake = require('pdfmake/build/pdfmake');
const pdfFonts = require('pdfmake/build/vfs_fonts');
pdfMake.vfs = pdfFonts.pdfMake.vfs;

// 提取两个章节的目标数据
const consentStatusList = consentData.consentId_consentStatus;
const permissionStatusList = consentData.consentId_permissionStatus;

// 定义PDF文档结构
const documentDefinition = {
  content: [
    // 第1章:同意状态
    {
      text: '1. 同意状态',
      style: 'chapterTitle'
    },
    {
      table: {
        headerRows: 1,
        widths: ['*', '*', '*', '*'], // 列宽用*表示自适应分配
        body: [
          // 表头行
          ['用户ID', '用户名', '同意状态', '更新时间'],
          // 数据行:把对象数组转成表格需要的二维数组
          ...consentStatusList.map(item => [item.userId, item.userName, item.status, item.updateTime])
        ]
      },
      layout: 'lightHorizontalLines' // 可选的表格边框样式
    },
    // 空行分隔两个章节
    { text: '', margin: [0, 20, 0, 0] },
    // 第2章:许可状态
    {
      text: '2. 许可状态',
      style: 'chapterTitle'
    },
    {
      table: {
        headerRows: 1,
        widths: ['*', '*', '*', '*'],
        body: [
          ['用户ID', '许可类型', '许可状态', '到期时间'],
          ...permissionStatusList.map(item => [item.userId, item.permissionType, item.status, item.expireTime])
        ]
      },
      layout: 'lightHorizontalLines'
    }
  ],
  // 自定义样式:比如章节标题的字体和边距
  styles: {
    chapterTitle: {
      fontSize: 16,
      bold: true,
      margin: [0, 0, 0, 10]
    }
  }
};

// 生成并下载PDF(Node.js环境可改为保存到文件)
pdfMake.createPdf(documentDefinition).download('同意与许可状态报告.pdf');

几个关键注意点

  • 数据映射:只要把你的对象数组通过map方法转换成表格需要的二维数组就行,每个对象的属性对应表格的一列,灵活调整即可适配你的实际数据结构。
  • 样式定制:pdfmake支持丰富的样式配置,比如表头加粗、列宽手动指定、表格边框样式等,直接修改styles和layout参数就能实现。
  • 环境兼容:浏览器端直接引入pdfmake的CDN就能用;Node.js环境先安装依赖,再调用fs模块把PDF保存到本地。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:14:25