Guides
复制页面
ComPDF Flutter SDK 提供页面复制接口,用于复制当前 PDF 文档中的指定页面,并将复制后的页面插入到目标位置。这个接口适合用于页面重排、模板页复用和快速生成相似内容页面的场景。
API 概览
页面复制接口位于 CPDFDocument:
dart
Future<bool> copyPage({
required int pageIndex,
required int insertIndex,
});参数说明:
| 参数 | 说明 |
|---|---|
pageIndex | 要复制的源页面索引,从 0 开始 |
insertIndex | 复制页面插入位置,从 0 开始;传入 -1 时表示追加到文档末尾 |
返回值为 bool:
true:页面复制并插入成功。false:页面索引无效、插入位置无效,或原生平台复制失败。
复制指定页面
使用 copyPage(pageIndex, insertIndex) 可以复制当前文档中的某一页,并将副本插入到指定位置。
dart
final CPDFDocument document = await CPDFDocument.createInstance();
await document.open('/path/to/sample.pdf');
final bool result = await document.copyPage(
pageIndex: 0,
insertIndex: 1,
);
print('Copy page result: $result');上面示例会将第 1 页复制一份,并插入到第 2 页之前。
如果将 insertIndex 设为 -1,则会把复制页追加到文档末尾:
dart
final bool result = await document.copyPage(
pageIndex: 0,
insertIndex: -1,
);在 CPDFReaderWidget 中使用
在阅读器页面中,可以通过 CPDFReaderWidgetController.document 调用相同接口。复制完成后,通常需要刷新阅读器页面以显示新的页数。
dart
Future<void> copyCurrentPage(CPDFReaderWidgetController controller) async {
final int pageIndex = await controller.getCurrentPageIndex();
final bool result = await controller.document.copyPage(
pageIndex: pageIndex,
insertIndex: -1,
);
if (result) {
controller.reloadPages();
}
}这个方式适用于在自定义工具栏、页面菜单或批量页面操作中提供页面复制能力。
完整示例
下面示例演示如何打开 PDF,将第一页复制并追加到文档末尾。
dart
import 'package:compdfkit_flutter/document/cpdf_document.dart';
Future<void> duplicateFirstPage(String filePath) async {
final CPDFDocument document = await CPDFDocument.createInstance();
await document.open(filePath);
final bool result = await document.copyPage(
pageIndex: 0,
insertIndex: -1,
);
if (!result) {
throw Exception('Copy page failed.');
}
print('Page copied successfully.');
}注意事项
pageIndex必须是当前文档中存在的页面索引,否则接口会返回false。insertIndex支持0..pageCount,传入-1时表示追加到文档末尾。- 页面复制会改变文档页数,如果你在阅读器中使用该接口,请在成功后刷新页面状态。
- 当文档为空、页面索引无效或原生 SDK 不支持当前文档状态时,接口会返回
false。 - 如果需要复制多页,请按业务顺序多次调用
copyPage,或先将目标页整理后再执行复制。