Skip to content

PDF 生成模板编辑器

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

查看 GitHub
Guides

内容编辑事件与历史状态

内容编辑事件和历史状态由 CPDFEvent 与编辑 History Manager 分别提供。

事件事件数据触发时机
CPDFEvent.editorSelectionSelectedCPDFEditArea?选中可编辑的文本、图片或路径区域。
CPDFEvent.editorSelectionDeselectednull清除内容编辑选区。

内容编辑属性面板关闭时,onContentEditorStyleDialogDismissedCallback 会返回 CPDFContentEditorType。该回调用于同步应用的编辑状态,不改变 SDK 默认行为。

场景注册 API回调参数替换规则
内容编辑撤销/重做状态controller.editManager.historyManager.
setOnHistoryChangedListener()
int pageIndex, bool canUndo, bool canRedo再次设置会覆盖旧回调。
dart
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 返回 CPDFEditTextAreaCPDFEditImageAreaCPDFEditArea(路径区域的 typeCPDFEditAreaType.path);editorSelectionDeselected 固定返回 null。Flutter SDK 没有专用的路径区域子类。

每个 History Manager 当前只保存一个回调。再次调用 setOnHistoryChangedListener() 会覆盖之前的回调。撤销、重做及状态查询接口参见撤销和重做

iOS 的内容编辑 History Listener 还可能在页面切换时触发,用于报告当前页的撤销/重做状态。

History Listener 只报告注册后的状态变化,不会主动发送初始值。初始化撤销/重做按钮时,先调用 canUndo()canRedo()

dart
final history = controller.editManager.historyManager;
final canUndo = await history.canUndo();
final canRedo = await history.canRedo();