2009-12-14 88 views
1

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

回答

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

它的工作原理。 (代码从C#书中的临WPF中解除)。

1

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