タイトル : Re^5: データから画像を取得、画像結合させて印刷したい 投稿日 : 2012/12/07(Fri) 19:12 投稿者 : 魔界の仮面弁士
> 「画像4枚(データ4件)を生成→1枚に結合→レターサイズでプリンタ出力→次の4件〜」の形式で印刷するプログラムに改造しようとしていました。 画像化するための元データがどのような構成になっているのかとか、 また、Oracle への接続がSystem.Data.OracleClient なのか、 Oracle.DataAccess.Client なのか、あるいはそれ以外なのかなどで 細かいコードは変わってくるとは思いますが、イメージとしてはこんな感じ。 Private reader As System.Data.OracleClient.OracleDataReader '--------------------- Private Sub Button1_Click(… : reader = cmd.ExecuteReader() If reader.Read() Then PrintDocument1.Print() '印刷開始 Else reader.Close() MsgBox("対象データ無し") End If End Sub '--------------------- > 「画像4枚(データ4件)を生成→1枚に結合→レターサイズでプリンタ出力→次の4件〜」の形式で印刷するプログラムに改造しようとしていました。 画像化するための元データがどのような構成になっているのかとか、 また、Oracle への接続がSystem.Data.OracleClient なのか、 Oracle.DataAccess.Client なのか、あるいはそれ以外なのかなどで 細かいコードは変わってくるとは思いますが、イメージとしてはこんな感じです。 # 環境が無いので未検証。 実際には、画像をレターサイズ内に納めて描画するために、DrawImage メソッドでは 描画位置だけでなく、描画サイズも指定して拡大縮小させる必要があるかも。 Private reader As System.Data.OracleClient.OracleDataReader '--------------------- Private Sub Button1_Click(… : reader = cmd.ExecuteReader() If reader.Read() Then PrintDocument1.Print() '印刷開始 Else reader.Close() MsgBox("対象データ無し") End If End Sub '--------------------- Private Sub PrintDocument1_PrintPage(… e.Graphics.PageUnit = GraphicsUnit.Millimeter Using bmp As New Bitmap(220, 400, e.Graphics) '220mm×400mmの大きな画像 'Oracle からデータを取得して画像化 Using g As Graphics = Graphics.FromImage(bmp) g.PageUnit = GraphicsUnit.Millimeter Using img As Bitmap = CreateImage(reader, 1) '220mm×100mmの画像Aを作る処理 g.DrawImage(img, 0, 0) End Using Using img As Bitmap = CreateImage(reader, 2) '220mm×100mmの画像Bを作る処理 g.DrawImage(img, 0, 100) End Using Using img As Bitmap = CreateImage(reader, 3) '220mm×100mmの画像Cを作る処理 g.DrawImage(img, 0, 200) End Using Using img As Bitmap = CreateImage(reader, 4) '220mm×100mmの画像Dを作る処理 g.DrawImage(img, 0, 300) End Using End Using e.Graphics.ResetTransform() '作成した一枚絵を貼り付ける処理 e.Graphics.DrawImage(bmp, e.MarginBounds.Location) End Using 'まだデータが残っているなら、次のページの印刷のために '再度、PrintPage イベントを発生させる If reader.Read() Then e.HasMorePages = True Else e.HasMorePages = False reader.Close() End If End Sub |