다음 코드에 문제가 있습니다. BrowsePage.Document.Body.ScrollRectangle.Width는 페이지가 이보다 훨씬 더 커도 230을 반환합니다. 따라서 대부분의 페이지가 잘립니다. 예 : BrowsePage.Document.Body.ScrollRectangle.Width를 정수로 바꾼 경우 2000, 전체 이미지가 캡처됩니다. 촬영되고있는 HTML 파일 (C : \ htmlTest.txt) :WebBrowser : 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
답장을 보내 주셔서 감사합니다. 결국 문제를 일으키는 HTML의 DOCTYPE 특성이라는 것을 알게되었습니다. HTML에서 DOCTYPE 특성을 제거하면 문제가 해결되었습니다. 따라서 위에서 제시 한 코드는 문제를 시뮬레이트하기에 충분하지 않았습니다. 어쨌든 고마워. – w0051977
코드가 더 이상 지원되지 않는 내부 메서드를 사용합니다. :) – WiredPrairie