印刷プレビューの印刷について
- 題名: 印刷プレビューの印刷について
- 著者: のぶ
- 日時: 2003/11/11 17:22:09
- ID: 1393
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: 印刷プレビューの印刷について
- 著者: 管理人
- URL: http://dobon.net
- 日時: 2003/11/12 3:34:57
- ID: 1398
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: 印刷プレビューの印刷について
- 著者: のぶ
- 日時: 2003/11/12 10:10:39
- ID: 1400
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
はじめまして。VB.NET初心者です。
どぼん!の .NET Tipsの
「文字列を印刷する」
「印刷プレビューを表示する」
を参考に以下のプログラム(VB.NET)を作成し、印刷プレビューを表示したのですが、
プレビュー内容は意図したとおり表示されるのですが、
プレビュー画面の左上の印刷ボタンをクリックして印刷すると、
プレビューどおりに印刷されません。
印刷内容は「文字列を印刷する」のソースに、
以下の*印の部分の2行を追加しただけです。
印刷すると、追加した2行は印刷されますが、Textbox1の内容のみが印刷されません。
(Textbox1の内容が長い文字列の場合も改行が入った場合も同じです)
プレビューどおりに印刷する方法をご存じの方いらっしゃいましたら、お教え願います。
------------------------------------------------------------------
Private Sub pd_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
If printingPosition = 0 Then
'改行記号を'\n'に統一する
printingText = printingText.Replace(vbCrLf, vbLf)
printingText = printingText.Replace(vbCr, vbLf)
End If
'印刷する初期位置を決定
Dim x As Integer = e.MarginBounds.Left
Dim y As Integer = e.MarginBounds.Top
'* 次の行が追加した行です("タイトルという文字を最初の行に出力しています)
e.Graphics.DrawString("タイトル", printFont, Brushes.Black, x, y)
'1ページに収まらなくなるまでループ
While e.MarginBounds.Height > y + printFont.Height
Dim line As String = ""
While True
'印刷する文字がなくなるか、
'改行の時はループから抜けて印刷する
If printingPosition >= printingText.Length OrElse _
printingText.Chars(printingPosition) = vbLf Then
printingPosition += 1
Exit While
End If
'一文字追加し、印刷幅を超えるか調べる
line += printingText.Chars(printingPosition)
If e.Graphics.MeasureString(line, printFont).Width _
> e.MarginBounds.Width Then
'印刷幅を超えたため、折り返す
line = line.Substring(0, line.Length - 1)
Exit While
End If
'印刷文字位置を次へ
printingPosition += 1
End While
'一行書き出す
e.Graphics.DrawString(line, printFont, Brushes.Black, x, y + printFont.Height)
'次の行の印刷位置を計算
y += printFont.GetHeight(e.Graphics)
End While
'* 次の行が追加した行です("ページ"という文字を横マージンの中央・最終行の2行下の位置に出力しています)
e.Graphics.DrawString("ページ", printFont, Brushes.Black, e.MarginBounds.Width / 2, y + printFont.GetHeight * 2)
'次のページがあるか調べる
If printingPosition >= printingText.Length Then
e.HasMorePages = False
Else
e.HasMorePages = True
End If
End Sub