2009-12-14 69 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文檔。