DocuSign Java Rest Api - объединение тегов привязанного пользовательского файла и преобразования полей формы PDF (составные шаблоны)

В моем приложении у меня есть пакет PDF-файлов, которые я объединяю и отправляю в DocuSign. Это прекрасно работает с использованием SignHere и Initial здесь AnchorTags; однако теперь мне нужно включить некоторые PDF-файлы, требующие поля ввода пользователя (например, форму W-9). Я пробовал несколько способов создания шаблона, но безуспешно. Мне удалось заставить DocuSign распознавать все поля формы PDF (в пользовательском интерфейсе шаблонов), но я не смог передать их пользователю.

У меня есть две важные проблемы:

Во-первых, я не могу заставить 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)
{

} 

Заранее благодарю вас за ваши усилия. Я пытался понять это весь день.

1 ответ

Решение

При указании составного шаблона в определении конверта для создания конверта будет использоваться только информация, указанная в шаблоне CompositeTemplate.

Для вашего сценария вы можете использовать два CompositeTemplates и указать одного и того же подписавшего в обоих. Чтобы поля формы 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)
{

} 
Другие вопросы по тегам