tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルデータから画像を取得、画像結合させて印刷したい
記事No10979
投稿日: 2012/12/04(Tue) 17:06
投稿者GFC
初めまして
XP・VS2005でプログラムをしております。

今回、oracleDBからデータを取得、取得したデータをFor文でループさせ、
一枚(縦10cm・横22cmの横長の枠)の枠中にデータを貼り付けて、横長の画像ファイルを作り、
その画像ファイルを縦に4個並べて一つの画像ファイルにして、レターサイズで印刷したいと思っています。


■  ←最終的にこんな風な画像結合して縦に並んだ画像を一枚に印刷をしたい
■   (一つの枠の中にデータを貼り付けていく)


色々探した結果、PictureBoxにDrawImageで画像結合させれるような記述を見つけたのですが、

>With PictureBox1
>      .Width = picW * 3
>      .Height = pich
>      .BackColor = Color.White
>      .SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize
>      .Image = New Bitmap(.Size.Width, .Size.Height)
>      g = Graphics.FromImage(.Image)
>End With
>g.DrawImage(bmap, 0, 0)
>g.DrawImage(bmap, picW - 1, 0)
>g.DrawImage(bmap, picW + picW - 2, 0)

画像作成→結合→印刷の部分が上手くいきません。
試した方法としては、一枚分の画像土台としてPictureBox1を作ってそこにデータを貼り付け、
PictureBox2を作り、ループ毎に縦に並べて結合させていく
4枚貼り付けたら、印刷実行するという方法です。

[ツリー表示へ]
タイトルRe: データから画像を取得、画像結合させて印刷したい
記事No10980
投稿日: 2012/12/05(Wed) 02:34
投稿者魔界の仮面弁士
> 色々探した結果、PictureBoxにDrawImageで画像結合させれるような記述を見つけたのですが、
これは、PictureBox に描画しているわけではなく、

新規に Bitmap を作成し、
> >      .Image = New Bitmap(.Size.Width, .Size.Height)

それを描画キャンバスとして、
> >      g = Graphics.FromImage(.Image)

DrawImage で画像を描画していく
> >g.DrawImage(bmap, 0, 0)

という流れです。その Bitmap を PictureBox の Image に割り当てることで、
画面上への表示は可能となりますが、少なくとも提示されたコードについては、
描画先は Bitmap であって、PictureBox では無い点に注意してください。


そして「印刷」が目的の場合、必ずしも一枚絵の Bitmap を用意する必要はありません。
別のソフトに画像データを渡して印刷させるというのであれば別ですが、
印刷処理を VB から行うのであれば、最初に作った 4 枚の画像だけあれば十分です。

それらを順次プリンターに描画すれば、一枚のレターサイズ(215.9mm×279.4mm)に
印刷させることができます。手順的には、Bitmap から得た Graphics に DrawImage して
いくのではなく、PrintDocument クラスの PrintPage イベントで、
e.Graphics に対して DrawImage していくという流れになります。

[ツリー表示へ]
タイトルRe^2: データから画像を取得、画像結合させて印刷したい
記事No10981
投稿日: 2012/12/05(Wed) 15:51
投稿者GFC
返信が遅くなって申し訳ございません。

>DrawImage で画像を描画していく
> >g.DrawImage(bmap, 0, 0)

この場合、bmapに画像を描画していくわけですね。

印刷をする場合、上記の後、

'画像印刷
PrintDocument1.PrintController = _
  New Printing.StandardPrintController
PrintDocument1.Print()

で、飛ばして

Private Sub PrintDocument1_PrintPage( _
    ByVal sender As System.Object, ByVal e As _
    Printing.PrintPageEventArgs) _
    Handles PrintDocument1.PrintPage
    e.Graphics.DrawImage(bmap, _
        New Rectangle(0, 0, _
        PrintDocument1.DefaultPageSettings.Bounds.Width, _
        PrintDocument1.DefaultPageSettings.Bounds.Height))
    e.HasMorePages = False
End Sub

上記のように、PrintDocument クラスの PrintPage イベントで印刷〜
を、繰り返すという感じでしょうか?

[ツリー表示へ]
タイトルRe^3: データから画像を取得、画像結合させて印刷したい
記事No10982
投稿日: 2012/12/05(Wed) 21:09
投稿者魔界の仮面弁士
> >DrawImage で画像を描画していく
> > >g.DrawImage(bmap, 0, 0)
> この場合、bmapに画像を描画していくわけですね。

