tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。