我正在寻找不涉及 RDLC/SSRS 的报告/打印解决方案。我想使用 DocumentViewer,我知道它支持 XPS。我找到了很多使用 Visual to XPS 的示例,但我还没有找到很多示例,我可以使用现有的 WPF 页面,使用各种控件(如标签、列表框、网格等)并将其创建到 XPS 文档中。是否有一个代码示例可以获取整个 XAML 页面并创建 XPS?
问问题
4741 次
2 回答
4
这不是微不足道的,这里的基本问题是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# 书中的 Pro WPF 中提取的代码)。
于 2010-01-13T09:58:00.350 回答
1
通常你的 WPF 页面有一个根 UI 元素,比如 Grid。由于 Grid 是一种特定类型的 Visual(请参阅“继承层次结构”部分 @ http://msdn.microsoft.com/en-us/library/system.windows.controls.grid.aspx了解更多详细信息),您只需要将该根 Grid 元素像其他视觉效果一样写入 XPS。然后所有嵌入的控件将自动写入 XPS 文档。
于 2010-01-13T09:50:08.097 回答