WPF - пример создания документа XPS НЕ из Visual

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


person Unknown Coder    schedule 14.12.2009    source источник


Ответы (2)


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

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

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).

person moogs    schedule 13.01.2010

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

person YIMING ZENG    schedule 13.01.2010