2009-12-14 15 views
1

Je recherche une solution de reporting/impression qui n'implique pas RDLC/SSRS. Je voudrais utiliser le DocumentViewer, que je connais supporte XPS. J'ai trouvé beaucoup d'exemples qui utilisent Visual à XPS mais je n'ai pas trouvé beaucoup d'exemples où je peux prendre une page WPF existante, avec divers contrôles comme des étiquettes, des listboxes, des grilles, etc et créer cela dans un document XPS. Existe-t-il un exemple de code qui prend une page XAML entière et crée XPS?WPF - exemple de création de document XPS qui n'est PAS de Visual

Répondre

2

Ce n'est pas trivial, le problème de base ici est que XPS représente des pages fixes. Une page WPF existante ne se traduit pas nécessairement par des pages sur un document. Comment votre rapport sera-t-il divisé s'il ne peut pas s'adapter à la page? Cette information est nécessaire. Vous pouvez créer le rapport en tant que FlowDocument (voir http://msdn.microsoft.com/en-us/library/aa970909.aspx). Cela vous donnera l'info assez framework .NET sur la façon de votre rapport paginera de sorte que lorsque vous faites ceci:

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

cela fonctionne. (Code levé à partir de Pro WPF dans C# Book).

1

Habituellement, votre page WPF a un élément d'interface utilisateur racine, disons Grid. Comme la Grille est un type spécifique de Visual (veuillez voir la partie "Hiérarchie d'héritage" @http://msdn.microsoft.com/en-us/library/system.windows.controls.grid.aspx pour plus de détails), il vous suffit d'écrire cet élément Grid racine comme les autres visuels dans XPS. Et puis tous les contrôles intégrés seront automatiquement écrits dans le document XPS.