Maneira mais fácil de adicionar um Cabeçalho e um Rodapé para uma Impressão.PrintDocument (.Net 2.0)?
-
09-06-2019 - |
Pergunta
Qual é a maneira mais fácil de adicionar um cabeçalho e rodapé a um .Net PrintDocument objeto, de forma pragmática, ou em tempo de design?
Especificamente, estou tentando imprimir uma festa de 3 controle de grade (Infragistics GridEx v4.3), que toma um objeto PrintDocument e desenha a si próprio para ele.
A página resultante contém apenas a grade e conteúdo - no entanto eu gostaria de adicionar um cabeçalho ou título que identifique o relatório impresso, e, possivelmente, um rodapé, para mostrar quem imprimiu, quando, e, de preferência, número de página e o total de páginas.
Eu estou usando VB.Net 2.0.
Obrigado por sua ajuda!
Solução
O objeto printdocument é accionado o evento printpage para cada página a ser impressa.Você pode desenhar texto/linhas/etc para a fila de impressão usando o printpageeventargs parâmetro de evento:
http://msdn.microsoft.com/en-us/library/system.drawing.printing.printdocument.aspx
Dim ele WithEvents quando passar para a grade, você pode manipular o evento.
Outras dicas
Seguinte booji-boy's de resposta, aqui está o que eu consegui o que eu tenho simplificado para fins de exemplo):
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
Eu tinha que jogar com os valores de e.PageBounds.Height - x
para obter os itens desenhados a linha de cima.
Obrigado novamente Booji Boy para o ponteiro ficar no ReportPage.Gráficos() foi exatamente o que eu procurava :o)