2014-09-04 24 views
-1

我需要知道如何將加蓋的pdf發送給數字簽名的收件人。該pdf使用itextsharp加蓋如何在asp.net中使用docusign restful api發送pdf?

我需要api的信封ID嗎?我如何附加使用docusign發送的加蓋pdf?

功能

Private pdfFormFileName As String = "myAcrobatFormFile.pdf" 

Sub Print_Click(ByVal sender As Object, ByVal e As CommandEventArgs) 
    Dim sUniqueKey As String 
    Dim dr As OdbcDataReader 
    Dim sql As String 
    Dim reader As PdfReader 
    Dim sFileName As String = "" 

    Dim sArray As Array 

    sUniqueKey = e.CommandArgument 
    sArray = sUniqueKey.Split(",") 

    sql = "select " 
    sql += "name," 
    sql += "id" 
    sql += " from table" 
    sql += " where key1=" & sArray(0) 
    sql += " and key2=" & sArray(1) 

    oFnc.OpenODBC() 

    selectCommand = New OdbcCommand(sql, oFnc.connWeb) 
    dr = selectCommand.ExecuteReader 
    If dr.Read Then 

     reader = New PdfReader(server.mappath(pdfFormFileName)) 

     sFileName = "data/" & oFnc.GetTimeStamp & "displayForm.pdf" 

     Dim stamper As PdfStamper = New PdfStamper(reader, New System.IO.FileStream(Server.MapPath(sFileName), FileMode.Create)) 


     Dim fields As AcroFields 
     fields = stamper.AcroFields 


     With fields 
      .SetField("txtName", Left(dr("name"), 20)) 
      .SetField("txtId", dr("id") 
     End With 
     stamper.FormFlattening = True 
     stamper.Close() 

    End If 
    dr.Close() 

    oFnc.CloseODBC() 
End Sub 

如何發送此xml

<?xml version="1.0" encoding="UTF-8"?> 
<envelopeDefinition   
xmlns="http://www.docusign.com/restapi"xmlns:xsi="http://www.w3.org/2001/XMLSchema-  
instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<emailBlurb>Annual contract</emailBlurb> 
<emailSubject>API Call for adding signature request to document and  
sending</emailSubject> 
<status>sent</status> 
<documents> 
    <document> 
    <documentId>1</documentId> 
    <name>myAcrobatFormFile.pdf</name> 
    </document> 
</documents> 
<recipients> 
    <signers> 
    <signer> 
     <recipientId>2</recipientId> 
     <email>[email protected]</email> 
     <name>Bob Smith</name> 
    </signer> 
    </signers> 
</recipients> 
</envelopeDefinition> 
+0

閱讀它可能會有所幫助HTTP://www.codeproject。 com/Articles/14488/E-signing-PDF-documents-with-iTextSharp – 2014-09-04 04:52:57

+0

我目前有PDF衝壓代碼工作。 PDF只需要docusign的數字簽名。我需要用於發送pdf的restful api代碼。 – 2014-09-04 04:58:24

+0

我讀了代碼項目,並不是我想要的。我不想通過壓模向PDF上添加簽名簽名。我確實希望發送一個docusign pdf,以便使用docusign雲對接受者進行數字簽名。 – 2014-09-04 05:06:15

回答

1

的的DocuSign API演練,你已經找到是如何做到這一點很好的例子,而API瀏覽器是另一個偉大的工具,向您顯示REST調用的方式。這兩個可以在開發者中心的API工具頁面上找到:

https://www.docusign.com/developer-center/quick-start/api-explorer

的API瀏覽器允許您作出任何API調用,而無需編寫任何代碼。您只需在頁面頂部輸入憑據,選擇要撥打的電話號碼,填寫參數(如果需要),然後按「嘗試IT」按鈕。

不幸的是,API演練沒有Visual Basic示例。然而,有C#的例子(其他.NET技術),特別是這個例子上的本地文件請求籤名:

http://iodocs.docusign.com/APIWalkthrough/requestSignatureFromDocument

0
Sub login_click(ByVal sender As Object, ByVal e As System.EventArgs) 
    'Dim oClient = New WebClient 
    Dim sUrl As String = "https://demo.docusign.net/restapi/v1/login_information?api_password=true&include_account_id_guid=true&login_settings=all" 
    Dim sEmail As String = "[email protected]" 
    Dim sPassword As String = "mypassword" 
    Dim sIntegratorKey As String = "myintegratorkey" 
    Dim sDocumentName As String = "mypdfdocument.pdf" 
    Dim sContentType As String = "application/pdf" 

    Dim oRequest As HttpWebRequest 
    oRequest = initializeRequest(sUrl, "GET", "", sEmail, sPassword, sIntegratorKey) 


    Dim oResponse As HttpWebResponse = oRequest.GetResponse 
    Dim baseURL As String = "" 
    Dim oStreamReader As StreamReader = New StreamReader(oResponse.GetResponseStream) 
    Dim sXML As String = oStreamReader.ReadToEnd 
    baseURL = parseDataFromResponse(sXML, "baseUrl") 
    Dim sXmlBody As String 
    sXmlBody = "<envelopeDefinition xmlns='http://www.docusign.com/restapi'>" & _ 
       "<emailSubject>DocuSign API</emailSubject>" & _ 
       "<status>sent</status>" & _ 
       "<documents>" & _ 
       "<document>" & _ 
       "<documentId>1</documentId>" & _ 
       "<name>" & sDocumentName & "</name>" & _ 
       "</document>" & _ 
       "</documents>" & _ 
       "<recipients>" & _ 
       "<signers>" & _ 
       "<signer>" & _ 
       "<recipientId>1</recipientId>" & _ 
       "<email>[email protected]</email>" & _ 
       "<name>John Smith</name>" & _ 
       "<tabs>" & _ 
       "<signHereTabs>" & _ 
       "<signHere>" & _ 
       "<xPosition>100</xPosition>" & _ 
       "<yPosition>100</yPosition>" & _ 
       "<documentId>1</documentId>" & _ 
       "<pageNumber>1</pageNumber>" & _ 
       "</signHere>" & _ 
       "</signHereTabs>" & _ 
       "</tabs>" & _ 
       "</signer>" & _ 
       "</signers>" & _ 
       "</recipients>" & _ 
       "</envelopeDefinition>" 

    sUrl = baseURL & "/envelopes" 

    oRequest = initializeRequest(sUrl, "POST", "", sEmail, sPassword, sIntegratorKey) 

    configureMultiPartFormDataRequest(oRequest, sXmlBody, sDocumentName, sContentType) 

    Dim sMessage As String 
    sMessage = getResponseBody(oRequest) 
    MsgBox(sMessage) 
    'Dim sUri As String = parseDataFromResponse(sXML, "uri") 

End Sub 
Function getResponseBody(ByRef oRequest As HttpWebRequest) As String 
    Dim oResponse As HttpWebResponse = oRequest.GetResponse 
    Dim oStreamReader As StreamReader = New StreamReader(oResponse.GetResponseStream) 
    Dim sResponseString As String = oStreamReader.ReadToEnd 
    Return (sResponseString) 
End Function 

Sub configureMultiPartFormDataRequest(ByRef oRequest As HttpWebRequest, sXmlBody As String, sDocumentName As String, sContentType As String) 
    oRequest.ContentType = "multipart/form-data; boundary=BOUNDARY" 
    Dim sRequestBodyStart As String = "\r\n\r\n--BOUNDARY\r\n" & _ 
     "Content-Type: application/xml\r\n" & _ 
       "Content-Disposition: form-data\r\n" & _ 
       "\r\n" & _ 
       sXmlBody & "\r\n\r\n--BOUNDARY\r\n" & _ 
       "Content-Type: " & sContentType & "\r\n" & _ 
       "Content-Disposition: file; filename='" & sDocumentName & "'; documentId=1\r\n" & _ 
       "\r\n" 
    Dim sRequestBodyEnd As String = "\r\n--BOUNDARY--\r\n\r\n" 
    Dim oFileStream As FileStream = File.OpenRead(Server.MapPath(sDocumentName)) 
    Dim bodyStart As Byte() = System.Text.Encoding.UTF8.GetBytes(sRequestBodyStart.ToString) 
    Dim bodyEnd As Byte() = System.Text.Encoding.UTF8.GetBytes(sRequestBodyEnd.ToString) 
    Dim oDataStream As Stream = oRequest.GetRequestStream 
    oDataStream.Write(bodyStart, 0, sRequestBodyStart.ToString.Length()) 
    Dim buffer(4096) As Byte 
    Dim iLen As Integer = 0 
    iLen = oFileStream.Read(buffer, 0, 4096) 
    Do While iLen > 0 
     oDataStream.Write(buffer, 0, iLen) 
     iLen = oFileStream.Read(buffer, 0, 4096) 
    Loop 

    oDataStream.Write(bodyEnd, 0, sRequestBodyEnd.ToString.Length()) 
    oDataStream.Close() 

End Sub 

Function initializeRequest(sUrl As String, sMethod As String, sBody As String, sEmail As String, sPassword As String, sIntegratorKey As String) As HttpWebRequest 
    Dim oRequest As HttpWebRequest 

    oRequest = WebRequest.Create(sUrl) 
    oRequest.KeepAlive = False 
    oRequest.Method = sMethod 

    AddRequestHeaders(oRequest, sEmail, sPassword, sIntegratorKey) 
    If sBody <> "" Then 
     AddRequestBody(oRequest, sBody) 
    End If 


    Return (oRequest) 
End Function 
Sub AddRequestHeaders(ByRef oRequest As HttpWebRequest, sEmail As String, sPassword As String, sIntegratorKey As String) 
    oRequest.Headers.Add("X-DocuSign-Authentication", 
     String.Format("<DocuSignCredentials><Username>{0}</Username><Password>{1}</Password><IntegratorKey>{2}</IntegratorKey></DocuSignCredentials>", sEmail, sPassword, sIntegratorKey)) 

    oRequest.Accept = "application/xml" 
    oRequest.ContentType = "application/xml" 
End Sub 
Sub addRequestBody(ByRef oRequest As HttpWebRequest, sRequestBody As String) 
    Dim body As Byte() = System.Text.Encoding.UTF8.GetBytes(sRequestBody) 
    Dim oDataStream As Stream = oRequest.GetRequestStream 
    oDataStream.Write(body, 0, sRequestBody.Length) 
    oDataStream.Close() 

End Sub 
Function parseDataFromResponse(sXML As String, sSearchToken As String) As String 
    Dim oXmlReader As XmlReader = XmlReader.Create(New StringReader(sXML)) 
    Do While oXmlReader.Read() 
     If oXmlReader.NodeType = XmlNodeType.Element And oXmlReader.Name = sSearchToken Then 
      Return oXmlReader.ReadString() 
     End If 
    Loop 
    Return "" 
End Function 
+0

我得到一個404錯誤。爲什麼? – 2014-09-08 22:04:05

+0

文件流將pdf讀入請求流,然後嘗試將其發佈。服務器拒絕該帖子,但錯誤消息不明確。 – 2014-09-08 22:12:32

+0

如何申請簽名?http://iodocs.docusign.com/APIWalkthrough/requestSignatureFromDocument – 2014-09-11 16:57:32