- PR -

VB.NET 画像を分割後、複数の画像を合成して印刷

投稿者投稿内容
シロ
常連さん
会議室デビュー日: 2005/05/15
投稿数: 34
投稿日時: 2006-06-16 11:51
印刷について悩んでしまったので、アドバイスお願いします。

複数の画像を指定したサイズで分割し、
分割した各画像を1枚の紙に印刷しようと思っています。

1ページ目はちゃんと表示されますが、(プレビュー画面にて確認)
2ページ目以降はちゃんと表示されません。
位置設定、サイズの変更がない画像はちゃんと表示されますが、
変数で位置設定、サイズを指定している画像は表示されません。

DrawImageを使用して書いています。
BitMapはPrintPageが呼び出されるたびに、Newしてコピーしています。
(Disposeもしています)

どのようにしたら、ちゃんと印刷されるようになるのでしょうか?

ご教授願います。

環境
Visual Studio .NET 2003
Windows Server 2003
深山
ベテラン
会議室デビュー日: 2006/05/09
投稿数: 66
お住まい・勤務地: 都内某所
投稿日時: 2006-06-16 12:23
はじめまして、深山です。

引用:

シロさんの書き込み (2006-06-16 11:51) より:

1ページ目はちゃんと表示されますが、(プレビュー画面にて確認)



プレビュー画面で確認とのことでしたが、実際に印刷してみてはどうでしょう?

あと、分割した画像を出力して、分割が正しく出来ているか確認することをお勧めします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-06-16 12:51
引用:

シロさんの書き込み (2006-06-16 11:51) より:

1ページ目はちゃんと表示されますが、(プレビュー画面にて確認)
2ページ目以降はちゃんと表示されません。
(snip)
DrawImageを使用して書いています。
BitMapはPrintPageが呼び出されるたびに、Newしてコピーしています。


PrintPage とは、PrintDocument.PrintPage イベントのことでしょうか?
であれば、PrintPageEventArgs 引数の HasMorePages が true になっていないだけではないでしょうか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
深山
ベテラン
会議室デビュー日: 2006/05/09
投稿数: 66
お住まい・勤務地: 都内某所
投稿日時: 2006-06-16 13:09
引用:

シロさんの書き込み (2006-06-16 11:51) より:

2ページ目以降はちゃんと表示されません。



との事だったので、2ページ目以降は、白紙のものが表示されていると思い込んでいました。
なので、分割や印刷の開始位置がうまく出来ていないのではと疑ったのですが・・・

引用:

じゃんぬねっとさんの書き込み (2006-06-16 12:51) より:

PrintPage とは、PrintDocument.PrintPage イベントのことでしょうか?
であれば、PrintPageEventArgs 引数の HasMorePages が true になっていないだけではないでしょうか?



確かに、その可能性が一番高いですね。

僕もHasMorePagesをtrueにしていなくて、つまずいたことがあったのに、
すっかりHasMorePagesの存在を忘れていましたw
シロ
常連さん
会議室デビュー日: 2005/05/15
投稿数: 34
投稿日時: 2006-06-16 13:18
回答ありがとうございます。

PrintPage とは、PrintDocument.PrintPage イベントのことです。
HasMorePagesはちゃんとtrueになっています。(デバッガでも確認しました)
2ページ目以降は、ヘッダ部分(作成した画像をそのまま貼り付けている)と
フッタ部分(直接文字列を書き込んでいる)のみ出てきます。

切り取った画像を表示させようと思ったのですが、
うまく表示することができませんでした。
赤い×になってしまいました。。。
Disposeをしないと、1ページ目が表示されます。
切り取り位置、サイズ等は確認する限りちゃんと変更されています。

他に考えられることはないでしょうか?
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2006-06-16 13:28
とりあえず必要最小限のコードを提示したほうが早いのではないでしょうか。
シロ
常連さん
会議室デビュー日: 2005/05/15
投稿数: 34
投稿日時: 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

よろしくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-06-16 13:46
引用:

シロさんの書き込み (2006-06-16 13:39) より:

' 次のページがあることを宣言する
e.HasMorePages = True


とした場合、PrintPage イベントが再度起きるハズですが、それすら起きないのでしょうか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)