You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Java代码自动添加DocuSign的dateSign字段

用Java代码给DocuSign信封添加自动填充的签署日期字段

核心思路

DocuSign的**日期签名字段(Date Signed)**是系统自动填充的,无需在本地PDF中预先创建,而是通过API在信封配置里添加对应标签(Tab),指定位置并关联签署人,签署人完成签名动作后,系统会自动将当前日期填入该字段。

步骤1:引入DocuSign Java SDK依赖

如果使用Maven,在pom.xml中添加依赖:

<dependency>
    <groupId>com.docusign</groupId>
    <artifactId>docusign-esign-java</artifactId>
    <version>6.11.0</version> <!-- 建议使用最新稳定版 -->
</dependency>

步骤2:构建带自动日期字段的信封

以下是完整代码示例,包含API客户端初始化、信封创建、签署人及日期字段配置:

import com.docusign.esign.api.EnvelopesApi;
import com.docusign.esign.client.ApiClient;
import com.docusign.esign.client.Configuration;
import com.docusign.esign.model.*;

import java.util.ArrayList;
import java.util.List;

public class DocuSignAutoDateFieldExample {
    public static void main(String[] args) {
        // 1. 配置API客户端
        String accessToken = "YOUR_ACCESS_TOKEN";
        String accountId = "YOUR_ACCOUNT_ID";
        String basePath = "https://demo.docusign.net/restapi"; // 测试环境,生产环境替换为https://www.docusign.net/restapi

        ApiClient apiClient = new ApiClient(basePath);
        apiClient.addDefaultHeader("Authorization", "Bearer " + accessToken);
        Configuration.setDefaultApiClient(apiClient);

        // 2. 准备待上传的PDF文档
        Document document = new Document();
        document.setDocumentBase64("BASE64_ENCODED_PDF_CONTENT"); // 替换为你的PDF文件Base64编码
        document.setName("待签署文档.pdf");
        document.setDocumentId("1");

        // 3. 创建签署人
        Signer signer = new Signer();
        signer.setEmail("signer_email@example.com");
        signer.setName("签署人姓名");
        signer.setRecipientId("1");
        signer.setRoutingOrder("1");

        // 4. 添加自动填充的日期签名字段
        DateSigned dateTab = new DateSigned();
        dateTab.setDocumentId("1"); // 关联目标文档ID
        dateTab.setRecipientId("1"); // 关联签署人ID
        dateTab.setPageNumber("1"); // 字段显示在文档第1页
        dateTab.setXPosition("500"); // X坐标(根据PDF布局调整,单位:像素)
        dateTab.setYPosition("600"); // Y坐标(根据PDF布局调整,单位:像素)
        dateTab.setTabLabel("签署日期"); // 字段标识标签(可选)
        dateTab.setReadOnly("true"); // 设置为只读,防止签署人修改

        // 将日期字段添加到签署人的标签列表
        List<DateSigned> dateTabs = new ArrayList<>();
        dateTabs.add(dateTab);
        signer.setDateSignedTabs(dateTabs);

        // 5. 构建收件人集合
        Recipients recipients = new Recipients();
        List<Signer> signers = new ArrayList<>();
        signers.add(signer);
        recipients.setSigners(signers);

        // 6. 定义信封参数
        EnvelopeDefinition envelopeDef = new EnvelopeDefinition();
        envelopeDef.setEmailSubject("请签署指定文档");
        envelopeDef.setEmailBlurb("完成签名后,系统会自动添加签署日期");
        envelopeDef.setDocuments(List.of(document));
        envelopeDef.setRecipients(recipients);
        envelopeDef.setStatus("sent"); // 设置为"sent"直接发送信封

        // 7. 发送信封
        try {
            EnvelopesApi envelopesApi = new EnvelopesApi();
            EnvelopeSummary summary = envelopesApi.createEnvelope(accountId, envelopeDef);
            System.out.println("信封发送成功,ID:" + summary.getEnvelopeId());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

关键注意事项

  • 坐标调整:XPosition和YPosition为像素单位,需根据你的PDF实际布局调整,确保日期字段显示在签名区域附近(如签名框下方)。
  • 字段类型:必须使用DateSigned类型标签,而非普通文本字段,否则无法触发系统自动填充逻辑。
  • 权限控制:务必将ReadOnly设为true,避免签署人修改自动生成的日期。
  • 环境切换:测试环境使用https://demo.docusign.net/restapi,生产环境需替换为正式域名,同时使用对应环境的AccessToken和AccountId。

效果验证

签署人完成签名后,打开已签署的文档,指定位置会自动显示签署完成的日期,格式可通过DateFormat属性自定义(如dateTab.setDateFormat("yyyy-MM-dd"))。

内容的提问来源于stack exchange,提问作者ThuyNguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 07:10:22