Maneira mais fácil de adicionar um Cabeçalho e um Rodapé para uma Impressão.PrintDocument (.Net 2.0)?

StackOverflow https://stackoverflow.com/questions/59213

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!

Foi útil?

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)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top