逆ではないでしょうか。bmapに描画するのではなく、bmapを描画するのですから。

キャンバス「g」に対して、bmap を描画しているのであって、
bmap をキャンバスとして、そこに画像を描画しているわけではありません。


> 印刷をする場合、上記の後、
縦10cm×横22cmの画像 4 枚から、縦40cm×横22cmの画像 1 枚を生成して、
それをレターサイズ(21.59cm×27.94cm)に縮小表示したい、ということですよね。

結合画像は、PrintDocument1.Print() の前に作ってもおいても良いですし、
PrintDocument1_PrintPage の最中に生成しておいても構いません。


> 上記のように、PrintDocument クラスの PrintPage イベントで印刷〜
> を、繰り返すという感じでしょうか?
ここでいう繰り返しとは、どのようなコードをイメージされておられますか?
元質問の『oracleDBからデータを取得、取得したデータをFor文でループさせ』の
ループというのが、どのような物を想定しているのか読み取れませんでした。

たとえば「画像4枚を生成→1枚に結合→プリンタ出力」を一回行うか、
あるいは「画像4枚を生成→プリンタに並べて出力」を一回行うかだけで良いなら、
特に繰り返し処理は不要かと思います。

また、仮に
 Oracle から一つ目のデータを取得 → 画像4枚を生成〜印刷 →
 Oracle から二つ目のデータを取得 → 画像4枚を生成〜印刷 →
 Oracle から三つ目のデータを取得 → 画像4枚を生成〜印刷
という流れなのだとしても、それ自体がループ処理にはならないかと思います。
この場合でも、PrintDocument1.Print() の呼び出しは一回だけでよさそうですし。

(3ページなら、PrintPage イベントも 3 回呼び出されるとはいえ、
 だからといって、PrintPage の内外でループ処理が必要になるわけでは無いので)

[ツリー表示へ]
タイトルRe^4: データから画像を取得、画像結合させて印刷したい
記事No10985
投稿日: 2012/12/06(Thu) 20:21
投稿者GFC
返信して下さりありがとうございます。

> > >DrawImage で画像を描画していく
> > > >g.DrawImage(bmap, 0, 0)
> > この場合、bmapに画像を描画していくわけですね。
>
> 逆ではないでしょうか。bmapに描画するのではなく、bmapを描画するのですから。
>
> キャンバス「g」に対して、bmap を描画しているのであって、
> bmap をキャンバスとして、そこに画像を描画しているわけではありません。

なるほど、見事に勘違いしていました。
ありがとうございます。

>
>
> > 印刷をする場合、上記の後、
> 縦10cm×横22cmの画像 4 枚から、縦40cm×横22cmの画像 1 枚を生成して、
> それをレターサイズ(21.59cm×27.94cm)に縮小表示したい、ということですよね。
>
> 結合画像は、PrintDocument1.Print() の前に作ってもおいても良いですし、
> PrintDocument1_PrintPage の最中に生成しておいても構いません。
>
>
> > 上記のように、PrintDocument クラスの PrintPage イベントで印刷〜
> > を、繰り返すという感じでしょうか?
> ここでいう繰り返しとは、どのようなコードをイメージされておられますか?
> 元質問の『oracleDBからデータを取得、取得したデータをFor文でループさせ』の
> ループというのが、どのような物を想定しているのか読み取れませんでした。
>
> たとえば「画像4枚を生成→1枚に結合→プリンタ出力」を一回行うか、
> あるいは「画像4枚を生成→プリンタに並べて出力」を一回行うかだけで良いなら、
> 特に繰り返し処理は不要かと思います。
>
> また、仮に
>  Oracle から一つ目のデータを取得 → 画像4枚を生成〜印刷 →
>  Oracle から二つ目のデータを取得 → 画像4枚を生成〜印刷 →
>  Oracle から三つ目のデータを取得 → 画像4枚を生成〜印刷
> という流れなのだとしても、それ自体がループ処理にはならないかと思います。
> この場合でも、PrintDocument1.Print() の呼び出しは一回だけでよさそうですし。
>
> (3ページなら、PrintPage イベントも 3 回呼び出されるとはいえ、
>  だからといって、PrintPage の内外でループ処理が必要になるわけでは無いので)

