Мое приложение рисует диаграммы в метафайле Windows. Пользователи должны иметь возможность распечатывать диаграммы в центре страницы. Краткое описание кода печати:
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 это рисует прямоугольник на самом краю страницы. Для чего он стоит, я протестировал на Toshiba e-Studio 3510c и HP LaserJet 4000 с теми же результатами. Любая помощь приветствуется, это мучает меня уже несколько недель.
Обновление:
В итоге я использовал e.PageSettings.PrintableArea, но похоже, что e.Graphics.VisibleClipBounds возвращает те же значения, что и в ответе xpda.