2012-03-06 5 views
0

次のコードに問題があります。 BrowsePage.Document.Body.ScrollRectangle.Widthは、ページがこれよりも大きくても230を返します。したがって、ページの大部分は切り捨てられます。たとえば、BrowsePage.Document.Body.ScrollRectangle.Widthを整数で置き換えた場合2000年には、画像全体がキャプチャされます。捕獲されているHTMLファイル(C:\ htmlTest.txt):Webブラウザー:BrowsePage.Document.Body.ScrollRectangle.Width

Public Class ImageFromHtml 
    Private PageUrl As String 
    Private ConvertedImage As Bitmap 
    Private BrowsePage As New WebBrowser() 
    Public documentText As String 

    Private m_intHeight As Integer 
    Public Property Height() As Integer 
     Get 
      Return m_intHeight 
     End Get 
     Set(ByVal value As Integer) 
      m_intHeight = value 
     End Set 
    End Property 

    Private m_intWidth As Integer 
    Public Property Width() As Integer 
     Get 
      Return m_intWidth 
     End Get 
     Set(ByVal value As Integer) 
      m_intWidth = value 
     End Set 
    End Property 

    Public Function ConvertPage() As Bitmap 
     'Me.PageUrl = PageUrl 
     Dim thrCurrent As New Thread(New ThreadStart(AddressOf CreateImage)) 
     thrCurrent.SetApartmentState(ApartmentState.STA) 
     thrCurrent.Start() 
     thrCurrent.Join() 
     'CreateImage() 
     Return ConvertedImage 
    End Function 
    Private Sub CreateImage() 

     BrowsePage.ScrollBarsEnabled = False 
     'BrowsePage.Navigate(PageUrl) 
     ' BrowsePage.ScriptErrorsSuppressed = True 
     'BrowsePage.Navigate("about:blank") 
     BrowsePage.DocumentText = documentText 
     BrowsePage.ScrollBarsEnabled = True 
     AddHandler BrowsePage.DocumentCompleted, AddressOf _ 
WebBrowser_DocumentCompleted 
     While BrowsePage.ReadyState <> WebBrowserReadyState.Complete 
      Application.DoEvents() 
     End While 
     BrowsePage.Dispose() 
    End Sub 



    Private Sub WebBrowser_DocumentCompleted(ByVal sender As Object, ByVal e As _ 
    WebBrowserDocumentCompletedEventArgs) 
      'BrowsePage = DirectCast(sender, WebBrowser) 
      BrowsePage = DirectCast(sender, WebBrowser) 
      Height = BrowsePage.Document.Body.ScrollRectangle.Height 
      Width = BrowsePage.Document.Body.ScrollRectangle.Width 
      BrowsePage.ClientSize = New Size(BrowsePage.Document.Body.ScrollRectangle.Width, BrowsePage.Document.Body.ScrollRectangle.Height) 
      BrowsePage.ScrollBarsEnabled = True 
      BrowsePage.ScriptErrorsSuppressed = True 
      'ConvertedImage = New Bitmap(Width, Height) 
      ConvertedImage = New Bitmap(BrowsePage.Document.Body.ScrollRectangle.Width, BrowsePage.Document.Body.ScrollRectangle.Height) 
      BrowsePage.BringToFront() 
      BrowsePage.DrawToBitmap(ConvertedImage, BrowsePage.Bounds) 
      'MsgBox(BrowsePage.Document.Body.ScrollRectangle.Height) 
      'MsgBox(BrowsePage.Document.Body.ScrollRectangle.Width) 
     End Sub 



    End Class 

Public Class Form1 



    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
      Try 
       Dim objImageFromHtml As New ImageFromHtml() 
       'objImageFromHtml.Height = 1000 
       'objImageFromHtml.Width = 1000 
       Dim SR = New StreamReader("c:\htmlTest.txt") 
       objImageFromHtml.documentText = SR.ReadToEnd 
       Dim Test As Bitmap = objImageFromHtml.ConvertPage() 
       Test.Save("c:\Test.jpeg", _ 
       System.Drawing.Imaging.ImageFormat.Jpeg) 
      Catch ex As Exception 

      End Try 
     End Sub 
    End Class 

答えて

0

潜在的にいくつかの問題:

  • それは、Webページがありませんしている可能性がありますいくつかのJavaScriptエラーを含んでいますこのような方法でDocumentCompleteを使用すると完全なレイアウトとレンダリングが完了しました。特に動的コンテンツがある場合は、JavaScriptの読み込み、表示などのためにコントロールの測定値が考慮されません。 。

  • 呼び出すレンダリングメソッドは、.NET 4.0ではDrawToBitmapではサポートされていません。だから、あなたが望むようにIEの内容をレンダリングしません(実際には、私のために大きな白いブロックをレンダリングします。実際、.NET 3.5sp1または4.0ではIE9でレンダリングすることはできません) 。

  • DocumentCompletedイベントの高さと幅の設定がわかりません...サイズを変更しようとしていますか? BrowsePageがサイズ変更しようとしていると思われますか?

+0

お返事ありがとうございました。私は結局、問題を引き起こしていたHTMLのDOCTYPE属性であることを発見しました。 HTMLのDOCTYPE属性を削除すると、問題が解決されました。したがって、私が上で提供したコードは、問題をシミュレートするのに十分ではありませんでした。とにかくありがとう。 – w0051977

+0

あなたのコードは、もはやサポートされていない内部メソッドに依存しています。 :) – WiredPrairie

関連する問題