以实用或在设计时向.Net PrintDocument对象添加页眉和页脚的最简单方法是什么?
具体来说,我正在尝试打印第三方网格控件(Infragistics GridEx v4.3),它采用PrintDocument对象并将其自身绘制到其中。
结果页面只包含网格及其内容 - 但是我想添加一个标题或标题来标识打印的报告,可能还有一个页脚来显示谁打印它,何时,最好是页码和总页数
我正在使用VB.Net 2.0。
感谢您的帮助!
答案 0 :(得分:4)
printdocument对象为每个要打印的页面触发printpage事件。您可以使用printpageeventargs事件参数将文本/行/等绘制到打印队列中:
http://msdn.microsoft.com/en-us/library/system.drawing.printing.printdocument.aspx
当您将其传递给网格时将其调整为WithEvents,以便您可以处理该事件。
答案 1 :(得分: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()正是我所追求的:o)