元々、リライタブルプリンタという特殊なプリンタで、横長(220mm×100mm)の専用カードに、
oracleからデータを取得抽出し、抽出したデータをFor〜Next文で回しつつ
専用カードに(データ一件につき)一枚ずつ印刷していくプログラムを、
国外で同じ業務を使用する際(対象国では)国産リライタブルプリンタが法律で使用出来ない為、
普通のプリンタを利用し、
「画像4枚(データ4件)を生成→1枚に結合→レターサイズでプリンタ出力→次の4件〜」の形式で印刷するプログラムに改造しようとしていました。

[ツリー表示へ]
タイトルRe^5: データから画像を取得、画像結合させて印刷したい
記事No10989
投稿日: 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

[ツリー表示へ]
タイトルRe^6: データから画像を取得、画像結合させて印刷したい
記事No10993
投稿日: 2012/12/14(Fri) 13:45
投稿者GFC
まずはお詫び致します。
体調を崩して一週間ほど寝込んでいましたので、返信がかなり遅くなってしまいました。
申し訳ございませんでした。


> > 「画像4枚(データ4件)を生成→1枚に結合→レターサイズでプリンタ出力→次の4件〜」の形式で印刷するプログラムに改造しようとしていました。
>
> 画像化するための元データがどのような構成になっているのかとか、
> また、Oracle への接続がSystem.Data.OracleClient なのか、
> Oracle.DataAccess.Client なのか、あるいはそれ以外なのかなどで
> 細かいコードは変わってくるとは思いますが、イメージとしてはこんな感じ。

接続はOracle.DataAccess.Client.OracleConnectionで繋いでいます。
データは、(様々な)日付や作業する機械の名前、作業する工程名、作業する場所(スペース)のコード(char6桁)、作業員コード(char5桁)等を取得して
貼り付けるような形です。



>
>
> 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

ありがとうございます。
まだ身体が完全に治っていないので、今日はまだ休みを貰っていて仕事場ではないのですが、
復帰したら早速試してみます。
結果は追って書き込みます。
ありがとうございました。そして連絡が遅くなって本当にすみませんでした。

[ツリー表示へ]
タイトルRe^6: データから画像を取得、画像結合させて印刷したい
記事No10995
投稿日: 2012/12/18(Tue) 17:13
投稿者GFC
教えて下さい。
7日にレスして下さったプログラムを取り入れて自分なりにプログラムを作成したのですが、
印刷した時に縦長の白い長方形の枠のみの画像になってしまいます。

下記に一部プログラムを抜粋しました。
PrintStartでSQL作成後、serch_Cardでデータ抽出、
For i = 0 To wOraDt.Rows.Count - 1でループさせて、データを変数代入後、
PrintCard2で一件ずつ横長(220×100)の画像作成
(独自関数SetValue:フォーマットされた枠の所定の位置にデータをセットする
MakeImageFileセットしたデータで画像イメージ生成)

一旦、MakeImage.Saveでイメージファイルを保存、
bmpPrint1〜bmpPrint4に4ループ分の画像をそれぞれコピー
その後、印刷に飛んで、ループ中は下記プログラムで一気に画像結合
g.DrawImage(bmpPrint1, 0, 0)
g.DrawImage(bmpPrint2, 0, 100)
g.DrawImage(bmpPrint3, 0, 200)
g.DrawImage(bmpPrint4, 0, 300)

