RohanBhosale21 Ответов: 1

Создайте fixeddocument с несколькими страницами для печати без showdialog каждый раз


У меня есть приложение WPF, в котором пользовательские элементы управления загружаются при нажатии кнопок. В качестве отчета каждая страница является пользовательским элементом управления, и я загружаю несколько пользовательских элементов управления как несколько страниц.
Когда я пытаюсь печатать с помощью FixedDocument, если я вызываю PrintDialog.ShowDialog для каждого пользовательского элемента управления я могу печатать элементы управления правильно, но это означает, что пользователь должен настроить принтер для каждой страницы.
Есть ли способ показать PrintDialog только один раз, получить настройки принтера, а затем применить настройки для остальных страниц и распечатать страницы впоследствии?

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

Я попытался разделить объект FixedDocument между вызовами функции печати, которая у меня есть, которая вызывает через документ.Страницы.Добавлять().
Однако, как уже упоминалось, он работает, если у меня есть ShowDialog для каждой итерации, и в противном случае терпит неудачу.

1 Ответов

Рейтинг:
2

Maciej Los

Да, есть способ! Ты должен позвонить PrintDialog в начале процесса, то вы должны пройти цикл через "страницы WPF".

Например:

// select printer and get printer settings
PrintDialog pd = new PrintDialog();
//catch when user cancel process
//if (!pd.ShowDialog()) return;

// create a document and set PageSize from PrintDialog!
FixedDocument document = new FixedDocument();
document.DocumentPaginator.PageSize = new Size(pd.PrintableAreaWidth, pd.PrintableAreaHeight);

//create page by page
foreach(var p in YourPages) //loop through your collection of controls  
{
    // create a page
    FixedPage page1 = new FixedPage();
    page1.Width = document.DocumentPaginator.PageSize.Width; //trick!
    page1.Height = document.DocumentPaginator.PageSize.Height; //trick!
    //further instructions
}


Видеть:
Печать WPF Часть 2 – фиксированный документ[^]