2011-09-26 18 views
2

PrintDocumentを使用して、イメージ(ファイルから)をプリンタに印刷しようとしています。問題印刷されたページに合わせてイメージのサイズを変更する

イメージを印刷したときにフルページになるようにイメージのサイズを変更していますので、イメージが少し切り取られています。

EDIT 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に印刷するとき、それは完全にスケーリングされていることですが、私は正確に同じ印刷するときそれが適合しない実際のプリンタへのコード。完全なコードはthis url 使用で見つけることができ

EDIT 3

:あなたが最も個人的なプリンタがすることができないfull bleedでページを印刷するには欠けているように

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 
+0

サイズ変更を行うコードを投稿できますか?実際にはイメージのサイズを変更するのではなく、イメージを切り取っている可能性があります。 – briddums

+0

[Boundsドキュメント](http://msdn.microsoft.com/en-us/library/system.drawing.printing.pagesettings.bounds.aspx)によると、「Boundsプロパティを使用するページの印刷領域を計算するMarginsプロパティと一緒に使用します。おそらく 'printSettings.DefaultPageSettings.Margins'から値を減算する必要がありますか? – lsuarez

+0

画像サイズ変更コードに問題がある可能性があります。サイズを変更しないで、Graphics.DrawImage(Image、Rectangle)オーバーロードで描画してください。あなたはボーナスとしてより良い出力品質を得るでしょう。 –

答えて

0

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

0

が鳴ります。上記のコメントの1つとして、画像を適切なサイズに再調整する余白を考慮してください。

+0

実際にはマージン内で印刷したいと思います - オリジナルの投稿へのEDIT2を参照してください。 –

1

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

+0

'e.Graphics.VisibleClipBounds'には' PrintableArea'と同じ幅と高さが含まれていますが、原点は 'Marginではなく0,0です。 Left'、 'Margin.Top' –

1

あなたはMargiBoundsで作業する必要があります。

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))) 
関連する問題