タイトル : Re^3: VB.NETの印刷の改ページ処理 投稿日 : 2006/03/14(Tue) 15:00 投稿者 : 魔界の仮面弁士
すみません。悩んでいる部分がよく分からなかったので……印刷処理の概要から書きます。 まず、ページの印刷が必要になるたびに、PrintDocument の PrintPageイベントが呼ばれます。 このイベントの第2引数から得られる e.Graphics が、描画のためのキャンパスです。 (VB6 でいう所の、Printer や PictureBox に相当しますね) そしてこの第2引数に、「e.HasMorePages = True」と指定した状態でイベントを抜けると、 続けて次のページの印刷処理が発生し、再度 PrintPageイベントが呼び出されます。 以降、HasMorePages に False が指定されるまで、PrintPage イベントが発生しますので、 これが改ページ処理という事になります。 > 具体的にコーディングして教えていただけないでしょうか? 「明細印刷」の中で使われているデータの扱いなどが不明瞭なので、 具体的なコードを書くのは難しいです…。特に決まった書き方があるでも無し。 とりあえずコードのイメージで書くと、たとえば 3 ページ固定で印刷するなら、 Private ページ番号 As Integer = 0 Private Sub PrintDocument1_PrintPage(…… ページ番号 += 1 タイトル印刷(e.Graphics) 明細印刷(e.Graphics, ページ番号) If ページ番号 = 3 Then e.HasMorePage = False '3ページ印刷したら終了 ページ番号 = 0 Else e.HasMorePage = True End If End Sub のようなイメージで書けるかな、と思います。 あるいは、PrintDocument クラス自体を継承させて NotInheritable Class 月次売上帳票 Inherits Printing.PrintDocument : Private ページ番号 As Integer = 0 Private 月次売上 As 営業売上 Protected Overrides Sub OnPrintPage(ByVal e As Printing.PrintPageEventArgs) ページ番号 += 1 タイトル印刷(e.Graphics) e.HasMorePages = 明細印刷(e.Graphics) MyBase.OnPrintPage(e) End Sub Private Sub タイトル印刷(ByVal G As Graphics) : End Sub Private Function 明細印刷(ByVal G As Graphics) As Boolean : 'ページ内に印刷し切れなかったデータがあれば、True '全データを印刷し終わったら False を返す : End Sub End Class のようにするとか。 |