从VBA中的Base64字节数组生成PDF

时间:2018-07-03 08:40:05

标签: vba pdf base64 decode

我从webservice方法获得以下JSON响应,该响应将以PDF格式返回byte []:

JVBERi0xLjQKJeLjz9MKMSAwI......nVq2P63zkirBH1z9aW3pDxn6F7q9TFV==

返回值是一个byte()数组。我已经尝试了几天,尝试使用“ Generating PDF from Base64 string in VBA”中发布的问题之一中提供的功能来从上述Base64 Byte数组生成PDF,但是我不能。

我所做的是基于webservice方法的返回字节数组,我将其保存为字节数组变量名称 b64testByte 。随后,我继续在程序中调用2个方法,即首先调用encodeBase64,然后再调用DecodeBase64。生成PDF文件。但是,当我尝试打开文件时,出现错误消息“错误:文档已损坏,无法修复。Adobe Reader无法打开,因为它不是受支持的文件类型,或者因为文件已损坏(例如,它是作为电子邮件附件发送的,并且未正确解码。”

Dim b64testByte() As Byte
b64testByte = xmlhttp.responseText 

Dim B64String As String
B64String = encodeBase64(b64testByte)


    Dim FilePath As String
    FilePath = "D:\label.pdf"
    Open FilePath For Binary Access Write As #1
    Put #1, 1, DecodeBase64(B64String)
    Close #1


Private Function DecodeBase64(ByVal strData As String) As Byte()
    Dim objXML As Object 'MSXML2.DOMDocument
    Dim objNode As Object 'MSXML2.IXMLDOMElement
    'get dom document
    Set objXML = CreateObject("MSXML2.DOMDocument")
    'create node with type of base 64 and decode
    Set objNode = objXML.createElement("b64")
    objNode.DataType = "bin.base64"
    objNode.Text = strData
    DecodeBase64 = objNode.nodeTypedValue
    'clean up
    Set objNode = Nothing
    Set objXML = Nothing
End Function

Private Function encodeBase64(ByRef arrData() As Byte) As String
    Dim objXML As Object 'MSXML2.DOMDocument
    Dim objNode As Object 'MSXML2.IXMLDOMElement
    'get dom document
    Set objXML = CreateObject("MSXML2.DOMDocument")

    Set objNode = objXML.createElement("b64")
    objNode.DataType = "bin.base64"
    objNode.nodeTypedValue = arrData
    encodeBase64 = objNode.Text

    Set objNode = Nothing
    Set objXML = Nothing
End Function**

0 个答案:

没有答案