PDF 生成模板编辑器
开源可视化 PDF 生成引擎,支持自定义模板,并提供面向开发者的 API,灵活构建文档生成流程。
ComPDF Flutter SDK 自 3.2.0 起支持使用贝茨码为页面添加连续编号,适用于案件材料、合同归档等场景。
以下示例中的 document 为已打开的 CPDFDocument。
import 'package:compdfkit_flutter/document/cpdf_bates.dart';
import 'package:compdfkit_flutter/document/cpdf_header_footer.dart';
import 'package:flutter/material.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 | 六个页眉页脚位置的文本和样式,位置定义与页眉页脚相同 |
pageOffset | Android 的页码偏移;跨平台示例使用 0 |
rule | Android 的编号规则;跨平台示例沿用默认的 CPDFBatesRule.v2 |
更新会替换原有位置配置。修改编号模板或样式时,重新传入需要保留的全部配置。
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。
final cleared = await document.clearBates();
if (cleared) {
await document.save();
}添加、修改和清除后需保存文档。需要保留原文件时,使用 saveAs() 输出副本。