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