C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: PrintDocument.Print で総ページ数取得


(過去ログ 110 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■65565 / inTopicNo.1)  PrintDocument.Print で総ページ数取得
  
□投稿者/ ひろ (7回)-(2013/03/08(Fri) 10:52:04)

分類:[C#] 

PrintDocument.Print で印字する印刷ページの中に「総ページ数」を入れたいです。

自分で検討した結果、Print()を2回実行して、

・1回目でページ数を把握→印刷はしない。
・2回目で総数を入れながら印刷を行う。

を思いついたのですが、1回目のPrint()で実際には印刷がかからないように
する方法がわかりませんでした。

または、もっと良い総ページ数の取得方法があったら教えてください。
引用返信 編集キー/
■65566 / inTopicNo.2)  Re[1]: PrintDocument.Print で総ページ数取得
□投稿者/ 魔界の仮面弁士 (162回)-(2013/03/08(Fri) 10:59:06)
No65565 (ひろ さん) に返信
> PrintDocument.Print で印字する印刷ページの中に「総ページ数」を入れたいです。

ページ数制御のための HasMorePagesプロパティは、御自身で設定されるものですよね。
それを true / false のいずれにセットするべきかは、どのように判定されていますか?

その算出を事前(BeginPrint イベントなど)に行ってやれば、
総ページ数のカウントもできるのでは無いでしょうか。
引用返信 編集キー/
■65569 / inTopicNo.3)  Re[1]: PrintDocument.Print で総ページ数取得
□投稿者/ shu (217回)-(2013/03/08(Fri) 13:17:01)
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

引用返信 編集キー/
■65575 / inTopicNo.4)  Re[2]: PrintDocument.Print で総ページ数取得
□投稿者/ ひろ (8回)-(2013/03/08(Fri) 17:30:55)
ありがとうございます。
HasMorePages を操作しているところで検討してみます。

しかし。
shuさんのアドバイスが理解しきれていません。
もう少し見てみます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -