2

を使用して、(ファイルから) 画像をプリンターに印刷しようとしていますPrintDocument

これを印刷すると、画像がわずかに切り取られて、印刷出力でページ全体になるように画像のサイズを変更しています。

編集2

余白を使用して、使用する領域を計算しています

With printSettings.DefaultPageSettings
    Dim areaWidth As Single = .Bounds.Width - .Margins.Left - .Margins.Right
    Dim areaHeight As Single = .Bounds.Height - .Margins.Top - .Margins.Bottom
End With

ページの境界は 1169x827 (A4) で、余白を含めると 1137x795 です。

サイズ変更後の画像サイズは 1092x682 で、次のコードを使用して描画しています。 e.Graphics.DrawImage(printBitmap, .Margins.Left, .Margins.Top)

厄介なことは、PrintPreviewDialog に印刷すると完全にスケーリングされますが、まったく同じコードを実際のプリンターに印刷すると収まらないことです。

編集3

完全なコードは、この URLで見つけることができます 。

Dim clsPrint As New clsPrinting
    With clsPrint
        .Landscape = True
        .SetMinimumMargins()
        If .ShowPrintDialog Then
            .Documentname = "Some doc name"
            .Preview = False 'When True shows ok
            .PrintImage("filename of a png file")
        End If
    End With
4

4 に答える 4

1

PrintPage関数の印刷可能なページサイズにe.graphics.VisibleClipBoundsを使用してみてください。ハンスが言ったように、印刷する前に画像のサイズを変更しない方が良いです。

于 2011-09-26T23:22:57.810 に答える
1

次の作業を行う必要がありますMarginBounds

C#:

e.Graphics.DrawImage(your_image, e.MarginBounds);

C++/CLI:

e->Graphics->DrawImage(your_image, e->MarginBounds);

注: 画像の縦横比が同じでない場合は、調整する必要があります。この例では、画像の幅がページの幅を超えています:

Dim adjustment As Double = img.Width / e.MarginBounds.Width
e.Graphics.DrawImage(img, New Rectangle(New Point(0, 0), New Point(img.Width / adjustment, img.Height / adjustment)))
于 2014-01-04T08:15:03.187 に答える
0

ほとんどの個人用プリンターでは印刷できないフルブリードでページを印刷したいようです。上記のコメントの1つが言及しているように、余白を考慮して画像のサイズを適切なサイズに変更してください。

于 2011-09-26T14:57:14.047 に答える
0

この問題の解決策が見つかりませんでした。印刷プレビューを実行するときにプリンターの余白を使用し、実際に印刷するときに余白 (0,0 原点から開始) を無視することで、この問題を回避しました。これはおそらくプリンタードライバーのバグだと思いますか?しかし、私は確認できません。

于 2011-10-11T13:28:13.557 に答える