从webbrowser控件保存pdf文档

时间:2013-05-15 08:48:00

标签: vb.net webbrowser-control

我正在从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然后保存到计算机中。

1 个答案:

答案 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。唯一的问题是,如果页面包含非法字符(窗口不允许你保存),它将抛出异常,以便应该处理。