印刷しています。
単独のイメージファイルは出来るのですが、3行目でも書いた通り、
画像が無く、枠のみになってしまいます。
(画像→http://ll.la/make.pl パス:4345)

印刷部分でミスっているのでしょうか?



Public Class Print_Object

    Private bmpPrint1 As Bitmap
    Private bmpPrint2 As Bitmap
    Private bmpPrint3 As Bitmap
    Private bmpPrint4 As Bitmap
    Private ImageCnt As Integer
    Private PrintENDFlag As Boolean


    Public Function PrintStart(ByVal MaxPrintCount As Integer, ByVal StartDate As String, ByVal EndDate As String) As Boolean
        Dim strSQL1, strSQL2 As String   'SQL文字列
        Dim oo As New Oracle_Object
        Dim ao As New Access_Object
        Dim so As New SqlSever_Object

        Dim WshNetwork As Object
        Dim strUserName As Object
        Dim strComputerName As Object
        Dim ComputerName, UserName As String   'SQL文字列

        Dim i As Integer

        strSQL1 = ""
        strSQL2 = ""

        Try
            WshNetwork = CreateObject("WScript.Network")
            strUserName = WshNetwork.UserName
            UserName = strUserName.ToString
            strComputerName = WshNetwork.ComputerName
            ComputerName = strComputerName.ToString


            strSQL1 = "SELECT * FROM DEAL"
            wOraDt.Reset()
            wOraDt.Dispose()

            '対象レコード抽出
            If (oo.serch_Card(strSQL1, strSQL2)) Then
                'レコード数チェック
                If (wOraDt.Rows.Count <= 0) Then
                    MsgBox("対象データは存在しません。", MsgBoxStyle.OkOnly)
                Else
                    Dim strMessage As String
                    If MaxPrintCount > 1 Then
                        strMessage = wOraDt.Rows.Count & "×" & MaxPrintCount
                    Else
                        strMessage = wOraDt.Rows.Count
                    End If
                    Dim result As DialogResult = MessageBox.Show("印刷対象は、" & strMessage & "枚です。印刷を開始しますか?", _
                                                                 "質問", _
                                                                 MessageBoxButtons.YesNo, _
                                                                 MessageBoxIcon.Exclamation, _
                                                                 MessageBoxDefaultButton.Button2)



                    '何が選択されたか調べる
                    If result = DialogResult.Yes Then
                        NOWPAGE = 0
                        TOTALPAGE = wOraDt.Rows.Count

                        ImageCnt = 0
                        PrintENDFlag = False

                        For i = 0 To wOraDt.Rows.Count - 1
                            NOWPAGE += 1
                            Prnt_Dat_Reset()
                            printdate = Format$(Now(), "yyyy/MM/dd HH:mm")
                            setprintdate = Format$(Now(), "yyyyMMddHHmmss")

                            Dim StartSheets As Integer

                            For StartSheets = 1 To MaxPrintCount
                                ImageCnt = ImageCnt + 1
            'ここで出力へ
                                PrintCard2()
                            Next
                        Next i
                    End If

        '4回回る途中でループが終わった場合の出力
                    If ImageCnt <> 0 Then
                        PrintENDFlag = True
                        PrintCard2()
                    End If
                End If
            Else
                SerialCard_PrintStart = False
            End If
        Catch Appex As ApplicationException
            SerialCard_PrintStart = False
        Catch ex As Exception
            ' ログの出力
            common.ErrLogOutput(ex.Message, ex.StackTrace)
            Call Abort_Error(KB_ERR_VB, "PrintObject", "ActiveReport_ReportStart", ex.Message)
            SerialCard_PrintStart = False
        Finally
            '▼後処理
            wOraDt.Dispose()
            wOraDt2.Dispose()
        End Try

    End Function

    Private Function PrintCard2() As String

        Dim FormatFileName As String = "c:\format\Card.fmt" 'フォーマットファイル

        FormatFileName = System.Configuration.ConfigurationManager.AppSettings("PrintCard")
        Dim ret As Integer '戻り値
        Dim Fomat As New Hashtable 'ハッシュテーブル
        Dim MakeImage As Bitmap = Nothing 'ビットマップ

        Try
            ' フォーマットファイルオープン
            ret = OpenFile(FormatFileName, Fomat)
            If ret <> 0 Then
                MsgBox("フォーマットファイルオープン時にエラーが発生しました。", MsgBoxStyle.OkOnly)
                Exit Function
            End If
            ' フォーマットファイルの可変項目に値をセット
            ' テキスト
            ret = SetValue(Fomat, "printdate", printdate)
            If ret <> 0 Then
                MsgBox("printdateデータセット時にエラーが発生しました。", MsgBoxStyle.OkOnly)
                Exit Function
            End If

            ' 印刷イメージの作成
            ret = MakeImageFile(Fomat, MakeImage)
            If ret <> 0 Then
                MsgBox("イメージ作成中にエラーが発生しました。", MsgBoxStyle.OkOnly)
                Exit Function
            End If

            ' bmpイメージファイルの保存
            setbmpdate = Format$(Now(), "yyyyMMddHHmmss")
            MakeImage.Save("C:\Printer\bmp\" & BoothID & "_" & SERNO & "_" & setbmpdate & ".jpg")

            Select Case ImageCnt
                Case 1
                    ' 画像読み込み
                    bmpPrint1 = New Bitmap("C:\Printer\bmp\" & BoothID & "_" & SERNO & "_" & setbmpdate & ".jpg")
                Case 2
                    ' 画像読み込み
                    bmpPrint2 = New Bitmap("C:\Printer\bmp\" & BoothID & "_" & SERNO & "_" & setbmpdate & ".jpg")
                Case 3
                    ' 画像読み込み
                    bmpPrint3 = New Bitmap("C:\Printer\bmp\" & BoothID & "_" & SERNO & "_" & setbmpdate & ".jpg")
                Case Else
                    ' 画像読み込み
                    bmpPrint4 = New Bitmap("C:\Printer\bmp\" & BoothID & "_" & SERNO & "_" & setbmpdate & ".jpg")
            End Select

            If Not (PrintENDFlag) AndAlso ImageCnt = 4 Then
                '' 印刷実行イベントの設定
                ' 画像印刷
                PrintDocument1.PrintController = _
                    New Printing.StandardPrintController
                PrintDocument1.Print()



            End If



            If PrintENDFlag Then
                '' 印刷実行イベントの設定
                ' 画像印刷
                PrintDocument1.PrintController = _
                    New Printing.StandardPrintController
                PrintDocument1.Print()

            End If

            '初期化
            If ImageCnt = 4 Then
                ImageCnt = 0
            End If

            ' フォーマットファイルを閉じる
            ret = CloseFile(Fomat)
            If ret <> 0 Then
                MsgBox("フォーマットファイルクローズ時にエラーが発生しました。", MsgBoxStyle.OkOnly)
                Exit Function
            End If

            ' 印刷完了メッセージ表示
            ' MsgBox("印刷しました。", MsgBoxStyle.OkOnly)

        Catch ex As Exception
            MsgBox("システムエラーが発生しました。", MsgBoxStyle.OkOnly)
            ' ログの出力
            common.ErrLogOutput(ex.Message, ex.StackTrace)
            Call Abort_Error(KB_ERR_VB, "PrintObject", "PrintSheet", ex.Message)
        Finally
        End Try
    End Function

    Private Sub PrintDocument1_PrintPage( _
        ByVal sender As System.Object, ByVal e As _
        Printing.PrintPageEventArgs) _
        Handles PrintDocument1.PrintPage

        e.Graphics.PageUnit = GraphicsUnit.Millimeter
        Using bmp As New Bitmap(220, 400, e.Graphics)   '220mm×400mmの大きな画像

            Using g As Graphics = Graphics.FromImage(bmp)
                g.PageUnit = GraphicsUnit.Millimeter

                Select Case ImageCnt
                    Case 1
                        'ループ後1データ残った場合
                        g.DrawImage(bmpPrint1, 0, 0)
                    Case 2
                        'ループ後2データ残った場合
                        g.DrawImage(bmpPrint1, 0, 0)
                        g.DrawImage(bmpPrint2, 0, 100)
                    Case 3
                        'ループ後3データ残った場合
                        g.DrawImage(bmpPrint1, 0, 0)
                        g.DrawImage(bmpPrint2, 0, 100)
                        g.DrawImage(bmpPrint3, 0, 200)
                    Case Else
                        'ループ中はここに来る
                        g.DrawImage(bmpPrint1, 0, 0)
                        g.DrawImage(bmpPrint2, 0, 100)
                        g.DrawImage(bmpPrint3, 0, 200)
                        g.DrawImage(bmpPrint4, 0, 300)
                End Select

            End Using

            e.Graphics.ResetTransform()
            '作成した一枚絵を貼り付ける処理
            e.Graphics.DrawImage(bmp, e.MarginBounds.Location)

        End Using

        e.HasMorePages = False

    End Sub

End Class

[ツリー表示へ]
タイトルRe^7: データから画像を取得、画像結合させて印刷したい
記事No10998
投稿日: 2012/12/21(Fri) 10:55
投稿者GFC
> 画像が無く、枠のみになってしまいます。
> (画像→http://ll.la/make.pl パス:4345)

URLが間違っていました。
リンク修正
http://www1.axfc.net/uploader/so/2720040
パス:4345

[ツリー表示へ]
タイトルRe^6: データから画像を取得、画像結合させて印刷したい
記事No10996
投稿日: 2012/12/20(Thu) 11:44
投稿者GFC
追記:印刷自体は真っ白で印刷されてしまいます。

[ツリー表示へ]