You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于C# API实现含动态表格与动态签署人的DocuSign文档签署方案咨询

基于C# API实现含动态表格与动态签署人的DocuSign文档签署方案咨询

这个需求完全可行,而且DocuSign本身就有专门的机制来处理动态内容和签署人场景,结合你提到的PDF生成工具,咱们可以这样来实现:

一、先搞定动态PDF生成:给签名位置留好「标记」

你打算用OpenXML、Aspose或SautinSoft从Word模板生成PDF的思路非常靠谱,核心要注意的是:不要提前硬算坐标,而是在需要签名的位置插入唯一的「文本锚点标记」

比如:

  • 给主签署人的签名位加标记:<<Signer_Main_Sig>>
  • 如果表格每行需要对应签署人签名,可以动态生成带行号的标记:<<Row_1_Signer_Sig>><<Row_2_Signer_Sig>>

这样不管表格行数怎么变、文档分页如何调整,这些标记都会跟着内容跑到正确的位置,后续交给DocuSign自动识别就行。

二、用DocuSign的「文本锚点(Text Anchors)」解决动态坐标问题

这是处理动态内容签名位置的最优方案,不需要你手动计算坐标,DocuSign会自动在PDF里找到你设置的锚点文本,然后把签名标签放在对应位置。

C# API示例代码(简化版)

创建签名标签时,通过配置锚点参数来定位:

// 给第一个签署人创建签名标签
var signHere = new SignHere
{
    AnchorString = "<<Signer_Main_Sig>>", // 对应PDF里的锚点文本
    AnchorUnits = "pixels", // 单位可选pixels/percent
    AnchorXOffset = "10", // 相对于锚点文本的X偏移(避免覆盖标记文本)
    AnchorYOffset = "0",
    RecipientId = "1", // 关联到对应的签署人ID
    Name = "Main Signer Signature"
};

// 如果是表格行的动态签名,循环生成标签即可
for (int i = 1; i <= rowCount; i++)
{
    var rowSignHere = new SignHere
    {
        AnchorString = $"<<Row_{i}_Signer_Sig>>",
        AnchorUnits = "pixels",
        AnchorXOffset = "10",
        RecipientId = "2", // 假设表格行的签署人是第二个角色
        Name = $"Row {i} Signature"
    };
    // 将标签添加到信封的Tabs集合中
}

三、动态签署人的处理:按需生成Recipient对象

在C#里,你可以根据业务数据(比如从数据库、接口获取的签署人列表)动态创建签署人,然后添加到信封的Recipients中:

var recipients = new Recipients
{
    Signers = new List<Signer>()
};

// 假设signerList是你的动态签署人列表(包含Email、Name等信息)
foreach (var signerInfo in signerList)
{
    var signer = new Signer
    {
        Email = signerInfo.Email,
        Name = signerInfo.Name,
        RecipientId = (recipients.Signers.Count + 1).ToString(), // 唯一ID
        RoutingOrder = signerInfo.RoutingOrder // 设置签署顺序(如果需要)
    };
    recipients.Signers.Add(signer);
}

// 将recipients关联到EnvelopeDefinition
var envelopeDefinition = new EnvelopeDefinition
{
    EmailSubject = "请签署这份文档",
    Documents = new List<Document> { /* 你的PDF文档 */ },
    Recipients = recipients,
    Status = "sent" // 直接发送,或者设置为"created"先存草稿
};

四、完整流程总结

  1. 准备Word模板:预留动态表格区域,在所有需要签名的位置插入唯一的文本锚点标记。
  2. 生成动态PDF:用你选择的工具填充表格数据、替换模板内容,生成包含锚点标记的最终PDF。
  3. 调用DocuSign API:动态创建签署人列表,为每个签署人配置对应的文本锚点签名标签,组装信封并发送。
  4. 自动定位签名:DocuSign会自动扫描PDF中的锚点文本,把签名框精准放在对应位置,完全适配表格行数变化和分页情况。

额外注意事项

  • 锚点文本要足够独特,避免和文档其他正常内容重复,比如用<<>>[[ ]]包裹,降低误识别概率。
  • 测试阶段可以先生成PDF,打开确认锚点文本是否正确显示,再通过DocuSign的预览功能验证签名位置是否准确。
  • 如果需要更复杂的签署逻辑(比如不同签署人对应不同表格行),可以给锚点标记加上签署人标识,比如<<Signer_Alice_Row_3_Sig>>,然后对应到指定RecipientId的签署人。

备注:内容来源于stack exchange,提问作者malathyr

火山引擎 最新活动