0

の表示もバッチリですし、PDF995などの仮想プリンターを使えPrintPreviewDialogばバッチリです。PrintDocument.Print()ただし、PrintDocument.Print()物理プリンターを選択すると (複数のプリンターを試しました)、ボックスの左上隅は正しく配置されますが、右下隅は正しく配置されません。右下は 5.5 mm 右 (紙面上) で、7 mm 下です。

何が起こっているのかをさらに明確にするために、視覚的な補助を描画しました。PrintPreviewDialg赤いボックスは私が期待するものであり、仮想プリンターを使用したり、印刷したりするとどうなりますか。青いボックスはPrintDocument.Print()、物理プリンターを使用して選択したときに発生するものです。

なぜこれが起こっているのか、さらに重要なことに、それを解決するために何ができるかを誰かが知っていますか?

印刷と印刷プレビュー


私の印刷ボタンのコード...

Dim doc As New Printing.PrintDocument
doc.OriginAtMargins = True
doc.DefaultPageSettings.Margins = New Printing.Margins(50, 50, 50, 50)
AddHandler doc.PrintPage, AddressOf PrintPage

Dim printer As New PrintDialog
printer.Document = doc
printer.UseEXDialog = True
If printer.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then
    printer.Document.Print()
End If

私の印刷プレビューボタンのコード...

Dim doc As New Printing.PrintDocument
doc.OriginAtMargins = True
doc.DefaultPageSettings.Margins = New Printing.Margins(50, 50, 50, 50)

AddHandler doc.PrintPage, AddressOf PrintPage

Dim preview As New PrintPreviewDialog
preview.Document = doc
preview.ShowDialog(Me)

PrintPage()ルーチンのコード...

Public Sub PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
    Dim Bounds As New Rectangle(e.PageSettings.PrintableArea.X, e.PageSettings.PrintableArea.Y, e.MarginBounds.Width, e.MarginBounds.Height)
    e.Graphics.DrawRectangle(Pens.Black, Bounds)
    e.HasMorePages = False
End Sub

また、 my の代わりに設定OriginAtMarginFalseて使用しようとしました。どちらもまったく同じ動作になります。e.MarginBoundsBounds Rectangle

4

1 に答える 1

0

問題は、設定を使用していることだと思いe.PageSettings.PrintableArea.Xます。長方形を描画するとき、これは使用しているプリンターによって異なる場合があります。次のようなものを使用します。

Dim Bounds As New Rectangle(e.DefaultPageSettings.Margins.left, e.DefaultPageSettings.Margins.top, e.MarginBounds.Width, e.MarginBounds.Height)

プリンタのPrintableArea設定が何らかの理由で正しくない場合を除いて、これにより、プリンタでエッジが切り取られて印刷されない可能性があることに注意してください...

于 2013-02-07T13:48:32.300 に答える