WPF - пример создания документа XPS, который НЕ из Visual - PullRequest
1 голос
/ 15 декабря 2009

Я ищу решение для отчетности / печати, которое не включает RDLC / SSRS. Я хотел бы использовать DocumentViewer, который, как я знаю, поддерживает XPS. Я нашел множество примеров, которые используют Visual to XPS, но я не нашел много примеров, где я могу взять существующую страницу WPF с различными элементами управления, такими как метки, списки, сетки и т. Д., И создать ее в документе XPS. Есть ли пример кода, который берет всю страницу XAML и создает XPS?

Ответы [ 2 ]

3 голосов
/ 13 января 2010

Это не тривиально, основная проблема здесь в том, что XPS представляет фиксированные страницы. Существующая страница WPF не обязательно переводится на страницы документа. Как будет разделяться ваш отчет, если он не помещается на странице? Эта информация необходима.

Что вы можете сделать, это создать отчет как FlowDocument (см. http://msdn.microsoft.com/en-us/library/aa970909.aspx).). Это даст .NET Framework достаточно информации о том, как разбить на страницы отчет, чтобы при выполнении этого:

FlowDocument flowDocument;

// load, populate your flowDocument here

XpsDocument xpsDocument = new XpsDocument("filename.xps", FileAccess.ReadWrite);
XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(xpsDocument);
writer.Write(((IDocumentPaginatorSource)flowDocument).DocumentPaginator);

это работает. (Код взят из Pro WPF в C # Book).

1 голос
/ 13 января 2010

Обычно ваша страница WPF имеет корневой элемент пользовательского интерфейса, скажем, Grid. Поскольку Grid является особым типом Visual (см. «Иерархия наследования», часть @ http://msdn.microsoft.com/en-us/library/system.windows.controls.grid.aspx, для получения более подробной информации), вам просто нужно записать этот корневой элемент Grid, как и другие визуальные элементы, в XPS. И тогда все встроенные элементы управления будут автоматически записаны в документ XPS.

...