У меня есть pdf-файл. Есть ли способ установить заполнитель подписи с помощью docusign в этом файле PDF?
Я не уверен, что здесь не так. поэтому я добавляю здесь полный код. Это не позволяет мне сохранить, поэтому добавьте еще немного текста.
public static EnvelopeDefinition MakeEnvelope(string signerEmail, string signerName, string signerClientId, string docPdf)
{
byte[] buffer = System.IO.File.ReadAllBytes(docPdf);
EnvelopeDefinition envelopeDefinition = new EnvelopeDefinition();
envelopeDefinition.EmailSubject = "Please sign this document";
Document doc1 = new Document();
string doc1b64 = Convert.ToBase64String(buffer);
doc1.DocumentBase64 = doc1b64;
doc1.Name = "Lorem Ipsum"; // can be different from actual file name
doc1.FileExtension = "pdf";
doc1.DocumentId = "3";
envelopeDefinition.Documents = new List<Document> { doc1 };
Signer signer1 = new Signer
{
Email = signerEmail,
Name = signerName,
ClientUserId = signerClientId,
RecipientId = "1",
};
SignHere signHere1 = new SignHere
{
AnchorString = "/sn1/",
AnchorUnits = "pixels",
AnchorXOffset = "10",
AnchorYOffset = "20",
};
Tabs signer1Tabs = new Tabs
{
SignHereTabs = new List<SignHere> { signHere1 },
};
signer1.Tabs = signer1Tabs;
Recipients recipients = new Recipients
{
Signers = new List<Signer> { signer1 },
};
envelopeDefinition.Recipients = recipients;
envelopeDefinition.Status = "sent";
return envelopeDefinition;
}





