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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.53697 の関連記事表示

<< 0 >>
■53697  画面の印刷
□投稿者/ なつみ -(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そもそも、「やりたいこと」で書いたようなことを実現するためにもっと良い方法はないのでしょうか。

    長文になってしまいすみません。よろしくお願いいたします。
親記事 /過去ログ90より / 関連記事表示
削除チェック/

■53698  Re[1]: 画面の印刷
□投稿者/ よねKEN -(2010/09/24(Fri) 12:55:18)
>
    > ●試した結果
    > フォームの内容は全て印刷されたのですが、それが1枚の紙に印刷されてしまいました。

    「e.HasMorePages = false;」としているからですね。


    > ●質問
    > @印刷する際、指定したサイズで印刷することは可能でしょうか。

    Graphics.DrawImageメソッドのオーバーロードにImageの一部分を描画するものがあるので、
    それを使って、10x10ずつ切り出して描画すればよいですね。
    描画すべき領域が残っている間は、「e.HasMorePages = true;」として、
    最後の領域の印字時は「e.HasMorePages = false;」とすればよいのではないでしょうか。

記事No.53697 のレス /過去ログ90より / 関連記事表示
削除チェック/

■53699  Re[1]: 画面の印刷
□投稿者/ shu -(2010/09/24(Fri) 13:30:22)
    No53697 (なつみ さん) に返信
    PrintDocumentは
    1.BeginPrintで初期処理
    2.PrintPageで各ページの印字処理
      (よねKEN さんのコメ通りHasMorePagesがFalseになるまで繰り返し)
    3.EndPrintで後処理
    のように処理されます。

    BeginPrintでBitmapを取得
    PrintPageで各ページの印刷部分を描画
     (ページ番号などをクラス変数で保持し描画する場所を確定する)
    EndPrintでBitmapをDispose

    といった感じでしょうか。
    この処理ですとBitmapをファイルに保存する必要なさそうですので
    clickイベントで描画時に使用したBitmapをそのまま使用してもよいかもしれません。
記事No.53697 のレス /過去ログ90より / 関連記事表示
削除チェック/

■53701  Re[2]: 画面の印刷
□投稿者/ なつみ -(2010/09/24(Fri) 14:50:59)
    お世話になっております。

    よねKEN 様
    shu 様

    書込みありがとうございます。
    参考にさせていただいて、試してみたいと思います。
記事No.53697 のレス /過去ログ90より / 関連記事表示
削除チェック/

■53812  Re[3]: 画面の印刷
□投稿者/ なつみ -(2010/09/27(Mon) 19:06:51)
    おかげさまで、複数ページの印刷ができるようになりました。
    ありがとうございました。
記事No.53697 のレス / END /過去ログ90より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -