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

Flutter生成多页PDF遇异常:SQL查询结果分页问题求助

解决Flutter PDF生成中多页表格的分页异常问题

问题出在你把整个Table嵌套在了Column里——Column是无高度限制的容器,会强制Table一次性渲染所有行,导致MultiPage无法正确分割内容,最终触发“超过20页”的异常。

修正方案

直接移除外层的Column,并利用Table的header参数实现每页重复表头,这样MultiPage就能自动处理表格的分页逻辑:

pdf.addPage(pw.MultiPage(
  pageFormat: PdfPageFormat.a4,
  build: (pw.Context context) {
    return <pw.Widget>[
      pw.Table(
        // 设置表头,每页都会重复显示
        header: (context) => pw.TableRow(
          children: data[0].keys.map((e) => pw.Text(e)).toList(),
        ),
        children: data.map((e) {
          return pw.TableRow(
            children: e.values.map((v) => pw.Text(v)).toList(),
          );
        }).toList(),
      )
    ];
  }
));
return pdf.save();

关键说明

  1. 移除Column:MultiPage的build方法返回的widget列表本身支持自动分页,不需要用Column包裹,否则会破坏分页逻辑。
  2. 使用Table.header:原来的写法把表头作为表格的第一行,分页后后面的页面会丢失表头,用header参数可以让表头在每一页顶部重复显示,提升PDF可读性。
  3. 避免强制渲染全部内容:去掉Column后,Table会配合MultiPage按需渲染行,不会一次性生成所有行导致页数超限。

如果需要添加标题等其他内容,直接把它们放在build返回的列表里即可,比如:

return <pw.Widget>[
  pw.Text('查询结果报告', style: pw.TextStyle(fontSize: 18, fontWeight: pw.FontWeight.bold)),
  pw.SizedBox(height: 10),
  // 表格部分
  pw.Table(...),
];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 04:54:24