DOBON.NET DOBON.NETプログラミング掲示板過去ログ

PrintDocumentでドットプリンタへ印刷+改ページ

環境/言語:[OS : Windows XP Professional / 言語 : Visual Basic .NET / .NET Framework : 1.1]
分類:[.NET]

【解決したい問題】

ドットプリンタ印刷時の改ページ処理について教えて下さい。

PrintDocumentを使用して以下のようなコーディングをしています。
以下コーディングでpd.Print()をコメントアウトして、
PrintPreviewDialogオブクトでプレビューすると正しく改ページされているのですが、印刷されたものは、2ページ移行少しづつずれていってしまっています。印刷する用紙はスプロケット付の専用用紙で、現行オフコンから印刷指示だされているのですが、問題なく改ページされ印刷されています。

Private intPrintSu As Integer

Private printFont As New _
Font("MSP ゴシック", 10, FontStyle.Regular)

Privete Sub DoPrint()

Dim pd As PrintDocument

pd = New PrintDocument

' 印刷数を画面で指定
intPrintSu = Me.TextBox1.Text

AddHandler pd.PrintPage, AddressOf pd_PrintPage

  pd.Print()

End Sub

Private Sub pd_PrintPage(ByVal sender As Object, _
ByVal e As System.Drawing.Printing.PrintPageEventArgs)


' 印刷する初期位置を決定
Dim x As Double = 0
Dim y As Double = 0

e.Graphics.DrawString("AAA", printFont, Brushes.Black, x, y)

' ページ数カウントデクリメント
intPrintCnt += -1

If intPrintCnt <= 0 Then
e.HasMorePages = False
Else
e.HasMorePages = True
End If

End Sub

【解決するために何をしたか】

Googleで検索した検索しましたが、
VB NET でPrintDocumentで改ページするといった場合は
HasMorePagesのことしかヒットしませんでした。
ご質問の内容ではっきりしていない点がありますので、質問させてください。

このコードでは常に"AAA"という字を座標(0,0)に書いているようですが、常に(0,0)に書いているにもかかわらず、ページによって印刷される位置がずれるということでしょうか?それとも、ここには書かれていないが、xとyの値は変化しているのでしょうか?
■No18297に返信(管理人さんの記事)
> ご質問の内容ではっきりしていない点がありますので、質問させてください。
>
> このコードでは常に"AAA"という字を座標(0,0)に書いているようですが、常に(0,0)に書いているにもかかわらず、ページによって印刷される位置がずれるということでしょうか?それとも、ここには書かれていないが、xとyの値は変化しているのでしょうか?

返信ありがとうございます。
常に座標(0,0)としています。
追加で質問もさせて下さい。
そもそも、ドットプリンタへの印刷をするとき、.NETでは一般的にどのようにするのでしょうか?
私のようにPrintDocumentを使用するのか、
CrystalReport for .NET とか使用するのでしょうか。。。
または、帳票ツール??
ネットで検索するとよくActiveReportがヒットするのですが。。。

すいませんが引き続きご教授願います。
そのドットプリンタが.NETに対応しているか確認が必要かもです。
■No18338に返信(あんさんの記事)
> そのドットプリンタが.NETに対応しているか確認が必要かもです。
>

あんさん返信ありがとうございます。
ドットプリンタに.NET対応か否かというのがあるのでしょうか。
そうすると、かなり旧式のドットプリンタなのでやばい気がします。
ちょっとプリンタの型で調べてみます。。。

引き続き何か情報があればご教授願います。
改行の制御コードが特殊だと注意しないといけないかもしれません。
■No18342に返信(あんさんの記事)
> 改行の制御コードが特殊だと注意しないといけないかもしれません。

あんさん度々ありがとうございます。

制御コードというキーワードと、ドットプリンタの型(IBM 5577-S02)から、いろいろと検索してみたところ、IBMのページにいろいろとあるのですが、内容が深すぎてわからなすぎです。。

私の少ない頭で一所懸命考えてみたのですが、結局わからずじまいでした。
しかもこんな時間に。。。

だんだん頭がパンクしてきました。
まず、座標(0,0)が印刷可能範囲内にあるという保障はありませんので、印刷可能範囲内に印字するようにしてください。

また、もしプリンタが.NETのPrintDocumentで印刷できないタイプのものでしたら、下のリンク先をご覧になってください。

How to send raw data to a printer by using Visual Basic .NET
http://support.microsoft.com/kb/322090/

DOBON.NET | プログラミング道 | プログラミング掲示板