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

タイトル Re^6: データから画像を取得、画像結合させて印刷したい
投稿日: 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

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

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