保存的文档签名文档PDF已损坏

保存的文档签名文档PDF已损坏,pdf,docusignapi,Pdf,Docusignapi,我创建了一个接收Docusign webhooks的侦听器页面。从webhook中提取数据时,一切正常,但当我循环浏览文档PDF时,它会创建PDF文件,但它们已损坏,无法打开。当我尝试在Acrobat中打开它时,我收到以下消息:Acrobat无法打开。。。因为它不是受支持的文件类型,或者因为文件已损坏 有人能帮我弄清楚为什么创建的pdf文件被破坏了吗 我的页面代码如下: protected void Page_Load(object sender, EventArgs e) {

我创建了一个接收Docusign webhooks的侦听器页面。从webhook中提取数据时,一切正常,但当我循环浏览文档PDF时,它会创建PDF文件,但它们已损坏,无法打开。当我尝试在Acrobat中打开它时,我收到以下消息:Acrobat无法打开。。。因为它不是受支持的文件类型,或者因为文件已损坏

有人能帮我弄清楚为什么创建的pdf文件被破坏了吗

我的页面代码如下:

 protected void Page_Load(object sender, EventArgs e)
    {
        StreamReader sr = new StreamReader(Request.InputStream);
        string xml = sr.ReadToEnd();
        string fileName = HttpContext.Current.Server.MapPath("") + "\\Results\\" + DateTime.Now.Ticks + ".xml";
        File.WriteAllText(fileName, xml);


        try
        {
            XmlDocument xmldoc = new XmlDocument();
            xmldoc.LoadXml(xml);

            var mgr = new XmlNamespaceManager(xmldoc.NameTable);
            mgr.AddNamespace("a", "http://www.docusign.net/API/3.0");

            XmlNode envelopeStatus = xmldoc.SelectSingleNode("//a:EnvelopeStatus", mgr);
            XmlNode envelopeId = envelopeStatus.SelectSingleNode("//a:EnvelopeID", mgr);
            XmlNode status = envelopeStatus.SelectSingleNode("//a:Status", mgr);

            if (status.InnerText == "Completed")
            {
                LogException("Looking for DocPDF's_" + DateTime.Now.Ticks + ";");
                // Loop through the DocumentPDFs element, storing each document.

                XmlNode docs = xmldoc.SelectSingleNode("//a:DocumentPDFs", mgr);
                foreach (XmlNode doc in docs.ChildNodes)
                {
                    string documentName = doc.ChildNodes[0].InnerText; // pdf.SelectSingleNode("//a:Name", mgr).InnerText;
                    string documentId = doc.ChildNodes[2].InnerText; // pdf.SelectSingleNode("//a:DocumentID", mgr).InnerText;
                    string byteStr = doc.ChildNodes[1].InnerText; // pdf.SelectSingleNode("//a:PDFBytes", mgr).InnerText;

                    LogException("Writing Out PDF_" + HttpContext.Current.Server.MapPath("") + "\\Documents\\" + envelopeId.InnerText + "_" + documentId + "_" + documentName + "_" + DateTime.Now.Ticks + ";");

                    File.WriteAllText(HttpContext.Current.Server.MapPath("") + "\\Documents\\" + envelopeId.InnerText + "_" + documentId + "_" + documentName, byteStr);

                    LogException("Successfully wrote out PDF_" + DateTime.Now.Ticks + ";");
                }
            }
        }
        catch (Exception ex)
        {
            LogException("Exception: " + ex.Message + "; InnerException: " + ex.InnerException.ToString() + "_" + DateTime.Now.Ticks + ";");
        }
    }

@mkl是正确的。Webhook Connect通知消息的PDF内容是base64编码的。对其进行解码以获得PDF文件

示例:见配方第402行-


我正在使用Azure函数并使用Blob存储来保存它。 这对我很有用:

var byteStr = doc.ChildNodes[1].InnerText;
outputBlob.Write(System.Convert.FromBase64String(byteStr));

我不知道Docusign api,但将pdf文档作为文本字符串编写几乎是不正确的。可能byteStr是base64编码的,您必须对其进行解码才能得到实际的pdf?欢迎使用StackOverflow!请投票选出所有有用的答案,包括对他人问题的答案。请选择/检查您自己问题的最佳答案。mlk和Larry K,非常感谢。能够解码我的base64字符串并将其转换为pdf文件。@r如果您喜欢答案,请向上投票并检查它是否是最佳答案。我正在将word documentbytes发送到docusign。我收到电子邮件并签署了该文档。在listener中,我得到了xml响应,我能够得到pdf字节,但当我从中生成文件时,它已损坏。嗨@sanjay,请问一个新问题。
var byteStr = doc.ChildNodes[1].InnerText;
outputBlob.Write(System.Convert.FromBase64String(byteStr));