Docusignapi DocuSign Java Rest Api-结合锚定标记的自定义文件和PDF表单字段转换(复合模板)

Docusignapi DocuSign Java Rest Api-结合锚定标记的自定义文件和PDF表单字段转换(复合模板),docusignapi,docusigncompositetmplts,Docusignapi,Docusigncompositetmplts,在我的应用程序中,我有一个PDF包,可以合并并发送给DocuSign。使用SignHere和Initial here锚定符可以完美地工作;但是,我现在需要包括某些需要用户输入字段的PDF(例如W-9表单)。我尝试了多种创建模板的方法,但没有成功。我已经能够让DocuSign识别所有的PDF表单字段(在模板UI中),但是我还不能让用户看到这些字段 我有两个重要问题: 首先,我无法让DocuSign同时包含我的自定义文件和在收件人文档中使用输入字段创建的模板 我可以将W-9模板发送给收件人(但不是自

在我的应用程序中,我有一个PDF包,可以合并并发送给DocuSign。使用SignHere和Initial here锚定符可以完美地工作;但是,我现在需要包括某些需要用户输入字段的PDF(例如W-9表单)。我尝试了多种创建模板的方法,但没有成功。我已经能够让DocuSign识别所有的PDF表单字段(在模板UI中),但是我还不能让用户看到这些字段

我有两个重要问题:

首先,我无法让DocuSign同时包含我的自定义文件和在收件人文档中使用输入字段创建的模板

我可以将W-9模板发送给收件人(但不是自定义文件),但不需要任何输入字段或标记

我已将代码粘贴到下面

// create a new envelope to manage the signature request
EnvelopeDefinition envDef = new EnvelopeDefinition();       

envDef.setEmailSubject(documentName);

// add a document to the envelope
Document doc = new Document();          
doc.setDocumentBase64(Base64.getEncoder().encodeToString(fileBytes)); //custom file
doc.setName(documentName); 

//this is the objectid of the ElectronicDocument
doc.setDocumentId(ElectronicDocumentId); 

List<Document> docs = new ArrayList<Document>();
docs.add(doc);
envDef.setDocuments(docs); 


Signer signer = new Signer(); 
signer.setEmail(primarySignerEmail);
signer.setName(primarySignerName);
signer.setRecipientId(primarySignerId); 
signer.setAccessCode(primaryAuthCode); 
signer.setRoleName("PrimaryTenant"); //so we attach them to w9template


////create tab code not included

//create the tabs and assign to signer
Tabs tabs = new Tabs();
tabs.setSignHereTabs(signHereTabs); 
tabs.setInitialHereTabs(initialHereTabs);
tabs.setDateSignedTabs(dateSignedTabs);
signer.setTabs(tabs);


Blob     blob = w9Template.getFileBlob();
int blobLength;
try {
    blobLength = (int) blob.length();
    w9Bytes = blob.getBytes(1, blobLength);     
    blob.free();
} catch (SQLException e) {
    logger.warn(e);
}  

if (w9Bytes != null){

    //create compositTemplate for w-9
    CompositeTemplate compositeTemplate = new CompositeTemplate();
    InlineTemplate inlineTemplate = new InlineTemplate();
    inlineTemplate.setSequence("2");


    //create w-9 document
    Document docw9 = new Document();    
    docw9.setDocumentBase64(Base64.getEncoder().encodeToString(w9Bytes));
    docw9.setName("W-9");               
    docw9.setDocumentId(ElectronicDocumentId); 
    docw9.transformPdfFields("true");

    compositeTemplate.document(docw9);

    inlineTemplate.setRecipients(new Recipients());
    inlineTemplate.getRecipients().setSigners(new ArrayList<Signer>());
    inlineTemplate.getRecipients().getSigners().add(signer);

    List<InlineTemplate> inlineTemplateList = new ArrayList<InlineTemplate>();
    inlineTemplateList.add(inlineTemplate);
    compositeTemplate.inlineTemplates(inlineTemplateList);

    List<CompositeTemplate> compositeTemplateList = new ArrayList<CompositeTemplate>();
    compositeTemplateList.add(compositeTemplate);
    envDef.setCompositeTemplates(compositeTemplateList);            

}

// add recipient(s) to the envelope
envDef.setRecipients(new Recipients());
envDef.getRecipients().setSigners(new ArrayList<Signer>());
envDef.getRecipients().getSigners().add(signer);


// send the envelope by setting |status| to "sent". To save as a draft set to "created"
envDef.setStatus("sent");

try
{               
    // instantiate a new EnvelopesApi object
    EnvelopesApi envelopesApi = new EnvelopesApi();

   // call the createEnvelope() API
   // use the |accountId| we retrieved through authenticate() function to      create the Envelope
  EnvelopeSummary envelopeSummary = envelopesApi.createEnvelope(accountId, envDef);
        logger.debug("EnvelopeSummary: " + envelopeSummary);
}
catch (com.docusign.esign.client.ApiException ex)
{

} 
//创建一个新信封来管理签名请求
EnvelopedDefinition envDef=新的EnvelopedDefinition();
envDef.setEmailSubject(文档名);
//将文档添加到信封
单据单据=新单据();
setDocumentBase64(Base64.getEncoder().encodeToString(fileBytes))//自定义文件
doc.setName(documentName);
//这是电子文档的目标
文件setDocumentId(电子文档ID);
列表文档=新建ArrayList();
docs.add(doc);
环境定义文件(文件);
签名者签名者=新签名者();
signer.setEmail(primarySignerEmail);
signer.setName(primarySignerName);
signer.setRecipientId(primarySignerId);
signer.setAccessCode(primaryAuthCode);
签字人:setRoleName(“主要承租人”)//所以我们将它们附加到w9template
////不包括创建选项卡代码
//创建选项卡并分配给签名者
制表符=新制表符();
tabs.setSignHereTabs(signHereTabs);
tabs.setInitialHereTabs(initialHereTabs);
tabs.setDateSignedTabs(dateSignedTabs);
签名者。设置选项卡(选项卡);
Blob Blob=w9Template.getFileBlob();
内部膨胀;
试一试{
blobLength=(int)blob.length();
w9Bytes=blob.getBytes(1,blobLength);
blob.free();
}捕获(SQLE异常){
记录器警告(e);
}  
如果(w9Bytes!=null){
//为w-9创建合成模板
CompositeTemplate CompositeTemplate=新的CompositeTemplate();
InlineTemplate InlineTemplate=新的InlineTemplate();
inlineTemplate.setSequence(“2”);
//创建w-9文档
Document docw9=新文档();
setDocumentBase64(Base64.getEncoder().encodeToString(w9Bytes));
docw9.集合名(“W-9”);
docw9.setDocumentId(电子文档ID);
文件9.TransformPdfields(“真实”);
复合模板文件(docw9);
setRecipients(新收件人());
inlineTemplate.getRecipients().setSigners(新ArrayList());
inlineTemplate.getRecipients().getSigners().add(签名者);
List inlineTemplateList=新的ArrayList();
添加(inlineTemplate);
compositeTemplate.inlineTemplates(inlineTemplateList);
List compositeTemplateList=新建ArrayList();
compositeTemplateList.add(compositeTemplate);
envDef.setCompositeTemplates(compositeTemplateList);
}
//将收件人添加到信封中
setRecipients(新收件人());
envDef.getRecipients().setSigners(新ArrayList());
envDef.getRecipients().getSigners().add(签名者);
//通过将“状态”设置为“已发送”发送信封。保存为草稿集的步骤设置为“已创建”
环境定义设置状态(“已发送”);
尝试
{               
//实例化一个新的EnvelopesApi对象
EnvelopesApi EnvelopesApi=新的EnvelopesApi();
//调用createEnvelope()API
//使用通过authenticate()函数检索到的| accountId |创建信封
EnvelopesSummary EnvelopesSummary=envelopesApi.createEnvelope(accountId,envDef);
调试(“EnvelopesSummary:+EnvelopesSummary”);
}
catch(com.docusign.esign.client.ApiException)
{
} 

首先,我感谢你的努力。我一整天都在想这个问题

在信封定义中指定复合模板时,只有在CompositeTemplate中指定的信息将用于创建信封

对于您的场景,您可以使用两个CompositeTemplate并在其中指定相同的签名者。要识别PDF表单字段,必须将签名者的“DefaultRecipient”属性设置为true

您可以在自己的CompositeTemplate中指定每个文档。这将确保您的两份文件都在信封中

我已经更新了你的代码

// create a new envelope to manage the signature request
EnvelopeDefinition envDef = new EnvelopeDefinition();       
envDef.setEmailSubject(documentName);

// add a document to the envelope
Document doc = new Document();          
doc.setDocumentBase64(Base64.getEncoder().encodeToString(fileBytes)); //custom file
doc.setName(documentName); 

//this is the objectid of the ElectronicDocument
doc.setDocumentId(ElectronicDocumentId); 

Signer signer = new Signer(); 
signer.setEmail(primarySignerEmail);
signer.setName(primarySignerName);
signer.setRecipientId(primarySignerId); 
signer.setAccessCode(primaryAuthCode); 
signer.setDefaultRecipient("true");
signer.setRoleName("PrimaryTenant"); //so we attach them to w9template


////create tab code not included

//create the tabs and assign to signer
Tabs tabs = new Tabs();
tabs.setSignHereTabs(signHereTabs); 
tabs.setInitialHereTabs(initialHereTabs);
tabs.setDateSignedTabs(dateSignedTabs);
signer.setTabs(tabs);

CompositeTemplate compositeTemplate1 = new CompositeTemplate();
InlineTemplate inlineTemplate1 = new InlineTemplate();
inlineTemplate1.setSequence("1");

compositeTemplate1.document(doc);

inlineTemplate1.setRecipients(new Recipients());
inlineTemplate1.getRecipients().setSigners(new ArrayList<Signer>());
inlineTemplate1.getRecipients().getSigners().add(signer);

List<InlineTemplate> inlineTemplateList1 = new ArrayList<InlineTemplate>();
inlineTemplateList1.add(inlineTemplate1);
compositeTemplate.inlineTemplates(inlineTemplateList1);

 List<CompositeTemplate> compositeTemplateList = new ArrayList<CompositeTemplate>();
 compositeTemplateList.add(compositeTemplate1);


 Blob     blob = w9Template.getFileBlob();
 int blobLength;
 try 
 {
    blobLength = (int) blob.length();
    w9Bytes = blob.getBytes(1, blobLength);     
    blob.free();
 } catch (SQLException e) {
    logger.warn(e);
 }  

if (w9Bytes != null)
{
    //create compositTemplate for w-9
    CompositeTemplate compositeTemplate2 = new CompositeTemplate();
    InlineTemplate inlineTemplate2 = new InlineTemplate();
    inlineTemplate2.setSequence("2");


    //create w-9 document
    Document docw9 = new Document();    
    docw9.setDocumentBase64(Base64.getEncoder().encodeToString(w9Bytes));
    docw9.setName("W-9");               
    docw9.setDocumentId(ElectronicDocumentId); 
    docw9.transformPdfFields("true");

    compositeTemplate2.document(docw9);

    Signer signer2 = new Signer(); 
    signer2.setEmail(primarySignerEmail);
    signer2.setName(primarySignerName);
    signer2.setRecipientId(primarySignerId); 
    signer2.setAccessCode(primaryAuthCode);
    signer2.setDefaultRecipient("true");

    inlineTemplate2.setRecipients(new Recipients());
    inlineTemplate2.getRecipients().setSigners(new ArrayList<Signer>());
    inlineTemplate2.getRecipients().getSigners().add(signer2);

    List<InlineTemplate> inlineTemplateList2 = new ArrayList<InlineTemplate>();
    inlineTemplateList2.add(inlineTemplate);
    compositeTemplate2.inlineTemplates(inlineTemplateList2);

    compositeTemplateList.add(compositeTemplate2); 
}

envDef.setCompositeTemplates(compositeTemplateList); 



// send the envelope by setting |status| to "sent". To save as a draft set to "created"
envDef.setStatus("sent");

try
{               
    // instantiate a new EnvelopesApi object
    EnvelopesApi envelopesApi = new EnvelopesApi();

   // call the createEnvelope() API
   // use the |accountId| we retrieved through authenticate() function to      create the Envelope
    EnvelopeSummary envelopeSummary = envelopesApi.createEnvelope(accountId, envDef);
        logger.debug("EnvelopeSummary: " + envelopeSummary);
}
catch (com.docusign.esign.client.ApiException ex)
{

} 
//创建一个新信封来管理签名请求
EnvelopedDefinition envDef=新的EnvelopedDefinition();
envDef.setEmailSubject(文档名);
//将文档添加到信封中
单据单据=新单据();
setDocumentBase64(Base64.getEncoder().encodeToString(fileBytes))//自定义文件
doc.setName(documentName);
//这是电子文档的目标
文件setDocumentId(电子文档ID);
签名者签名者=新签名者();
signer.setEmail(primarySignerEmail);
signer.setName(primarySignerName);
signer.setRecipientId(primarySignerId);
signer.setAccessCode(primaryAuthCode);
签名人。setDefaultRecipient(“真”);
签字人:setRoleName(“主要承租人”)//所以我们将它们附加到w9template
////不包括创建选项卡代码
//创建选项卡并分配给签名者
制表符=新制表符();
tabs.setSignHereTabs(signHereTabs);
tabs.setInitialHereTabs(initialHereTabs);
tabs.setDateSignedTabs(dateSignedTabs);
签名者。设置选项卡(选项卡);
CompositeTemplate compositeTemplate1=新的CompositeTemplate();
InlineTemplate inlineTemplate1=新的InlineTemplate();
inlineTemplate1.设置顺序(“1”);
compositeTemplate1.文件(doc);
inlineTemplate1.setRecipients(新收件人());
inlineTemplate1.getRecipients().setSigners(新ArrayList());
inlineTemplate1.getRecipients().getSigners().add(signer);
List inlineTemplateList1=新的ArrayList();
inlineTemplateList1.add(inlineem