C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 90 を表示中)
■53697 / )  画面の印刷
□投稿者/ なつみ (9回)-(2010/09/24(Fri) 12:28:14)

分類:[C#] 

お世話になります。

開発環境
 Windows XP
 Visual Studio 2008 Professional Edition

●やりたいこと
表示されている画面(Form)の内容を印刷したい。
ただし、Panel でスクロール表示されていて画面上見えていないところも印刷されるようにしたい。

●試しに
フォームをそのまま印刷すると、スクロールで見えていないところは印刷されなかったので、
フォーム上のアイテム(Label や Panel)を一度 Bitmap に並べて、それを印刷したらどうかと思い以下のようにして試してみました。

private void button1_Click(object sender, EventArgs e)
{
  // フォーム上のアイテムを一度ビットマップ("C:\\test.bmp")に並べて保存
   ・
   ・
   ・

  //PrintDocumentオブジェクトの作成
  System.Drawing.Printing.PrintDocument pd =
        new System.Drawing.Printing.PrintDocument();
  //PrintPageイベントハンドラの追加
  pd.PrintPage +=
        new System.Drawing.Printing.PrintPageEventHandler(pd_PrintPage);

  //PageSetupDialogクラスの作成
  PageSetupDialog psd = new PageSetupDialog();
  
  //PrintDocumentを指定
  psd.Document = pd;
  
  //ページ設定ダイアログを表示する
  if (psd.ShowDialog() == DialogResult.OK)
  {
    //OKがクリックされた時は印刷する
    pd.Print();
  }
}

private void pd_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
  //画像を読み込む
  Image img = Image.FromFile("C:\\test.bmp");

  //画像を描画する
  e.Graphics.DrawImage(img, e.MarginBounds);

  //次のページがないことを通知する
  e.HasMorePages = false;

  //後始末をする
  img.Dispose();
}

●試した結果
フォームの内容は全て印刷されたのですが、それが1枚の紙に印刷されてしまいました。

●質問
@印刷する際、指定したサイズで印刷することは可能でしょうか。
 例)
 縦100、横100サイズのビットマップに対して、縦10、横10とサイズを指定すると100枚
 に分割されて印刷される。また、縦10、横10と指定した範囲が出力される紙いっぱいに表示
 されるようにしたい。

Aそもそも、「やりたいこと」で書いたようなことを実現するためにもっと良い方法はないのでしょうか。

長文になってしまいすみません。よろしくお願いいたします。

返信 編集キー/


管理者用

- Child Tree -