WPF: лучший метод для печати разбитых на страницы данных - PullRequest
9 голосов
/ 10 июня 2010

Мальчик, я получил образование, изучая это.Я предполагаю, что меня избаловал Powerbuilder, у которого есть фантастическая функциональность для этого из коробки.

Кто-нибудь всерьез пишет собственные объекты documentpaginator для обработки потребностей в отчетах для своих LOB-приложений?Я хочу иметь возможность печатать «бесплатно», и мне не нужно кодировать, как сумасшедший, просто взять что-то на экране и выбросить его на бумагу.

Как люди это делают?У кого-нибудь есть рекомендованная третья сторона, разрешающая печать больших массивов данных?

Спасибо

Ответы [ 2 ]

1 голос
/ 10 июня 2010

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

Для старого приложения WinForms, которое печатало сетки данныхмы реализовали совершенно отдельный API отчетов для распечаток.Мы распечатали базовый источник данных ADO.Net, используя бесплатный элемент управления ReportViewer .Учебное пособие на gotreportviewer.com .

0 голосов
/ 10 июня 2010

Я нашел самый простой способ - реализовать обобщенный класс DocumentPaginator для разбиения на страницы всего, что я могу вывести на экран.С моим DocumentPaginator мне не нужно беспокоиться о печати, потому что я могу взять любой произвольный элемент управления WPF и попросить его напечатать, и для отображения всех данных потребуется несколько страниц.

Я также используюУнаследованное вложенное свойство bool «PrintView», которое пользователь может контролировать.Некоторые из моих элементов управления несколько изменяют свой внешний вид, используя триггер в свойстве «PrintView», поэтому они будут выглядеть лучше при печати. ​​

Я опишу свое решение DocumentPaginator более подробно в этом ответе ,включая описание требуемого алгоритма.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...