从URL创建/保存PDF - 文件未正确下载

时间:2017-04-25 16:10:43

标签: vba

我正在尝试使用VBA将URL保存为PDF。我能够下载/创建 文件,但是在打开时我收到错误:

  

Acrobat无法打开'file.pdf',因为它不是受支持的文件类型,或者因为文件已损坏...

我尝试了几种不同的方式来下载文件,但我怀疑原因是因为我的网址不像http://www.url.com/file.pdf,而是像http://www.url.com/filegenerated/I那样页面本身就是PDF,我可以查看并下载。不幸的是,这是一个内部网址,所以我无法发布链接,但这是我的意思的一个例子:

enter image description here

关于我能做什么的任何想法?手动我只需要下载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?

1 个答案:

答案 0 :(得分:0)

您正在下载HTML格式的网页。使用.pdf扩展程序保存t并不会奇怪地将其转换为pdf文档。 PDF(可移植文档格式)本身就是一种格式,与HTML格式不同。

将网页另存为pdf文件是浏览器的功能。同样,将Word文档另存为PDF也是Word的功能。

因此,您可以将网页设置为IE,然后告诉IE将其保存为PDF格式。

相关问题