有没有比这更好的方法从PrintDocument获取页数?

时间:2010-06-29 01:11:14

标签: c# printing printdocument

这是我提出的最好的:

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 个答案:

答案 0 :(得分:5)

所以最终的解决方案是:

public static int GetPageCount(PrintDocument printDocument)
{
    int count = 0;
    printDocument.PrintController = new PreviewPrintController();
    printDocument.PrintPage += (sender, e) => count++;
    printDocument.Print();
    return count;
}

答案 1 :(得分:1)

将PrintController声明为Printing.PreviewPrintController

这样,您只能打印到内存,而不能打印到文件。

我在VB.NET项目中使用它,它完美无缺!

答案 2 :(得分:0)

检查 - http://msdn.microsoft.com/en-us/library/system.drawing.printing.printdocument.querypagesettings.aspx

可以处理PrintDocument.QueryPageSettings事件。如果处理,则在每个PrintDocument.PrintPage事件之前调用它。所以你可以在那里放一个计数器来计算页数。这样你可以避免两次传递(一次传递打印文件到文件计数页面和第二次传递实际作业打印)。

上面的URL也有一些计数器示例代码。

希望这有帮助

相关问题