2017-02-19 9 views
2

Я использую Docusign для добавления подписи к моим документам PDF в C#.Docusign duplicated Теги подписи на всех страницах

У меня есть некоторый html-файл, я добавляю к концу html div текст «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» рядом с текстом. Именно поэтому вы видите опцию «SignHere» на всех страницах


У вас есть несколько вариантов, если вы хотите поместить метку только на последней странице

Вариант 1 - Использование Якорь Теги: (смотрите документацию here)

  • Изменить документ содержит уникальную строку, где вы хотите поместить подпись тег. В этом случае вы можете добавить текст «SignHereLastPage» в белый цвет шрифта (чтобы он не был виден в документе) туда, куда вы хотите поместить тег Signature в Document. Используйте «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);