有没有比这更好的方法从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; } 

有一个更好的方法吗? (这实际上很慢)

所以最终的解决方案是:

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

将PrintController声明为Printing.PreviewPrintController

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

我在VB.NET项目中使用它,它完美地运行!

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

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

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

希望这可以帮助