# # 自定义拼写

在 Web SDK 的 Canvas 文本编辑场景中，由于无法直接使用 HTML 原生拼写检查功能，自 v11.0.0 起我们通过应用层实现了拼写检查支持。我们为开发者提供了两种方式实现自定义拼写检查功能：

1. 通过接口配置符合 Hunspell 规范的词典文件，实现定制化的拼写检查功能。
2. 自定义 `SpellChecker` 接口

## # 自定义字典

自定义字典需要开发者提供符合 Hunspell 规范的词典文件。开源词典库可参考 wooorm/dictionaries
(opens new window)。

### # 字典规范说明

字典文件需按一下目录结构进行组织：

    /spell-checker-dictionaries-root
    ├── en_US
    │   ├── index.aff    # 拼写规则文件
    │   └── index.dic    # 词典数据文件
    └── fr_FR
        ├── index.aff
        └── index.dic

关键要素说明：

- `/lib/spell-checker/dictionaries`: 所有词典的存储根目录
- `en_US`：以语言编码命名的二级目录
- `index.aff` 和 `index.dic`： 是词典的数据文件

### # 字典接入方法

#### # 接口调用示例

通过 SpellCheckerService 服务进行字典注册：

    // 获取拼写检查服务实例
    const spellCheckerService = pdfViewer.getSpellCheckerService();
    // 注册英国英语词典
    spellCheckerService.appendDictionaries({
        'en-gb': '/lib/spell-checker/dictionaries/en-gb/'
    })

#### # 配置注意事项

1. 路径解析规则

   - 相对路径以 Web Worker (WebPDFJRWorker.js) 脚本位置为基准
   - 建议使用绝对路径确保定位准确

2. 跨域访问控制

   - 若词典文件部署在独立域名下，需配置正确的 CORS 策略
   - 详见 跨域问题解决方案

3. 生效机制

   - 新词典将在下次拼写检查时自动生效
   - 支持运行时动态更新词典配置

## # 自定义 `SpellChecker` 接口实现

如果默认的 Hunspell 词典无法满足需求，开发者可以通过实现自定义的 `SpellChecker` 接口来实现更灵活的拼写检查功能。

### # `SpellChecker` 接口定义

    interface SpellChecker {
       // 检查单词是否拼写正确
        check(word: string): Promise<boolean>;
        // 获取建议单词
        getSuggestedWords(word: string): Promise<Array<string>>;
    }

### # 实现自定义拼写检查器

开发者可以通过实现 `SpellChecker` 接口来创建自定义的拼写检查器。以下是一个简单的示例：

    class CustomSpellChecker implements SpellChecker {
        async check(word: string): Promise<boolean> {
            // 自定义拼写检查逻辑
            // 返回 true 表示单词拼写正确，false 表示拼写错误
            return true; // 示例逻辑
        }

        async getSuggestedWords(word: string): Promise<Array<string>> {
            // 自定义建议单词逻辑
            // 返回一个包含建议单词的数组
            return []; // 示例逻辑
        }
    }

### # 注册自定义拼写检查器

实现自定义拼写检查器后，可以通过以下方式将其注册到 SDK 中：

    // 创建自定义拼写检查器实例
    const customSpellChecker = new CustomSpellChecker();

    // 获取拼写检查服务实例
    const spellCheckerService = pdfViewer.getSpellCheckerService();

    // 注册自定义拼写检查器
    spellCheckerService.setSpellChecker(customSpellChecker);

### # 注意事项

1. 性能优化：

   - 拼写检查操作可能会频繁调用，建议在实现时优化性能，减少重复检查带来的性能损耗。

2. 错误处理：

   - 在 `check` 和 `getSuggestedWords` 方法中，建议添加错误处理逻辑，确保拼写检查功能的稳定性。

3. 动态更新：

   - 支持在运行时动态更新拼写检查器，适用于需要切换不同词典或规则的场景。

通过以上方式，开发者可以灵活地实现自定义拼写检查功能，满足多样化的业务需求。