Skip to content
ComPDF
Guides

注释操作回调

本章节介绍 CPDFReaderView 在注释模式下提供的回调接口,包括注释的选择、取消选择、添加等事件。通过这些回调,开发者可以监听用户对注释的操作,并执行自定义逻辑或 UI 更新,为注释交互功能提供更丰富的控制能力。本章节将持续更新,覆盖高亮、手写、印章、表单等各种注释类型的回调接口。

选中注释回调

CPDFSelectAnnotCallback 用于监听用户对 PDF 注释的选择和取消选择事件。通过该回调,开发者可以在注释被选中或取消选中时执行自定义操作,例如显示属性面板、修改样式或触发其他 UI 更新。

接口方法说明

方法名中文说明触发场景
onAnnotationSelected注释被选中用户点击或框选注释时触发
onAnnotationDeselected注释取消选择用户点击空白区域或选中其他注释时触发
java
readerView.setSelectAnnotCallback(new CPDFSelectAnnotCallback() {
    @Override
    public void onAnnotationSelected(CPDFPageView cpdfPageView,
                                     CPDFBaseAnnotImpl<CPDFAnnotation> cpdfBaseAnnot) {
        // 注释被选中,可显示属性面板或高亮选中状态
    }

    @Override
    public void onAnnotationDeselected(CPDFPageView cpdfPageView,
                                       @Nullable CPDFBaseAnnotImpl<CPDFAnnotation> cpdfBaseAnnot) {
        // 注释取消选择,可隐藏属性面板或取消高亮
    }
});
kotlin
readerView.setSelectAnnotCallback(object : CPDFSelectAnnotCallback {
    override fun onAnnotationSelected(
        cpdfPageView: CPDFPageView,
        cpdfBaseAnnot: CPDFBaseAnnotImpl<CPDFAnnotation>
    ) {
        // 注释被选中,可显示属性面板或高亮选中状态
    }

    override fun onAnnotationDeselected(
        cpdfPageView: CPDFPageView,
        cpdfBaseAnnot: CPDFBaseAnnotImpl<CPDFAnnotation>?
    ) {
        // 注释取消选择,可隐藏属性面板或取消高亮
    }
})

创建注释回调

CPDFAddAnnotCallback 用于监听用户在文档中添加注释的事件。通过该回调,开发者可以在注释创建后执行自定义逻辑,例如记录日志、更新数据库或对新注释进行样式设置。

接口方法说明

方法名中文说明触发场景
onAddAnnotation注释被添加到文档中用户完成添加注释操作后触发
java
readerView.setPdfAddAnnotCallback(new CPDFAddAnnotCallback() {
    @Override
    public void onAddAnnotation(CPDFPageView cpdfPageView,
                                CPDFBaseAnnotImpl<CPDFAnnotation> cpdfBaseAnnot) {
        // 新注释添加完成,可执行自定义逻辑,如高亮或记录日志
    }
});
kotlin
readerView.setPdfAddAnnotCallback(object : CPDFAddAnnotCallback {
    override fun onAddAnnotation(
        cpdfPageView: CPDFPageView,
        cpdfBaseAnnot: CPDFBaseAnnotImpl<CPDFAnnotation>
    ) {
        // 新注释添加完成,可执行自定义逻辑,如高亮或记录日志
    }
})

撤销与重做回调

CPDFReaderView 提供了撤销与重做管理器 CPDFUndoManager,用于跟踪用户在 PDF 文档上的操作历史,包括注释添加、删除、属性修改等。通过监听撤销历史变化或直接调用撤销/重做方法,开发者可以实现自定义的撤销重做功能、界面状态更新或操作记录。

说明

撤销管理器适用于注释编辑、表单填写、手绘等操作,能够帮助开发者精确控制用户的操作历史。

1. 获取撤销管理器

java
CPDFUndoManager manager = readerView.getUndoManager();

2. 撤销历史变化回调

OnUndoHistoryChangeListener 用于监听操作历史变化,包括插入、删除、修改或清空操作。

操作类型枚举 Operation

枚举值中文说明触发场景
INSERT插入操作新增注释或表单元素
REMOVE删除操作删除注释或表单元素
ATTRIBUTE属性修改修改注释颜色、透明度、大小等属性
REMOVE_ALL清空所有操作清空文档中所有可撤销操作

方法示例

java
manager.addOnUndoHistoryChangeListener(new OnUndoHistoryChangeListener() {
    @Override
    public void onUndoHistoryChanged(@NonNull CPDFUndoManager cpdfUndoManager,
                                     Operation operation,
                                     Type type) {
        // operation: 当前操作类型,例如 INSERT、REMOVE
        // type: 操作对象类型(注释、表单)
        Log.d("UndoManager", "操作类型: " + operation + ", 对象类型: " + type);
    }
});
kotlin
manager.addOnUndoHistoryChangeListener(object : OnUndoHistoryChangeListener {
    override fun onUndoHistoryChanged(cpdfUndoManager: CPDFUndoManager,
                                      operation: Operation,
                                      type: Type) {
        // operation: 当前操作类型,例如 INSERT、REMOVE
        // type: 操作对象类型(注释、表单)
        Log.d("UndoManager", "操作类型: $operation, 对象类型: $type")
    }
})

3. 启用/禁用撤销管理器

java
manager.enable(true);   // 启用撤销管理
boolean isEnabled = manager.isEnable(); // 查询是否启用
kotlin
manager.enable(true)           // 启用撤销管理
val isEnabled = manager.isEnable() // 查询是否启用

4. 撤销与重做操作

java
manager.undo();      // 执行撤销
manager.redo();      // 执行重做
boolean canRedo = manager.canRedo(); // 是否可重做
boolean canUndo = manager.canUndo(); // 是否可撤销
kotlin
manager.undo()           // 执行撤销
manager.redo()           // 执行重做
val canRedo = manager.canRedo() // 是否可重做
val canUndo = manager.canUndo() // 是否可撤销

5. 清空操作历史

java
manager.clearHistory();  // 清空撤销/重做历史
kotlin
manager.clearHistory()   // 清空撤销/重做历史