Да, конечно, конечно. Вот статья, показывающая, как это сделать, и вот соответствующий код C#:
https://developers.docusign.com/docs/esign-rest-api/how-to/request-signature-email-remote/
EnvelopeDefinition env = new EnvelopeDefinition();
env.EmailSubject = "Please sign this document set";
// Create document objects, one per document
Document doc1 = new Document();
string b64 = Convert.ToBase64String(Document1(signerEmail, signerName, ccEmail, ccName));
doc1.DocumentBase64 = b64;
doc1.Name = "Order acknowledgement"; // can be different from actual file name
doc1.FileExtension = "html"; // Source data format. Signed docs are always pdf.
doc1.DocumentId = "1"; // a label used to reference the doc
Document doc2 = new Document
{
DocumentBase64 = doc2DocxBytes,
Name = "Battle Plan", // can be different from actual file name
FileExtension = "docx",
DocumentId = "2",
};
Document doc3 = new Document
{
DocumentBase64 = doc3PdfBytes,
Name = "Lorem Ipsum", // can be different from actual file name
FileExtension = "pdf",
DocumentId = "3",
};
// The order in the docs array determines the order in the envelope
env.Documents = new List<Document> { doc1, doc2, doc3 };
// create a signer recipient to sign the document, identified by name and email
// We're setting the parameters via the object creation
Signer signer1 = new Signer
{
Email = signerEmail,
Name = signerName,
RecipientId = "1",
RoutingOrder = "1",
};
// routingOrder (lower means earlier) determines the order of deliveries
// to the recipients. Parallel routing order is supported by using the
// same integer as the order for two or more recipients.
// create a cc recipient to receive a copy of the documents, identified by name and email
// We're setting the parameters via setters
CarbonCopy cc1 = new CarbonCopy
{
Email = ccEmail,
Name = ccName,
RecipientId = "2",
RoutingOrder = "2",
};
// Create signHere fields (also known as tabs) on the documents,
// We're using anchor (autoPlace) positioning
//
// The DocuSign platform searches throughout your envelope's
// documents for matching anchor strings. So the
// signHere2 tab will be used in both document 2 and 3 since they
// use the same anchor string for their "signer 1" tabs.
SignHere signHere1 = new SignHere
{
AnchorString = "**signature_1**",
AnchorUnits = "pixels",
AnchorYOffset = "10",
AnchorXOffset = "20",
};
SignHere signHere2 = new SignHere
{
AnchorString = "/sn1/",
AnchorUnits = "pixels",
AnchorYOffset = "10",
AnchorXOffset = "20",
};
// Tabs are set per recipient / signer
Tabs signer1Tabs = new Tabs
{
SignHereTabs = new List<SignHere> { signHere1, signHere2 },
};
signer1.Tabs = signer1Tabs;
// Add the recipients to the envelope object
Recipients recipients = new Recipients
{
Signers = new List<Signer> { signer1 },
CarbonCopies = new List<CarbonCopy> { cc1 },
};
env.Recipients = recipients;
// Request that the envelope be sent by setting |status| to "sent".
// To request that the envelope be created as a draft, set to "created"
env.Status = envStatus;
return env;
Я добавил свой код, о котором идет речь.. не могли бы вы проверить его, почему до сих пор не отображается заполнитель подписи?
Я не вижу твой код, только мой
Пожалуйста, проверьте сейчас
@Gazit, теперь он виден вам .. Кроме того, я использую встроенную сеть, поэтому мне не нужно отправлять электронное письмо только для того, чтобы обновить вас.
AnchorString = "/sn1/" является проблемой
У вас есть /sn1/ в вашем документе? возможно нет
Два варианта исправления: либо вы найдете текст в своем документе, где вы хотите, чтобы подпись отображалась, либо замените AnchorString = "/sn1/", на AnchorString = "{TEXT}", каким бы ни был ваш {TEXT}.
Или вы можете использовать фиксированное позиционирование следующим образом:
SignHere signHere = новый SignHere(); signHere.DocumentId = "1"; signHere.PageNumber = "1"; signHere.XPosition = "191"; signHere.YPosition = "148";
Теперь это работает. Большое спасибо за вашу помощь.
Мне нужна ваша еще одна помощь. Теперь, как только пользователь подпишет документ. Теперь, если я хочу получить URL-адрес этого подписанного файла, есть ли способ для этого?
да, но вам нужен URL-адрес или вы хотите загрузить подписанный DOC?
Вы можете сгенерировать URL-адрес так же, как и для подписи, просто нужно сделать это снова, нельзя использовать тот же URL-адрес.
Я хочу, чтобы после того, как пользователь подписал этот PDF-файл, он не смог подписать его снова. Теперь этот подписанный PDF-файл я хочу показать пользователю на другой странице.. поэтому, если я могу получить этот подписанный URL-адрес PDF, то на этой другой странице я могу напрямую показывать..
Дайте мне знать, если я хочу загрузить этот документ, как я могу это сделать?
Попробуйте то, что я предложил, и посмотрите, как это работает
Я пробовал этот код, чтобы получить информацию о конверте var apiClient = new ApiClient(basePath); apiClient.Configuration.DefaultHeader.Add("Authorization", "Bearer " + accessToken.access_token); var envelopesApi = new EnvelopesApi(apiClient); Envelope results = envelopesApi.GetEnvelope(clientId, "79846551-a551-4da6-87cd-589772318f9e");, но получаю эту ошибку Error calling GetEnvelope: {"errorCode":"PARTNER_AUTHENTICATION_FAILED","message":"The specified Integrator Key was not found or is disabled. Invalid account specified for user."}
Как вы получили токен доступа? и было ли это из той же учетной записи, что и конвертИд здесь?
clientId неверен, он должен быть accountId (в вызове GetEnvelope())
ОК .. Я изменю его .. Также у меня есть еще один вопрос, поскольку вы знаете, что я отобразил этот URL-адрес входа в iframe .. так что он работает нормально .. Но теперь, когда пользователь входит в pdf и нажимает кнопку «Готово», я хочу чтобы закрыть этот модальный iframe. Поскольку кнопка «Готово» перенаправляет обратно на URL-адрес перенаправления, так как я могу закрыть этот модальный модуль вместо перенаправления.. Спасибо
Вы перенаправляете на свою собственную страницу с кодом JavaScript, чтобы закрыть модальное окно внутри этой страницы...
Я делаю это, но в Iframe открывается тот же URL-адрес. Я не знаю, как закрыть этот модальный режим. Не могли бы вы дать мне какое-нибудь руководство или пример этого.
вы используете window.close();? а он не закрывается? вы получаете ошибку?
Привет .. Мне удается скрыть это всплывающее окно .. но теперь я столкнулся с одной проблемой .. это похоже на pdf в подписи, он показывает все старые подписи, сделанные пользователями .. Я имею в виду, если я подписал pdf, а затем для другой компании я Я отправляю другой pdf-файл, а затем также в этом pdf-файле, который ранее знак показывает этому новому пользователю. Я добавил изображение, о котором идет речь, для вашей справки. Так что я хочу, чтобы каждый раз, когда когда-либо новый пользователь открывал поле подписи pdf, не должно быть старый знак.. Пожалуйста, дайте мне знать, как я могу это сделать.. Большое спасибо, братан..
Должен ли я добавить все Signhere