PDF 生成模板编辑器
开源可视化 PDF 生成引擎,支持自定义模板,并提供面向开发者的 API,灵活构建文档生成流程。
内容编辑事件和历史状态由 CPDFEvent 与编辑 History Manager 分别提供。
| 事件 | 事件数据 | 触发时机 |
|---|---|---|
CPDFEvent.editorSelectionSelected | CPDFEditArea? | 选中可编辑的文本、图片或路径区域。 |
CPDFEvent.editorSelectionDeselected | null | 清除内容编辑选区。 |
内容编辑属性面板关闭时,onContentEditorStyleDialogDismissedCallback 会返回 CPDFContentEditorType。该回调用于同步应用的编辑状态,不改变 SDK 默认行为。
| 场景 | 注册 API | 回调参数 | 替换规则 |
|---|---|---|---|
| 内容编辑撤销/重做状态 | controller.editManager.historyManager. | int pageIndex, bool canUndo, bool canRedo | 再次设置会覆盖旧回调。 |
void _onReaderCreated(CPDFReaderWidgetController controller) {
controller.addEventListener(
CPDFEvent.editorSelectionSelected,
(event) => debugPrint('Selected edit area: $event'),
);
controller.addEventListener(
CPDFEvent.editorSelectionDeselected,
(_) => debugPrint('Editor selection cleared'),
);
controller.editManager.historyManager.setOnHistoryChangedListener(
(pageIndex, canUndo, canRedo) {
debugPrint(
'Editor history: page=$pageIndex, undo=$canUndo, redo=$canRedo',
);
},
);
}editorSelectionSelected 返回 CPDFEditTextArea、CPDFEditImageArea 或 CPDFEditArea(路径区域的 type 为 CPDFEditAreaType.path);editorSelectionDeselected 固定返回 null。Flutter SDK 没有专用的路径区域子类。
每个 History Manager 当前只保存一个回调。再次调用 setOnHistoryChangedListener() 会覆盖之前的回调。撤销、重做及状态查询接口参见撤销和重做。
iOS 的内容编辑 History Listener 还可能在页面切换时触发,用于报告当前页的撤销/重做状态。
History Listener 只报告注册后的状态变化,不会主动发送初始值。初始化撤销/重做按钮时,先调用 canUndo() 和 canRedo():
final history = controller.editManager.historyManager;
final canUndo = await history.canUndo();
final canRedo = await history.canRedo();