我正在尝试使用VBA将URL保存为PDF。我能够下载/创建 文件,但是在打开时我收到错误:
Acrobat无法打开'file.pdf',因为它不是受支持的文件类型,或者因为文件已损坏...
我尝试了几种不同的方式来下载文件,但我怀疑原因是因为我的网址不像http://www.url.com/file.pdf
,而是像http://www.url.com/filegenerated/I
那样页面本身就是PDF,我可以查看并下载。不幸的是,这是一个内部网址,所以我无法发布链接,但这是我的意思的一个例子:
关于我能做什么的任何想法?手动我只需要下载PDF(将鼠标悬停在其上,滚动按钮和下载按钮显示,如上面的屏幕截图),或右键单击和另存为,它将保存为PDF。
这是我迄今为止尝试过的两个宏:
Function SaveWebFile(ByVal vWebfile As String, ByVal vLocalFile As String) As Boolean
Dim oXMLHTTP As Object, i As Long, vFF As Long, oResp() As Byte
Set oXMLHTTP = CreateObject("msxml2.xmlhttp")
oXMLHTTP.Open "GET", vWebfile, False 'Open socket to get the website
oXMLHTTP.Send 'send request
'Wait for request to finish
Do While oXMLHTTP.readyState <> 4
DoEvents
Loop
'Returns the results as a byte array
oResp = oXMLHTTP.ResponseBody
'Create a local file and save result to it
vFF = FreeFile
If Dir(vLocalFile) <> "" Then Kill vLocalFile
Open vLocalFile For Binary As #vFF
Put #vFF, , oResp
Close #vFF
Set oXMLHTTP = Nothing
End Function
和
Private Sub DownloadFile(myURL As String, destFolder As String)
Dim WinHttpReq As Object, oStream As Object
Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
WinHttpReq.Open "GET", myURL, False
WinHttpReq.Send
myURL = WinHttpReq.ResponseBody
If WinHttpReq.Status = 200 Then
Set oStream = CreateObject("ADODB.Stream")
oStream.Open
oStream.Type = 1
oStream.Write WinHttpReq.ResponseBody
oStream.SaveToFile destFolder & "file.pdf", 2 ' 1 = no overwrite, 2 = overwrite
oStream.Close
End If
End Sub
我也试过Chip Pearson's example无济于事。
创建了一个9kb文件,但根据上述错误,它将无法打开。我不认为这是文件,因为当我保存PDF时,它大约是50kb,而不是9kb,所以我认为创建的文件是“占位符”PDF?
答案 0 :(得分:0)
您正在下载HTML格式的网页。使用.pdf
扩展程序保存t并不会奇怪地将其转换为pdf文档。 PDF(可移植文档格式)本身就是一种格式,与HTML格式不同。
将网页另存为pdf文件是浏览器的功能。同样,将Word文档另存为PDF也是Word的功能。
因此,您可以将网页设置为IE,然后告诉IE将其保存为PDF格式。