|
分類:[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そもそも、「やりたいこと」で書いたようなことを実現するためにもっと良い方法はないのでしょうか。
長文になってしまいすみません。よろしくお願いいたします。
|