Есть ли лучший способ получить количество страниц из PrintDocument, чем этот? - PullRequest
8 голосов
/ 29 июня 2010

Это лучшее, что я придумал:

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;
}

Есть ли лучший способ сделать это?(Это на самом деле довольно медленно)

Ответы [ 3 ]

5 голосов
/ 12 июля 2012

Таким образом, окончательное решение будет:

public static int GetPageCount(PrintDocument printDocument)
{
    int count = 0;
    printDocument.PrintController = new PreviewPrintController();
    printDocument.PrintPage += (sender, e) => count++;
    printDocument.Print();
    return count;
}
1 голос
/ 26 января 2012

Объявите PrintController как Printing.PreviewPrintController.

Таким образом, вы печатаете только в память, а не в файл.

Я использую это в проекте VB.NET, и он отлично работает!

0 голосов
/ 22 февраля 2011

Проверка - http://msdn.microsoft.com/en-us/library/system.drawing.printing.printdocument.querypagesettings.aspx

Существует событие PrintDocument.QueryPageSettings, которое может быть обработано.Если обработано, оно вызывается перед каждым событием PrintDocument.PrintPage.Таким образом, вы можете поставить там счетчик для подсчета страниц.Таким образом, вы можете избежать двух проходов (один проход для печати документа в файл для подсчета страниц и второй проход для печати фактического задания).

В приведенном выше URL также есть пример кода для счетчика.

Надеюсь, это поможет

...