8

これは私が思いついた最高のものです:

public static int GetPageCount( PrintDocument printDocument )
{
    printDocument.PrinterSettings.PrintFileName = Path.GetTempFileName();
    printDocument.PrinterSettings.PrintToFile = true;

    int count = 0;

    printDocument.PrintController = new StandardPrintController();
    printDocument.PrintPage += (sender, e) => count++;

    printDocument.Print();

    File.Delete( printDocument.PrinterSettings.PrintFileName );

    return count;
}

これを行うより良い方法はありますか?(これは実際にはかなり遅いです)

4

3 に答える 3

5

したがって、最終的な解決策は次のようになります。

public static int GetPageCount(PrintDocument printDocument)
{
    int count = 0;
    printDocument.PrintController = new PreviewPrintController();
    printDocument.PrintPage += (sender, e) => count++;
    printDocument.Print();
    return count;
}
于 2012-07-12T16:50:15.783 に答える
1

PrintController を として宣言しPrinting.PreviewPrintControllerます。

この方法では、ファイルではなくメモリにのみ印刷します。

これを VB.NET プロジェクトで使用していますが、完全に機能します。

于 2012-01-26T12:52:06.437 に答える
0

チェック-http://msdn.microsoft.com/en-us/library/system.drawing.printing.printdocument.querypagesettings.aspx

処理できるPrintDocument.QueryPageSettingsイベントがあります。処理される場合、各PrintDocument.PrintPageイベントの前に呼び出されます。したがって、ページをカウントするためにそこにカウンターを置くことができます。このようにして、2つのパス(ページをカウントするためにドキュメントをファイルに印刷するための1つのパスと、実際のジョブの印刷のための2番目のパス)を回避できます。

上記のURLには、カウンターのサンプルコードも含まれています。

お役に立てれば

于 2011-02-22T18:52:20.543 に答える