OriginalGriff
Единственный способ получить количество страниц - это спросить свой код, потому что ваш код-это единственная часть приложения, которая знает, что она печатает на каждой странице!
Таким образом, вы должны использовать "фиктивный пункт назначения", чтобы сделать это:
private void FrmMain_Shown(object sender, EventArgs e)
{
PrintDocument pd = new PrintDocument();
pd.PrintPage += Pd_PrintPage;
pageNo = 0;
Console.WriteLine(GetPageCount(pd));
}
private int pageNo = 0;
private void Pd_PrintPage(object sender, PrintPageEventArgs e)
{
e.HasMorePages = pageNo++ < 3;
}
public static int GetPageCount(PrintDocument pd)
{
int count = 0;
PrintController original = pd.PrintController;
pd.PrintController = new PreviewPrintController();
pd.PrintPage += (sender, e) => count++;
pd.Print();
pd.PrintController = original;
return count;
}
Или в VB:
Private Sub FrmMain_Shown(ByVal sender As Object, ByVal e As EventArgs)
Dim pd As PrintDocument = New PrintDocument()
pd.PrintPage += AddressOf Pd_PrintPage
pageNo = 0
Console.WriteLine(GetPageCount(pd))
End Sub
Private pageNo As Integer = 0
Private Sub Pd_PrintPage(ByVal sender As Object, ByVal e As PrintPageEventArgs)
If pageNo < 3 Then
e.HasMorePages = True
Else
e.HasMorePages = False
End If
pageNo = pageNo + 1
End Sub
Public Shared Function GetPageCount(ByVal pd As PrintDocument) As Integer
Dim count As Integer = 0
Dim original As PrintController = pd.PrintController
pd.PrintController = New PreviewPrintController()
pd.PrintPage += Function(sender, e) count = count + 1
pd.Print()
pd.PrintController = original
Return count
End Function