【发布时间】:2018-08-09 08:26:27
【问题描述】:
我想使用https://ocr.space/ 的API 来查找给定的文本位置。 我看到了一些主题,但没有一个与 VBA 相关。
我现在的代码是:
Sub test()
Dim pic As String
Dim httpReq As New XMLHTTP60
Dim UserName, Key As String
UserName = Sheets("main").Range("B8")
Key = Sheets("main").Range("B9")
pic = "C:\Users\myname\Desktop\Capture.png"
pic = EncodeFile(pic)
strURL = "https://api.ocr.space/Parse/Image"
httpReq.Open "POST", strURL, False, UserName, Key
httpReq.setRequestHeader "Content-Type", "form-data" ' "application/x-www-form-urlencoded?"
httpReq.setRequestHeader UserName, Key
httpReq.send "base64Image=data:image/png;base64," & pic & "&isOverlayRequired=true"
resp = httpReq.responseText
MsgBox resp
End Sub
我用来获取图片的 base64 字符串的代码如下,但它似乎工作正常,因为如果我将图片粘贴到在线转换器,我可以取回图片。
Public Function EncodeFile(strPicPath As String) As String
Const adTypeBinary = 1 ' Binary file is encoded
' Variables for encoding
Dim objXML
Dim objDocElem
' Variable for reading binary picture
Dim objStream
' Open data stream from picture
Set objStream = CreateObject("ADODB.Stream")
objStream.Type = adTypeBinary
objStream.Open
objStream.LoadFromFile (strPicPath)
' Create XML Document object and root node
' that will contain the data
Set objXML = CreateObject("MSXml2.DOMDocument")
Set objDocElem = objXML.createElement("Base64Data")
objDocElem.DataType = "bin.base64"
' Set binary value
objDocElem.nodeTypedValue = objStream.Read()
' Get base64 value
EncodeFile = objDocElem.Text
' Clean all
Set objXML = Nothing
Set objDocElem = Nothing
Set objStream = Nothing
End Function
你能帮我找出我做错了什么吗?
【问题讨论】:
-
嗨 Nic 感谢您的快速回复。实际上它是通过邮递员工作的,我做了以下事情:POST:api.ocr.space/parse/imageNo auth。设置,无标题,正文:form-data,添加:Apikey、语言、isOverlayRequired 和 base64Image。像这样,我在一秒钟内得到了答案。我认为我应该修改通过 VBA 在正文中发送此信息的方式。这部分应该是有问题的部分:httpReq.send "base64Image=data:image/png;base64," & pic & "&isOverlayRequired=true" 有什么想法吗?
-
我使用base64-image.de 进行检查,但上面的函数使用邮递员也给了我很好的结果。问题是我不想使用邮递员,我只想通过宏发送。
标签: excel vba api ocr ocrspace-ocr-api