# 签名服务接口

# 简介

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

# 主要方法

# setVerifyHandler(handler: VerifySignatureHandler)

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

# handler 说明

  • handler 是一个异步函数。通常签名如下:

    async (signatureField, plainContent, signedData, hasDataOutOfScope) => { ... }
    
  • handler 内部,可以获取签名字段的相关信息(例如 filtersubfiltersigner),并将原文和签名数据转发至后端服务进行验证。

# 验签流程说明

  • 验签流程会在以下场景中被触发:

    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 支持异步操作,便于与后端服务集成。

  • 适用范围SignatureServicehandler 仅在 JavaScript Action 验签流程和 PDFSignature.verify 未指定 handler 时生效,对 PDFDoc.verifySignature 无效。