2009-09-15 86 views
1

我的應用程序在Windows圖元文件中繪製圖表。用戶需要能夠在頁面上很好地打印圖表。快速打印的打印代碼:爲什麼我不能將圖像放在頁面上以在VB.NET中打印?

Private Sub PrintPage(ByVal sender As Object, ByVal e As PrintPageEventArgs) 
    Dim header As Imaging.MetafileHeader = metafile.GetMetafileHeader() 
    Dim sz As New SizeF(100 * header.Bounds.Width/header.DpiX, 100 * header.Bounds.Height/header.DpiY) 
    Dim p As New PointF((e.PageBounds.Width - sz.Width)/2, (e.PageBounds.Height - sz.Height)/2) 

    e.Graphics.DrawImage(metafile, p) 
End Sub 

如果我打印到PDF,這看起來很完美。但是,如果我打印到實際的打印機,它偏離了中心位置,大約1/8英寸向下和向右。我做了一個快速實驗,看看PageBounds在做什麼

e.Graphics.DrawRectangle(Pens.Red, e.PageBounds) 

和結果是一樣的,略偏離中心。在PDF上,它在頁面的邊緣繪製了一個矩形。對於它的價值,我已經在東芝e-Studio 3510c和HP LaserJet 4000上進行了測試,結果相同。任何幫助表示讚賞,這一直困擾着我好幾個星期。

更新:

我結束了使用e.PageSettings.PrintableArea,但它看起來像e.Graphics.VisibleClipBounds讓你相同的值每xpda的答案。

回答

2

而不是使用e.pagebounds作爲邊界框,請嘗試使用e.graphics.VisibleClipBounds。某些打印機驅動程序對e.pagebounds有點不可靠,而visibleclipbounds似乎更準確。

0

我認爲這是打印機頁面所有邊緣有不同邊距的問題。相反,圖表相對的定位到Bounds的,請嘗試使用這些屬性來定位它相對於頁面的真實的邊界:

e.PageSettings.PaperSize.Width 
e.PageSettings.PaperSize.Height 

的問題可能不與PDF格式出現,因爲你可以打印頁面的整個區域(即Bounds.WidthBounds.Height = 0,這與使用PaperSize屬性相同)。

0

下面的代碼:

Private Sub PrintPage(ByVal sender As Object, ByVal e As PrintPageEventArgs) 

Dim header As Imaging.MetafileHeader = metafile.GetMetafileHeader() 
    Dim sz As New SizeF(100 * header.Bounds.Width/header.DpiX, 100 * header.Bounds.Height/header.DpiY) 

Dim LeftMargin, TopMargin As Single 

LeftMargin = ((e.Graphics.VisibleClipBounds.Width - sz.width)/2) + (e.Graphics.VisibleClipBounds.Left/2) 

TopMargin = ((e.Graphics.VisibleClipBounds.Height- sz.Height)/2) + (e.Graphics.VisibleClipBounds.Top/ 2) 


    e.Graphics.DrawImage(metafile, LeftMargin , TopMargin, sz) 

End Sub 
相關問題