我正在从webbrowser控件导航到这样的URL; http://www.who.int/cancer/modules/Team%20building.pdf
它显示在webbrowser控件中。我想要做的是将此pdf文件下载到计算机。但我尝试了很多方法;
Dim filepath As String
filepath = "D:\temp1.pdf"
Dim client As WebClient = New WebClient()
client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
client.DownloadFileAsync(WebBrowserEx1.Url, filepath)
这个下载pdf但文件中没有任何内容。
还尝试了
objWebClient.DownloadFile()
没有改变。
我试图显示保存或打印对话框;
WebBrowserEx1.ShowSaveAsDialog()
WebBrowserEx1.ShowPrintDialog()
但他们没有显示任何对话框。也许最后一个是因为它不等待将pdf完全加载到webbrowser中。
当我尝试html文件时,下载没有问题,但在这个 .pdf 文件中,我认为我没有设法等待文件作为pdf加载到浏览器中。这个功能;
Private Sub WaitForPageLoad(ByVal adimno As String)
If adimno = "1" Then
AddHandler WebBrowserEx1.DocumentCompleted, New WebBrowserDocumentCompletedEventHandler(AddressOf PageWaiter)
While Not pageReady
Application.DoEvents()
End While
pageReady = False
End If
End Sub
Private Sub PageWaiter(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs)
If WebBrowserEx1.ReadyState = WebBrowserReadyState.Complete Then
pageReady = True
RemoveHandler WebBrowserEx1.DocumentCompleted, New WebBrowserDocumentCompletedEventHandler(AddressOf PageWaiter)
End If
End Sub
不适合这种情况。我的意思是它进入无限循环。
所以任何人都知道如何等待加载pdf然后保存到计算机中。
答案 0 :(得分:0)
您可以在文档完成触发时测试URL,如果是.pdf,则执行以下操作然后导航回来,例如。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
WebBrowserEx1.Navigate("http://www.who.int/cancer/modules/Team%20building.pdf")
End Sub
Private Sub WebBrowserEx1_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowserEx1.DocumentCompleted
If WebBrowserEx1.Url.ToString.Contains(".pdf") Then
Using webClient = New WebClient()
Dim bytes = webClient.DownloadData(WebBrowserEx1.Url.ToString) 'again variable here
File.WriteAllBytes(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "TEST.pdf"), bytes) 'save to desktop or specialfolder. to list all the readily available user folders
End Using
'WebBrowserEx1.goback() 'could send browser back a page as well
End If
End Sub
您需要将文件名“TEST”设置为变量而不是静态字符串,否则每次都会覆盖相同的文件。也许:
WebBrowserEx1.DocumentTitle.ToString & ".pdf"
相反,它会将文件保存为网页标题命名的pdf。唯一的问题是,如果页面包含非法字符(窗口不允许你保存),它将抛出异常,以便应该处理。