Nicomendox Ответов: 1

Как я могу получить printdocument pagecount без show в printpreviewdialog?


Всем привет.

Мне просто нужно получить Printdocument PageCount. Мне нравится получать его только с помощью Button_click with в messagebox. Я могу получить результат только в том случае, если использую с вызовом PrintPreviewDialog.showDialog windows.

Что я уже пробовал:

Private Sub Button12_Click(sender As Object, e As EventArgs) Handles Button12.Click
        PrintPreviewDialog1.Document = PrintDocument1

        PrintPreviewDialog1.ShowDialog()

    End Sub

1 Ответов

Рейтинг:
2

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