Skip to content
ComPDF
Guides

文档状态与错误回调

在使用 CPDFReaderView查看 PDF 文档时,ComPDF SDK 提供了多种回调接口,用于获取文档加载状态、操作错误或异常信息。通过这些回调,开发者可以实现文档状态提示、错误处理、日志记录等功能,从而提升用户体验。

说明 本章节主要介绍查看器模式下的回调接口。注释操作、内容编辑等功能的回调请参考相关章节。

文档加载状态回调

IDocumentStatusCallback 用于监听 PDF 文档的加载状态,包括加载中、加载失败和加载完成。

java
readerView.setDocumentStatusCallback(new IDocumentStatusCallback() {
    @Override
    public void onLoading() {
        // 文档加载中
    }

    @Override
    public void onLoadFailed() {
        // 文档加载失败
    }

    @Override
    public void onLoadComplete() {
        // 文档加载完成
        // 注意:如果使用 reloadPages() 方法重新加载页面,也会触发该回调
    }
});
kotlin
readerView.setDocumentStatusCallback(object : IDocumentStatusCallback {
    override fun onLoading() {
        // 文档加载中
    }

    override fun onLoadFailed() {
        // 文档加载失败
    }

    override fun onLoadComplete() {
        // 文档加载完成
        // 注意:如果使用 reloadPages() 方法重新加载页面,也会触发该回调
    }
})

PDF 错误回调与提示

在打开、编辑或操作 PDF 文档时,可能会遇到各种错误或异常情况。SDK 提供了 IPDFErrorMessageCallback 接口,用于捕获这些错误并进行自定义处理,例如向用户显示提示或记录日志。 通过实现该接口,应用可以优雅地处理 PDF 操作异常,提升用户体验。

接口定义

java
interface IPDFErrorMessageCallback {
    fun onError(errorId: ErrorId)
}
  • errorId:错误类型枚举 ErrorId,表示当前发生的错误。

常见错误类型

错误枚举中文说明适用场景
NO_EMAIL_APP未检测到可用的邮箱应用用户尝试通过 PDF 分享到邮箱时
NO_BROWSE_APP未检测到可用的浏览器应用用户尝试打开 PDF 中链接时
NO_CONTENT_TO_PASTE剪贴板中没有内容可粘贴用户使用复制或粘贴功能时
INVALID_LINK无效的链接PDF 内部或外部链接不可用时
NO_TEXT_ON_PAGE页面上没有文本内容用户尝试选择或复制文本时
CANNOT_EDIT当前文档不可编辑文档只读或权限受限
CANNOT_EDIT_ANNOT注释不可编辑注释不可修改或权限受限
CANNOT_EDIT_FORM表单不可编辑表单不可填写或权限受限
CANNOT_ADD_ANNOT无法添加注释当前文档禁止添加注释
CANNOT_ADD_FORM无法添加表单当前文档禁止添加表单
NOT_IN_PDFEDIT_MODE当前未处于 PDF 编辑模式在非编辑模式下尝试操作编辑内容
java
readerView.setPdfErrorMessageCallback(object : IPDFErrorMessageCallback {
    @Override
    public void onError(ErrorId errorId) {
        switch (errorId) {
            case NO_EMAIL_APP:
                // 没有可用的邮箱应用
                break;
            case NO_BROWSE_APP:
                // 没有可用的浏览器应用
                break;
            case NO_CONTENT_TO_PASTE:
                // 剪贴板中没有内容可粘贴
                break;
            case INVALID_LINK:
                // 无效的链接
                break;
            case NO_TEXT_ON_PAGE:
                // 页面上没有文本内容
                break;
            case CANNOT_EDIT:
                // 当前文档不可编辑
                break;
            case CANNOT_EDIT_ANNOT:
                // 注释不可编辑
                break;
            case CANNOT_EDIT_FORM:
                // 表单不可编辑
                break;
            case CANNOT_ADD_ANNOT:
                // 无法添加注释
                break;
            case CANNOT_ADD_FORM:
                // 无法添加表单
                break;
            case NOT_IN_PDFEDIT_MODE:
                // 当前未处于 PDF 编辑模式
                break;
        }
    }
});
kotlin
readerView.setPdfErrorMessageCallback(object : IPDFErrorMessageCallback {
    override fun onError(errorId: ErrorId) {
        val message = when (errorId) {
            ErrorId.NO_EMAIL_APP -> "未检测到可用的邮箱应用"
            ErrorId.NO_BROWSE_APP -> "未检测到可用的浏览器应用"
            ErrorId.NO_CONTENT_TO_PASTE -> "剪贴板中没有内容可粘贴"
            ErrorId.INVALID_LINK -> "无效的链接"
            ErrorId.NO_TEXT_ON_PAGE -> "页面上没有文本内容"
            ErrorId.CANNOT_EDIT -> "当前文档不可编辑"
            ErrorId.CANNOT_EDIT_ANNOT -> "注释不可编辑"
            ErrorId.CANNOT_EDIT_FORM -> "表单不可编辑"
            ErrorId.CANNOT_ADD_ANNOT -> "无法添加注释"
            ErrorId.CANNOT_ADD_FORM -> "无法添加表单"
            ErrorId.NOT_IN_PDFEDIT_MODE -> "当前未处于 PDF 编辑模式"
        }
        Log.e("CPDFError", "PDF Error: $message")
    }
})

