Skip to content
DemoFAQ

PDF 生成模板编辑器

开源可视化 PDF 生成引擎,支持自定义模板,并提供面向开发者的 API,灵活构建文档生成流程。

查看 GitHub
Flutter Guides Bates number

贝茨码 ​

ComPDF Flutter SDK 自 3.2.0 起支持使用贝茨码为页面添加连续编号,适用于案件材料、合同归档等场景。

以下示例中的 document 为已打开的 CPDFDocument。

dart
import 'package:compdfkit_flutter/document/cpdf_bates.dart';
import 'package:compdfkit_flutter/document/cpdf_header_footer.dart';
import 'package:flutter/material.dart';

添加或更新编号 ​

dart
final pageCount = await document.getPageCount();
final success = await document.updateBates(
  CPDFBates(
    pages: List<int>.generate(pageCount, (index) => index),
    margin: const EdgeInsets.all(36),
    pageOffset: 0,
    slots: const [
      CPDFHeaderFooterSlot(
        position: CPDFHeaderFooterPosition.footerRight,
        text: 'CASE-<<#5#1#>>',
        fontName: 'Helvetica',
        fontSize: 12,
        textColor: Colors.black,
      ),
    ],
  ),
);
if (success) {
  await document.save();
}

CASE-<<#5#1#>> 由前缀 CASE- 和编号模板组成:5 表示编号位数,1 表示起始编号。也可以在模板后添加后缀。

参数说明
pages目标页面索引,从 0 开始
margin距页面边缘的距离,单位为 PDF 点
slots六个页眉页脚位置的文本和样式,位置定义与页眉页脚相同
pageOffsetAndroid 的页码偏移;跨平台示例使用 0
ruleAndroid 的编号规则;跨平台示例沿用默认的 CPDFBatesRule.v2

更新会替换原有位置配置。修改编号模板或样式时,重新传入需要保留的全部配置。

读取编号 ​

dart
final bates = await document.getBates();
if (bates != null) {
  for (final slot in bates.slots) {
    debugPrint('${slot.position.name}: ${slot.text}');
  }
}

未设置贝茨码时返回 null。iOS 返回的 pageOffset 为 0,rule 为 CPDFBatesRule.v2。

清除编号 ​

dart
final cleared = await document.clearBates();
if (cleared) {
  await document.save();
}

添加、修改和清除后需保存文档。需要保留原文件时,使用 saveAs() 输出副本。