NonSoft

WEBページをビットマップ保存するサンプル(VB.NET)


 サンプル(ソース/コード)
WEBページだけ(ウィンドウ枠を除く)を印刷する時などにWEBページ全体のビットマップが必要になります。
このサンプルはWEBページ全体(スクロールバー無し)をビットマップ保存するサンプル(VB.NET)です。

IE等でWEBページのイメージ印刷をすると途中で切れてしまう事がありますが、
ビットマップに保存してペイントツールで加工すれば綺麗に印刷する事が可能です。

関連ツールはこちらです。
WEBキャプチャ保存ツール(NonWebCapture)

C#.NETのWEBページ・ビットマップ保存のサンプルはこちらです。
WEBページをビットマップ保存するサンプル(C#.NET)

その他のサンプル(WEB関係/ビットマップ関係等)はこちらです。
サンプルソース(コード)

★フォーム(Form1.vb)
Public Class Form1
    ' ole32.dllのOleDrawを使用する(Const定義)
    Const DVASPECT_CONTENT As Integer = 1

    ' ole32.dllのOleDrawを使用する(DllImport定義)
    <System.Runtime.InteropServices.DllImport("ole32.dll")> _
    Public Shared Function OleDraw( _
        ByVal pUnk As IntPtr, _
        ByVal dwAspect As Integer, _
        ByVal hdcDraw As IntPtr, _
        ByRef lprcBounds As Rectangle) As Integer
    End Function

    ' フォームロード
    ' (準備)WebBrowserをフォームに貼り付けています
    ' (準備)PictureBoxをフォームに貼り付けています
    ' (準備)Buttonをフォームに貼り付けています
    Private Sub form1_Load( _
    ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        ' WebBrowserを非表示にする
        Me.WebBrowser1.Visible = False

        ' WebBrowserのサイズを自由に変更出来るようにする
        Me.WebBrowser1.Dock = DockStyle.None

        ' WebBrowserのスクロールバーを無効にする
        Me.WebBrowser1.ScrollBarsEnabled = False

        ' WEBページのURLを指定
        Me.WebBrowser1.Navigate("http://www.yahoo.co.jp")
    End Sub

    ' ボタンクリック時の処理
    ' WEBページをJPEG形式で保存
    Private Sub Button1_Click( _
    ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        ' WebBrowser(WEBページ)のダウンロード完了まで待つ
        For i As Integer = 1 To 100
            If WebBrowser1.IsBusy = False Then Exit For
            System.Threading.Thread.Sleep(1000)
            System.Windows.Forms.Application.DoEvents()
        Next

        ' WebBrowserにWEBページを全体表示(スクロールバー無し)するため、
        ' WebBrowserのウィンドウサイズ(横)をWEBページの本文サイズにあわせる
        WebBrowser1.Width = WebBrowser1.Document.Body.ScrollRectangle.Width

        ' WebBrowserにWEBページを全体表示(スクロールバー無し)するため、
        ' WebBrowserのウィンドウサイズ(縦)をWEBページの本文サイズにあわせる
        WebBrowser1.Height = WebBrowser1.Document.Body.ScrollRectangle.Height

        ' WebBrowserのサイズ(WEBページのサイズ)に合わせてBitmap生成
        Dim bmp As New Bitmap(WebBrowser1.Width, WebBrowser1.Height)

        ' BitmapのGraphicsを取得
        Dim gra As Graphics = Graphics.FromImage(bmp)

        ' BitmapのGraphicsのHdcを取得
        Dim hdc As IntPtr = gra.GetHdc

        ' WebBrowser(WEBページ)のオブジェクト取得
        Dim web As IntPtr = _
            System.Runtime.InteropServices.Marshal.GetIUnknownForObject( _
            WebBrowser1.ActiveXInstance)

        ' WebBrowser(WEBページ)のイメージをBitmapにコピー
        Dim rect As Rectangle = New Rectangle(0, 0, bmp.Width, bmp.Height)
        OleDraw(web, DVASPECT_CONTENT, hdc, rect)

        ' WebBrowser(WEBページ)のオブジェクト使用終了
        System.Runtime.InteropServices.Marshal.Release(web)

        ' BitmapのGraphicsの使用終了
        gra.Dispose()

        ' BitmapをJPEG形式で保存
        bmp.Save(Now.ToString("yyyyMMddHHmmss") & "_WebPage.jpg", _
            System.Drawing.Imaging.ImageFormat.Jpeg)

        ' BitmapをPictureBoxに表示
        PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
        PictureBox1.Image = bmp
    End Sub
End Class