Самый простой способ добавить верхний и нижний колонтитулы в Printing.PrintDocument (.Net 2.0)?

Какой самый простой способ добавить верхний и нижний колонтитулы к объекту.Net PrintDocument, прагматически или во время разработки?

В частности, я пытаюсь напечатать сторонний элемент управления сеткой (Infragistics GridEx v4.3), который берет объект PrintDocument и вписывается в него.

Полученная страница содержит только сетку и ее содержимое - однако я хотел бы добавить заголовок или заголовок, чтобы идентифицировать напечатанный отчет, и, возможно, нижний колонтитул, чтобы показать, кто его напечатал, когда и, в идеале, номер страницы и общее количество страниц.

Я использую VB.Net 2.0.

Спасибо за вашу помощь!

2 ответа

Решение

Объект printdocument запускает событие printpage для каждой страницы, которая будет напечатана. Вы можете нарисовать текст / строки / и т. Д. В очередь печати, используя параметр события printpageeventargs:

http://msdn.microsoft.com/en-us/library/system.drawing.printing.printdocument.aspx

Уменьшите его WithEvents, когда вы передадите его в сетку, чтобы вы могли обработать событие.

После ответа от booji-boy вот что я придумал (что я упростил для примера):

Private Sub btnPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrint.Click

        Dim oDoc As New Printing.PrintDocument
        oDoc.DefaultPageSettings.Landscape = True
        AddHandler oDoc.PrintPage, AddressOf PrintPage

        oDoc.DocumentName = "Printout"

        InfragisticsWinGrid.PrintPreview(InfragisticsWinGrid.DisplayLayout, oDoc)

    End If
End Sub


Private Sub PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)

    ' Draw title
    e.Graphics.DrawString("Report Title"), New Font("Arial", 16), Brushes.Black, 95, 70)

    ' Draw footer
    e.Graphics.DrawImage(DirectCast(mResources.GetObject("footer_logo"), Drawing.Bitmap), 95, e.PageBounds.Height - 87)
    Dim drawFont As New Font("Arial", 8.75)

    e.Graphics.DrawString("Report Title", drawFont, Brushes.Gray, 190, e.PageBounds.Height - 90)
    e.Graphics.DrawString("Printed", drawFont, Brushes.Gray, 190, e.PageBounds.Height - 76)
    e.Graphics.DrawString("Printed By", drawFont, Brushes.Gray, 190, e.PageBounds.Height - 62)

    ' Draw some grid lines to add structure to the footer information
    e.Graphics.DrawLine(Pens.Gray, 246, e.PageBounds.Height - 90, 246, e.PageBounds.Height - 48)
    e.Graphics.DrawLine(Pens.Gray, 188, e.PageBounds.Height - 75, 550, e.PageBounds.Height - 75)
    e.Graphics.DrawLine(Pens.Gray, 188, e.PageBounds.Height - 61, 550, e.PageBounds.Height - 61)

    e.Graphics.DrawString("Report", drawFont, Brushes.Black, 250, e.PageBounds.Height - 90)
    e.Graphics.DrawString(Date.Now.ToShortDateString & " " & Date.Now.ToShortTimeString, drawFont, Brushes.Black, 250, e.PageBounds.Height - 76)
    e.Graphics.DrawString("Andrew", drawFont, Brushes.Black, 250, e.PageBounds.Height - 62)

End Sub

Я должен был играть со значениями e.PageBounds.Height - x чтобы получить нарисованные предметы в линию.

Booji Boy раз спасибо Booji Boy за указатель - получение в ReportPage.Graphics() было именно то, что я был после: о)

Другие вопросы по тегам