WPF - разбиение на страницы при печати визуального

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

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

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

6
задан Unknown Coder 5 February 2010 в 23:53
поделиться

1 ответ

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

  1. Поместите ваш фрейм внутрь ScrollViewer, у которого обычно отключена горизонтальная и вертикальная прокрутка

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

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

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

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

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

См. также
Постраничная печать визуальных объектов WPF

14
ответ дан 8 December 2019 в 17:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: