Il modo più semplice per aggiungere un'intestazione e un piè di pagina a un Printing.PrintDocument (.Net 2.0)?
-
09-06-2019 - |
Domanda
Qual è il modo più semplice per aggiungere un'intestazione e un piè di pagina a un oggetto .Net PrintDocument, in modo pragmatico o in fase di progettazione?
Nello specifico, sto provando a stampare un controllo griglia di terze parti (Infragistics GridEx v4.3), che prende un oggetto PrintDocument e si disegna al suo interno.
La pagina risultante contiene solo la griglia e i suoi contenuti, tuttavia vorrei aggiungere un'intestazione o un titolo per identificare il report stampato ed eventualmente un piè di pagina per mostrare chi lo ha stampato, quando e idealmente un numero di pagina e il totale delle pagine.
Sto usando VB.Net 2.0.
Grazie per l'aiuto!
Soluzione
L'oggetto printdocument attiva l'evento printpage per ogni pagina da stampare.Puoi disegnare testo/righe/ecc. nella coda di stampa utilizzando il parametro evento printpageeventargs:
http://msdn.microsoft.com/en-us/library/system.drawing.printing.printdocument.aspx
Diminuiscilo conEvents quando lo passi alla griglia, in modo da poter gestire l'evento.
Altri suggerimenti
Seguente booji-ragazzo's risposta, ecco cosa mi è venuto in mente (che ho semplificato a scopo di esempio):
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
Ho dovuto giocare con i valori di e.PageBounds.Height - x
per allineare gli elementi disegnati.
grazie ancora Booji Boy per il puntatore: ottenere ReportPage.Graphics() era esattamente ciò che cercavo :o)