WPF - 创建非Visual的XPS文档的示例

时间:2009-12-14 22:02:27

标签: wpf xps documentviewer

我正在寻找不涉及RDLC / SSRS的报告/打印解决方案。我想使用DocumentViewer,我知道它支持XPS。我找到了很多使用Visual to XPS的例子,但是我没有找到很多例子,我可以使用现有的WPF页面,使用各种控件,如标签,列表框,网格等,并将其创建到XPS文档中。是否有一个代码示例需要整个XAML页面并创建XPS?

2 个答案:

答案 0 :(得分:3)

这不是微不足道的,这里的基本问题是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);

它有效。 (代码在C#Book中从Pro WPF中解除)。

答案 1 :(得分:1)

通常你的WPF页面有一个根UI元素,比如Grid。由于Grid是一种特定类型的Visual(请参阅“继承层次结构”部分@ http://msdn.microsoft.com/en-us/library/system.windows.controls.grid.aspx以获取更多详细信息),您只需将其他视觉效果的根网格元素写入XPS即可。然后所有嵌入式控件将自动写入XPS文档。