2008-09-12 21 views
4

Quel est le moyen le plus simple d'ajouter un en-tête et un pied de page à un objet .Net PrintDocument, de manière pragmatique ou au moment du design? En particulier, j'essaie d'imprimer un contrôle de grille tiers (Infragistics GridEx v4.3), qui prend un objet PrintDocument et s'y imbrique. La page résultante contient juste la grille et son contenu - cependant je voudrais ajouter un en-tête ou un titre pour identifier le rapport imprimé, et éventuellement un pied de page pour montrer qui l'a imprimé, quand, et idéalement un numéro de page et un total pages J'utilise VB.Net 2.0.Le moyen le plus simple d'ajouter un en-tête et un pied de page à un Printing.PrintDocument (.Net 2.0)?

Merci pour votre aide!

+0

Imprimer l'en-tête et pied de page sur la PrintDocument vous? – kokos

+0

Correct. En créant des espaces réservés au moment de la conception, ou en dessinant directement sur le PrintDocument au moment de l'exécution – Andrew

Répondre

4

L'objet printdocument déclenche l'événement printpage pour chaque page à imprimer. Vous pouvez dessiner le texte/lignes/etc dans la file d'attente d'impression à l'aide du paramètre événement PrintPageEventArgs:

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

Dim il WITHEVENTS lorsque vous passez à la grille, de sorte que vous pouvez gérer l'événement.

+0

Merci pour le conseil, je vais essayer: o) – Andrew

+1

Doux, pas de problème! –

4

Après la réponse de » booji-boy, voici ce que je suis venu avec (que j'ai simplifié par exemple des fins):

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 

je devais jouer avec les valeurs de e.PageBounds.Height - x pour obtenir les éléments dessinés à la ligne en haut

Merci encore Booji Boy pour le pointeur - obtenir au ReportPage.Graphics() est exactement ce que je cherchais: o)