2008-09-12 1 views
4

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

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

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

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

Благодарим за помощь!

+0

печати заголовка и колонтитула на PrintDocument сами? – kokos 2008-09-14 13:59:49

+0

Исправить. Путем создания заполнителей во время разработки или путем прямого рисования на PrintDocument во время выполнения – Andrew 2008-09-14 20:15:33

ответ

4

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

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

затемнить WithEvents когда вы передаете его к сетке, так что вы можете обработать событие.

4

После ответа 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 за указатель - получение на ReportPage.Graphics() было именно то, что я был после того, как: о)

Смежные вопросы