Docusign在所有网页上复制了签名标记

时间:2017-02-19 12:27:34

标签: pdf docusignapi

我正在使用Docusign在c#中添加签名我的PDF文档。

我有一些html文件,我添加到文本“SignHere”的html div的末尾,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);
}

1 个答案:

答案 0 :(得分:2)

您在请求中使用了Docusign Auto-Place (Anchor Tagging)

signHere.AnchorString = signHereAnchorString;

这将触发对文档中文本的扫描。如果扫描在文档中的任何位置找到变量 signHereAnchorString 中指定的文本,它会自动放置&#34; SignHere&#34;文本旁边的选项。这就是你看到&#34; SignHere&#34;所有页面上的选项

如果您只想将标签放在最后一页

,则有几个选项

选项1 - 使用锚标记(参见文档here

  • 修改您的文档,使其包含您要放置Signature标记的唯一字符串。在这种情况下,您可以添加文本&#34; SignHereLastPage&#34;以白色字体颜色(以便在文档中不可见)到您要在文档上放置Signature标签的位置。使用&#34; SignHereLastPage&#34;作为锚弦。
  • 您只需在代码中更改一行

    即可
    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);