- - PR -
VB.NET 画像を分割後、複数の画像を合成して印刷
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-06-16 11:51
印刷について悩んでしまったので、アドバイスお願いします。
複数の画像を指定したサイズで分割し、 分割した各画像を1枚の紙に印刷しようと思っています。 1ページ目はちゃんと表示されますが、(プレビュー画面にて確認) 2ページ目以降はちゃんと表示されません。 位置設定、サイズの変更がない画像はちゃんと表示されますが、 変数で位置設定、サイズを指定している画像は表示されません。 DrawImageを使用して書いています。 BitMapはPrintPageが呼び出されるたびに、Newしてコピーしています。 (Disposeもしています) どのようにしたら、ちゃんと印刷されるようになるのでしょうか? ご教授願います。 環境 Visual Studio .NET 2003 Windows Server 2003 | ||||||||
|
投稿日時: 2006-06-16 12:23
はじめまして、深山です。
プレビュー画面で確認とのことでしたが、実際に印刷してみてはどうでしょう? あと、分割した画像を出力して、分割が正しく出来ているか確認することをお勧めします。 | ||||||||
|
投稿日時: 2006-06-16 12:51
PrintPage とは、PrintDocument.PrintPage イベントのことでしょうか? であれば、PrintPageEventArgs 引数の HasMorePages が true になっていないだけではないでしょうか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-06-16 13:09
との事だったので、2ページ目以降は、白紙のものが表示されていると思い込んでいました。 なので、分割や印刷の開始位置がうまく出来ていないのではと疑ったのですが・・・
確かに、その可能性が一番高いですね。 僕もHasMorePagesをtrueにしていなくて、つまずいたことがあったのに、 すっかりHasMorePagesの存在を忘れていましたw | ||||||||
|
投稿日時: 2006-06-16 13:18
回答ありがとうございます。
PrintPage とは、PrintDocument.PrintPage イベントのことです。 HasMorePagesはちゃんとtrueになっています。(デバッガでも確認しました) 2ページ目以降は、ヘッダ部分(作成した画像をそのまま貼り付けている)と フッタ部分(直接文字列を書き込んでいる)のみ出てきます。 切り取った画像を表示させようと思ったのですが、 うまく表示することができませんでした。 赤い×になってしまいました。。。 Disposeをしないと、1ページ目が表示されます。 切り取り位置、サイズ等は確認する限りちゃんと変更されています。 他に考えられることはないでしょうか? | ||||||||
|
投稿日時: 2006-06-16 13:28
とりあえず必要最小限のコードを提示したほうが早いのではないでしょうか。
| ||||||||
|
投稿日時: 2006-06-16 13:39
コードを提示させていただきます。
mintStartHeight等は、別モジュールで値が入れています。 PriHeaderlocalBitmapとPriItemlocalBitmap自体がちゃんと作成されていることは 確認済みです。 Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage ' 印刷ページ設定 e.PageSettings.Landscape = True e.PageSettings.Margins.Bottom = 10 e.PageSettings.Margins.Left = 10 e.PageSettings.Margins.Right = 10 e.PageSettings.Margins.Top = 10 ' イメージを作成 Dim imgHeader As Image = New Bitmap(PriHeaderlocalBitmap) Dim imgItem As Image = New Bitmap(PriItemlocalBitmap) ' /* ヘッダ */←作成したサイズのまま貼り付けています Dim urHPoint As New PointF(0, 0) Dim ulHPoint As New PointF(1100, 0) Dim llHPoint As New PointF(0, 150) Dim HeaderPara As PointF() = {urHPoint, ulHPoint, llHPoint} Dim ItemHRect As New RectangleF(-80, -30, 1100, 150) ' 項目 Dim urIPoint As New PointF(0, mintStartHeight(mintHPos)) Dim ulIPoint As New PointF(PriItemlocalBitmap.Width, mintStartHeight(mintHPos)) Dim llIPoint As New PointF(0, mintEndHeight(mintHPos)) Dim ItemPara As PointF() = {urIPoint, ulIPoint, llIPoint} Dim ItemIRect As New RectangleF(-80.0F, -150.0F, _ PriItemlocalBitmap.Width + 80, mintEndHeight(mintHPos) - mintStartHeight(mintHPos)) ' /* イメージの書き込み */ e.Graphics.DrawString(CStr(mintPage), cc.gSTRING, Brushes.Black, 620, 780) ' ページ e.Graphics.DrawImage(imgItem, ItemPara, ItemIRect, GraphicsUnit.Pixel) ' 項目 e.Graphics.DrawImage(imgHeader, HeaderPara, ItemHRect, GraphicsUnit.Pixel) ' ヘッダ mintPage += 1 ' ページ数更新 ' 次のページがあることを宣言する e.HasMorePages = True ' 縦横の位置を更新 If mintHPos = mintEndHeight.Length - 1 Then If mintWPos = mintEndWide.Length - 1 Then e.HasMorePages = False Else mintWPos += 1 mintHPos = 0 End If Else mintHPos += 1 End If ' 解放 imgHeader.Dispose() imgItem.Dispose() e.Graphics.Dispose() End Sub よろしくお願いします。 | ||||||||
|
投稿日時: 2006-06-16 13:46
とした場合、PrintPage イベントが再度起きるハズですが、それすら起きないのでしょうか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |