我需要将PDF转换为基本64字符串,以便我可以将其发送到XML文件中。我使用excel电子表格来存储我们需要进入XML的所有数据,然后使用一些将XML打印到文件的VBA代码。所述XML文件的收件人无法打开我的PDF。 Adobe表示它不是.pdf文件,或者它已损坏。我做了一些额外的代码来测试我原来的转换,我也遇到了同样的问题。 XSD指定数据的类型应为xsd:base64Binary
第一个函数是生成以XML格式发送的字符串。第二个函数是从第一个函数调用的,纯粹是出于我的测试目的。
我在其他stackoverflow线程上找到了这个代码并将它从几个源拼接在一起,但它在使用的不同常量值中略有不同(例如“Base64Data”,“b64”和“Base64”都是我见过的输入for objXML.createElement)。我也有一种感觉,我已经以相反的顺序得到了文本/二进制和读/写函数。生成一个非常类似于base64二进制文件的字符串,尽管当我快速扫描生成的XML时,有些部分看起来很可疑。
Function processBase64Binary(ByVal filePath As String) As String
'define objects used
Dim mstream As Stream
Dim objXML As MSXML2.DOMDocument
Dim objNode As MSXML2.IXMLDOMElement
'load the data from the filepath provided
Set mstream = New Stream
mstream.Type = adTypeBinary
mstream.Open
mstream.LoadFromFile filePath
'convert to base 64 binary and convert to a string to be used in XML
Set objXML = New MSXML2.DOMDocument
Set objNode = objXML.createElement("Base64Data")
objNode.DataType = "bin.base64"
objNode.nodeTypedValue = mstream.Read()
myText = objNode.Text
testDecode (myText)
processBase64Binary = myText
End Function
Sub testDecode(ByVal strData As String)
Dim mstream As Stream
Dim objXML As MSXML2.DOMDocument
Dim objNode As MSXML2.IXMLDOMElement
Set objXML = New MSXML2.DOMDocument
Set objNode = objXML.createElement("Base64Data")
objNode.DataType = "bin.base64"
objNode.Text = strData
decodeBase64 = objNode.nodeTypedValue
Set mstream = New Stream
mstream.Type = adTypeText
mstream.Open
mstream.WriteText (strData)
mstream.SaveToFile ("D:\tested5.pdf")
End Sub