|
■No65565 (ひろ さん) に返信
VB.NETですが、こんな感じでどうでしょう?
PreviewPrintControllerで印刷することにより印刷イメージを作成し
GetPreviewPageInfoによりPreviewPageInfoの配列が取得できるので
その要素数で総ページ数が分かります。ページイメージを全ページ作成するので
ページの画素が大きい場合にはメモリが十分な量あることが前提となります。
メモリが少ない場合はPrintControllerを派生させてページカウントを取るものを
作成するとよいかと思います。
Public Class Form1
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim doc As New MyReport()
Dim ctlPageCnt As New PreviewPrintController
Dim bakCtrl = doc.PrintController
doc.PrintController = ctlPageCnt
doc.Print()
doc.TotalPageCnt = ctlPageCnt.GetPreviewPageInfo.Length
doc.PrintController = bakCtrl
doc.Print()
End Sub
End Class
Public Class MyReport
Inherits PrintDocument
Public Property TotalPageCnt As Integer = 0
Private Pg As Integer
Private Sub MyReport_BeginPrint(sender As Object, e As System.Drawing.Printing.PrintEventArgs) Handles Me.BeginPrint
Pg = 0
End Sub
Private Sub MyReport_EndPrint(sender As Object, e As System.Drawing.Printing.PrintEventArgs) Handles Me.EndPrint
End Sub
Private Sub MyReport_PrintPage(sender As Object, e As System.Drawing.Printing.PrintPageEventArgs) Handles Me.PrintPage
Pg = Pg + 1
Using fnt = New Font("MS ゴシック", 27.0!)
e.Graphics.DrawString(String.Format("{0}/{1}Page", Pg, TotalPageCnt), fnt, Brushes.Black, 100, 100)
End Using
If Pg = 10 Then
e.HasMorePages = False
Else
e.HasMorePages = True
End If
End Sub
End Class
|