# # 签名服务接口

## # 简介

`SignatureService` 类用于自定义 PDF 签名的验证逻辑。通过设置自定义的验签回调，可以将签名验证请求转发至后端服务或集成第三方验证机制。

## # 主要方法

### # setVerifyHandler(handler: VerifySignatureHandler)

- 功能：设置签名验证回调函数。当 PDF 查看器需要验证签名时，会调用此 `handler`。
- 参数：
  - `handler`：类型为 `VerifySignatureHandler`，签名验证处理函数。
- 返回值：无
- 版本：自 11.0.0 起支持

#### # `handler` 说明

- `handler` 是一个异步函数。通常签名如下：

      async (signatureField, plainContent, signedData, hasDataOutOfScope) => { ... }

- 在 `handler` 内部，可以获取签名字段的相关信息（例如 `filter`、`subfilter`、`signer`），并将原文和签名数据转发至后端服务进行验证。

## # 验签流程说明

- 验签流程会在以下场景中被触发：

  1. JavaScript action 触发：例如，文档打开时 (PDFDoc open action)，鼠标按钮在注释区域释放时 (ANNOT_MOUSE_BUTTON_RELEASED)，自动进行验签。

  2. 用户操作触发：当用户点击已签名的签名域时，会触发验签流程。

  3. 调用 `PDFSignature.verify` 方法：当使用 `PDFSignature` 中的 `verify` 接口时，如果未指定 `verifyHandler` 选项，则默认使用通过 `SignatureService.setVerifyHandler` 设置的 `handler`。

- 注意：

  - `PDFDoc.verifySignature` 方法不会默认使用 `SignatureService` 中设置的 `handler`，需要单独指定。

## # 示例

    const service = pdfViewer.getSignatureService();
    service.setVerifyHandler(async (signatureField, plainContent, signedData, hasDataOutOfScope) => {
        const filter = await signatureField.getFilter();
        const subfilter = await signatureField.getSubfilter();
        const signer = await signatureField.getSigner();

        const formdata = new FormData();
        formdata.append("filter", filter);
        formdata.append("subfilter", subfilter);
        formdata.append("signer", signer);
        formdata.append("plainContent", new Blob([plainContent]), "plainContent");
        formdata.append("signedData", new Blob([signedData]), "signedData");

        const response = await fetch('https://<server>:<port>/<path/to/>verify', {
            method: 'POST',
            body: formdata
        });
        return parseInt(await response.text());
    });

## # 注意事项

- 必须设置验签回调：在调用签名验证流程之前，务必通过 `SignatureService.setVerifyHandler` 设置 `handler`，否则验签流程将抛出异常。

- handler 返回值：`handler` 应返回一个表示验证结果的数字（可参考 表单签名字段 文档中的相关说明）。

- 异步支持：`handler` 支持异步操作，便于与后端服务集成。

- 适用范围：`SignatureService` 的 `handler` 仅在 JavaScript Action 验签流程和 `PDFSignature.verify` 未指定 `handler` 时生效，对 `PDFDoc.verifySignature` 无效。