模式切换回调

CPDFReaderView 支持多种操作模式,通过设置 模式切换回调,可以在模式变化时获取通知,从而执行自定义操作或更新 UI。

java
readerView.setOnViewModeChangedListener(new OnViewModeChangedListener() {
    @Override
    public void onViewModeChange(ViewMode viewMode) {

    }
});
kotlin
readerView.setOnViewModeChangedListener(object : OnViewModeChangedListener {
    override fun onViewModeChange(viewMode: ViewMode) {

    }
})

触控模式切换回调

用户可以通过手势或工具栏操作切换不同的触控模式。触控模式决定了用户与 PDF 页面交互的行为,例如浏览、添加注释或擦除手绘内容。

OnTouchModeChangedListener 接口提供回调通知开发者触控模式变化,以便进行 UI 更新或功能控制。

触控模式枚举

枚举值中文说明适用场景
BROWSE浏览模式默认查看 PDF 页面,可滚动、缩放
ADD_ANNOT添加注释模式用户选择注释工具后添加注释
EDIT编辑模式编辑文本、表单或图像等内容
SCREENSHOT截图模式用户截取页面截图或局部截图
ERASE_INK擦除手绘模式删除手绘笔记或涂鸦内容
java
readerView.setOnTouchModeChangedListener(new OnTouchModeChangedListener() {
    @Override
    public void onTouchModeChanged(TouchMode touchMode) {

    }
});
kotlin
readerView.setOnTouchModeChangedListener(object : OnTouchModeChangedListener {
    override fun onTouchModeChanged(touchMode: TouchMode) {

    }
})

阅读器交互回调 IReaderViewCallback 接口用于监听用户在 PDF 阅读器中的交互操作,如点击、滚动或跳转页面。通过实现该接口,可以自定义行为或更新 UI。

接口方法说明

方法名中文说明触发场景
onTapMainDocArea()用户点击主文档区域点击 PDF 页面空白区域或文本区域
onMoveToChild(int pageIndex)页面跳转到子文档或子页索引 pageIndex调用跳转页面方法或目录跳转
onEndScroll()滚动操作结束用户停止滑动 PDF 页面
onScrolling()滚动中回调用户滑动 PDF 页面时持续触发
onRecordLastJumpPageNum(int pageIndex)记录用户最后跳转的页面索引 pageIndex页面跳转后可用于恢复上次阅读位置
java
readerView.setReaderViewCallback(new IReaderViewCallback() {
    @Override
    public void onTapMainDocArea() {
        // 用户点击文档区域,可用于隐藏/显示工具栏
    }

    @Override
    public void onMoveToChild(int pageIndex) {
        // 页面跳转到子文档或子页索引 pageIndex,可用于更新页码显示
    }

    @Override
    public void onEndScroll() {
        // 滚动结束,可用于刷新工具栏或触发页面加载完成事件
    }

    @Override
    public void onScrolling() {
        // 页面滚动中,可用于实时更新滚动进度条
    }

    @Override
    public void onRecordLastJumpPageNum(int pageIndex) {
        // 记录最后跳转的页面索引 pageIndex,可用于恢复上次阅读位置
    }
});
kotlin
readerView.setReaderViewCallback(object : IReaderViewCallback {
    override fun onTapMainDocArea() {
        // 用户点击文档区域,可用于隐藏/显示工具栏
    }

    override fun onMoveToChild(pageIndex: Int) {
        // 页面跳转到子文档或子页索引 pageIndex,可用于更新页码显示
    }

    override fun onEndScroll() {
        // 滚动结束,可用于刷新工具栏或触发页面加载完成事件
    }

    override fun onScrolling() {
        // 页面滚动中,可用于实时更新滚动进度条
    }

    override fun onRecordLastJumpPageNum(pageIndex: Int) {
        // 记录最后跳转的页面索引 pageIndex,可用于恢复上次阅读位置
    }
})