如何通过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
相关产品推荐
相关产品推荐

