# # PDF Action API 迁移指南

本章节主要介绍 PDF Action 相关接口从旧版本迁移到新版本的方式，旨在帮助开发者顺利完成代码升级。

## # Action 获取与操作接口变更

### # 旧版本

    // 获取 Additional Action 对象
    Widget#getAdditionalAction(type)
    // 获取 Action 对象
    Widget#getAction();
    // 删除 Link 上的 Additional Action 对象
    Link#removeAction(trigger, action);
    // 删除 Screen 的 Additional Action 对象
    Screen#removeAction(trigger, action);

### # 新版本

    // 注意， 这里的 Annot 指 Widget, Screen, Link 以及 Sound
    // 获取 Action 信息
    await Annot#getActionData();
    // 获取所有 Action 信息（包括 Additional Action 和普通 Action）
    await Annot#getAllActionData();

    // 更新指定 Action
    await Annot#updateAction(targetActionObjNumber, actionData);
    // 移除指定 Action
    await Annot#removeAction(targetActionObjNumber);

    // 获取 AdditionalAction 对象
    const additionalAction = await Annot#getAdditionalAction();

    // 根据触发事件类型和 Action 对象序号移除 Additional Action
    await additionalAction.removeAction(trigger, targetActionObjNumber);
    // 添加新的 Action
    await additionalAction.addAction(trigger, actionSpec);
    // 更新指定的 Action 信息
    await additionalAction.updateActionData(trigger, targetActionObjNumber, actionData);
    // 覆盖指定触发事件类型的所有 Action
    await additionalAction.setAction(trigger, actionSpec);

### # 主要变更说明

- 旧版本通过 `Widget#getAction` 和 `Widget#getAdditionalAction(type)` 方法获取 Action。

- 新版本统一通过 `Annot` 对象（包括 Widget、Screen、Link、Sound）的异步方法来获取和操作 Action。

- 新增了批量获取、更新、移除等更细粒度的 Action 操作能力。

- 对于 AdditionalAction 的操作，新版本需要先通过 `Annot#getAdditionalAction()` 方法获取 AdditionalAction 对象，然后再进行增、删、改、查等操作。

## # ActionCallbackManager.setEmbeddedGotoCallback 回调参数变更

### # 旧版本

旧版本回调参数为 `EmbeddedGotoAction`
(opens new window) 对象：

    const actionCallbackManager = actionpdfviewer.getActionCallbackManager();
    actionCallbackManager.setEmbeddedGotoCallback(async (action) => {
        console.log(action.getDestination());
    });

### # 新版本

新版本回调参数为 `ExecuteActionOptions`
(opens new window) 对象：

    const actionCallbackManager = actionpdfviewer.getActionCallbackManager();
    actionCallbackManager.setEmbeddedGotoCallback(async (options) => {
        console.log(
            options.data,
            options.doc,
            options.ownerQuery,
            options.pdfViewer,
            options.trigger
        );
    });

#### # 主要变更说明

- 新版本的回调参数更加丰富，包括 action 数据、文档对象以及触发来源等信息，便于开发者实现更复杂的业务逻辑。
- 具体字段请参考 API 文档
  (opens new window)。

如需了解更多详细信息，请查阅 API 参考文档
(opens new window)。