WPF - нумерация страниц при печати визуала - PullRequest
6 голосов
/ 06 февраля 2010

У меня есть окно WPF с рамкой. У меня есть код для распечатки содержимого фрейма с использованием printdialog и printvisual. Но это будет печатать только то, что появляется на экране, даже если доступны свитки кадров и другие части.

Есть ли способ добавить нумерацию страниц и убедиться, что все содержимое моего кадра будет напечатано.

Или есть другой способ взять содержимое моего кадра и распечатать его? не использовать printvisual?

1 Ответ

14 голосов
/ 11 февраля 2010

Да. Я сделал это Это не очень сложно.

  1. Оберните ваш кадр в ScrollViewer, у которого обычно отключена горизонтальная и вертикальная прокрутка

  2. Когда вы будете готовы к печати, включите вертикальную прокрутку. Это заставит кадр сказать, что он имеет бесконечное вертикальное пространство, поэтому он будет отображать весь контент. Затем вызовите UpdateLayout (), чтобы получить макет для обновления.

  3. Реализуйте IDocumentPaginator, чтобы возвращать один и тот же кадр для каждой страницы, но каждый раз настраивайте клип и RenderTransform, чтобы отображать различную часть фактического кадра.

  4. Печать с использованием пользовательского IDocumentPaginator

Приведенное выше описание предполагает, что вы хотите зафиксировать ширину рамки по ширине страницы и разбить ее на страницы по вертикали. Это будет подходящим для веб-страницы, но не для электронной таблицы. Для контента, подобного электронной таблице, вы должны установить ScrollViewer, чтобы разрешить прокрутку в обоих направлениях, предоставляя рамке бесконечное пространство в каждом направлении. В этом случае IDocumentPaginator такой же, за исключением того, что RenderTransforms и отсечение выбраны для итерации как по горизонтали, так и по вертикали.

Этот метод работает для любого содержимого WPF, а не только для фрейма.

См. Также
Постраничная печать WPF Visuals

...