2017-02-19 38 views
2

我正在使用Docusign在c#中添加我的PDF文檔的簽名。Docusign在所有頁面上重複簽名標記

我有一些HTML文件,我添加到HTML文件的結尾與文本「SignHere」,Docusign將識別區簽名,但將HTML轉換爲PDF併發送Docusign後,我看到「SignHere」在所有頁面中選擇,而不是最後一個。

我在這裏錯了什麼錯?

我的代碼,將HTML轉換爲PDF文件後:

 if (System.IO.File.Exists(PdfPath)) 
          { 
     byte[] fileBytes = System.IO.File.ReadAllBytes(PdfPath); 
     EnvelopeDefinition envDef = new EnvelopeDefinition(); 
     envDef.EmailSubject = envDefEmailSubject; 
     envDef.EventNotification = new EventNotification(); 
     envDef.EventNotification.Url = envDefEventNotificationUrl; 
     envDef.EventNotification.LoggingEnabled = "true"; 
     envDef.EventNotification.IncludeDocuments = "true"; 
     envDef.EventNotification.RequireAcknowledgment = "true"; 
     envDef.EventNotification.IncludeCertificateWithSoap = "false"; 
     envDef.EventNotification.RequireAcknowledgment = "true"; 
     envDef.EventNotification.UseSoapInterface = "false"; 
     envDef.EventNotification.EnvelopeEvents = new List<EnvelopeEvent>(); 
     EnvelopeEvent envelopeEventSent = new EnvelopeEvent(); 
     envelopeEventSent.EnvelopeEventStatusCode = "sent"; 
             envDef.EventNotification.EnvelopeEvents.Add(envelopeEventSent); 
    EnvelopeEvent envelopeEventDelivered = new EnvelopeEvent(); 
    envelopeEventDelivered.EnvelopeEventStatusCode = "delivered"; 
           envDef.EventNotification.EnvelopeEvents.Add(envelopeEventDelivered); 
    EnvelopeEvent envelopeEventSentCompleted = new EnvelopeEvent(); 
    envelopeEventSentCompleted.EnvelopeEventStatusCode = "completed"; 
    envDef.EventNotification.EnvelopeEvents.Add(envelopeEventSentCompleted); 

    Document doc = new Document(); 
    doc.DocumentBase64 = System.Convert.ToBase64String(fileBytes); 
    doc.Name = docName; 
    doc.DocumentId = docDocumentId; 
    envDef.Documents = new List<Document>(); 
    envDef.Documents.Add(doc); 

    Signer signer = new Signer(); 
    signer.Email = Email; 
    signer.Name = signerName + LeadName; 
    signer.RecipientId = signerRecipientId; 
    signer.Tabs = new Tabs(); 

     //Custom Field For LeadId and PdfName 
    envDef.CustomFields = new CustomFields(); 
    envDef.CustomFields.TextCustomFields = new List<TextCustomField>(); 
    TextCustomField textCustomFieldLeadId = new TextCustomField(); 
           textCustomFieldLeadId.Name = "LeadId"; 
           textCustomFieldLeadId.Value = LeadId; 
           textCustomFieldLeadId.Required = "false"; 
           textCustomFieldLeadId.Name = "false"; 
           envDef.CustomFields.TextCustomFields.Add(textCustomFieldLeadId); 

           TextCustomField textCustomFieldSignedPdfName = new TextCustomField(); 
           textCustomFieldSignedPdfName.Name = "SignedPdfName"; 
           textCustomFieldSignedPdfName.Value = SignedPdfName; 
           textCustomFieldSignedPdfName.Required = "false"; 
           textCustomFieldSignedPdfName.Name = "false"; 
           envDef.CustomFields.TextCustomFields.Add(textCustomFieldSignedPdfName); 

           if (SignHereExist) 
           { 
     signer.Tabs.SignHereTabs = new List<SignHere>(); 
     SignHere signHere = new SignHere(); 
     signHere.RecipientId = signHereRecipientId; 
     signHere.AnchorXOffset = signHereAnchorXOffset;  
     signHere.AnchorYOffset = signHereAnchorYOffset; 
     signHere.AnchorIgnoreIfNotPresent = signHereAnchorIgnoreIfNotPresent; 
     signHere.AnchorUnits = "inches"; 
     signHere.AnchorString = signHereAnchorString; 
     signer.Tabs.SignHereTabs.Add(signHere); 



     envDef.Recipients = new Recipients(); 
     envDef.Recipients.Signers = new List<Signer>(); 
     envDef.Recipients.Signers.Add(signer); 
     envDef.Status = "sent"; 

     ApiClient apiClient = new ApiClient("https://demo.docusign.net/restapi"); 
     DocuSign.eSign.Client.Configuration cfi = new DocuSign.eSign.Client.Configuration(apiClient); 
     string authHeader = "{\"Username\":\"" + x+ "\", \"Password\":\"" + x+ "\", \"IntegratorKey\":\"" + x+ "\"}"; 
      cfi.AddDefaultHeader("X-DocuSign-Authentication", authHeader); 

      EnvelopesApi envelopesApi = new EnvelopesApi(cfi); 
      EnvelopeSummary envelopeSummary = envelopesApi.CreateEnvelope(accountID, envDef); 
} 

回答

2

您在您的要求使用的DocuSign Auto-Place (Anchor Tagging)

signHere.AnchorString = signHereAnchorString; 

這將觸發對文檔中文本的掃描。如果掃描發現文檔中任何位置的變量signHereAnchorString中指定的文本,它會自動將「SignHere」選項放置在文本旁邊。也就是說


你有兩個選擇,如果你想放置標記只在最後一頁

選項1您所看到的所有網頁上「SignHere」選項的原因 - 使用錨標籤:(見文檔here

  • 修改您的文檔包含一個唯一的字符串,你要放置簽名的標籤。在這種情況下,您可以將文本「SignHereLastPage」添加爲白色字體顏色(使其在文檔中不可見),以便將Signature標籤放置到文檔上。使用「SignHereLastPage」作爲錨點字符串。
  • 你只需要改變一行代碼中的

    signHere.AnchorString = "SignHereLastPage"; 
    

選項2 - 固定(或絕對)定位(見文檔here

  • 您可以使用標籤的絕對位置並指定您要放置簽名標籤的位置。參見Api配方here

    signer.Tabs.SignHereTabs = new List<SignHere>(); 
        SignHere signHere = new SignHere(); 
        signHere.DocumentId =docDocumentId; 
        signHere.PageNumber = "1"; // Specify the last Page number here. 
        signHere.RecipientId = signHereRecipientId; 
        signHere.XPosition = "100"; //You can adjust this based on your document 
        signHere.YPosition = "100"; //You can adjust this based on your document 
        signer.Tabs.SignHereTabs.Add(signHere);