|
|||||
WEBページだけ(ウィンドウ枠を除く)を印刷する時などにWEBページ全体のビットマップが必要になります。 このサンプルはWEBページ全体(スクロールバー無し)をビットマップ保存するサンプル(C#.NET)です。 IE等でWEBページのイメージ印刷をすると途中で切れてしまう事がありますが、 ビットマップに保存してペイントツールで加工すれば綺麗に印刷する事が可能です。 関連ツールはこちらです。 WEBキャプチャ保存ツール(NonWebCapture) VB.NETのWEBページ・ビットマップ保存のサンプルはこちらです。 WEBページをビットマップ保存するサンプル(VB.NET) その他のサンプル(WEB関係/ビットマップ関係等)はこちらです。 サンプルソース(コード) ★フォーム(Form1.cs) public partial class Form1 : Form { // ole32.dllのOleDrawを使用する(Const定義) const int DVASPECT_CONTENT = 1; // ole32.dllのOleDrawを使用する(DllImport定義) [System.Runtime.InteropServices.DllImport("ole32.dll")] extern static int OleDraw( IntPtr pUnk, int dwAspect, IntPtr hdcDraw, ref Rectangle lprcBounds); // フォームロード // (準備)WebBrowserをフォームに貼り付けています // (準備)PictureBoxをフォームに貼り付けています // (準備)Buttonをフォームに貼り付けています private void Form1_Load(object sender, EventArgs e) { // WebBrowserを非表示にする this.webBrowser1.Visible = false; // WebBrowserのサイズを自由に変更出来るようにする this.webBrowser1.Dock = DockStyle.None; // WebBrowserのスクロールバーを無効にする this.webBrowser1.ScrollBarsEnabled = false; // WEBページのURLを指定 this.webBrowser1.Navigate("http://www.yahoo.co.jp"); } // ボタンクリック時の処理 // WEBページをJPEG形式で保存 private void button1_Click(object sender, EventArgs e) { // WebBrowser(WEBページ)のダウンロード完了まで待つ for (int i = 1; i <= 100; i++) { if (webBrowser1.IsBusy == false) break; System.Threading.Thread.Sleep(1000); System.Windows.Forms.Application.DoEvents(); } // 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生成 Bitmap bmp = new Bitmap(webBrowser1.Width, webBrowser1.Height); // BitmapのGraphicsを取得 Graphics gra = Graphics.FromImage(bmp); // BitmapのGraphicsのHdcを取得 IntPtr hdc = gra.GetHdc(); // WebBrowser(WEBページ)のオブジェクト取得 IntPtr web = System.Runtime.InteropServices.Marshal.GetIUnknownForObject( webBrowser1.ActiveXInstance); // WebBrowser(WEBページ)のイメージをBitmapにコピー Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height); OleDraw(web, DVASPECT_CONTENT, hdc, ref rect); // WebBrowser(WEBページ)のオブジェクト使用終了 System.Runtime.InteropServices.Marshal.Release(web); // BitmapのGraphicsの使用終了 gra.Dispose(); // BitmapをJPEG形式で保存 bmp.Save(DateTime.Now.ToString("yyyyMMddHHmmss") + "_WebPage.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); // BitmapをPictureBoxに表示 pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; pictureBox1.Image = bmp; } } |