| Element | Pflichtelement | Inhalt |
|---|---|---|
| Package Relationships | ja | Enthält die Startverweise für die FixedDocumentSequence, und falls vorhanden für den Package Thumbnail |
| FixedDocumentSequence | ja | Basiscontainer für Darstellung |
| FixedDocument | ja | Element einer FixedDocumentSequence |
| FixedPage | ja | Element eines FixedDocuments |
| Font | nein | Eingebetteter Zeichensatz. Bei der Veröffentlichung evtl. Copyrights beachten. |
| Image | nein | JPEGs, PNGs, TIFFs oder JPEG XR (.hdp) |
| Thumbnail | nein | Miniaturdarstellung für gesamtes Dokument oder Einzelseiten |
| PrintTicket | nein | Enthält Druckinstruktionen z. B. für Einzelseiten |
| 3-D-Inhalte | nein | Realisiert mit einem 3-D-Brush (alternativ mit 2-D-Darstellung für Geräte, die nicht 3-D-fähig sind) |
XPS-Controls und -Klassen
Um die im XPS-Standard definierten Strukturen in Programmcode abzubilden, sind Verweise auf unterschiedliche .NET-Namespaces erforderlich. Die Entstehungsgeschichte der unterschiedlichen Standards (XPS, OOXML) spiegelt sich in den unterschiedlichen einzubindenden DLLs. Tabelle 2 zeigt die Namespaces und ihre wichtigsten Klassen.
| Klassen | Beschreibung | |
|---|---|---|
| System.Windows.Documents [PresentationFramework] | FixedDocumentSequence FixedDocument FixedPage FlowDocument PageContent | Kernelemente für XPS-Dokumente, auch für andere Dokumenttypen (flow anstatt fixed) |
| System.Windows.Xps [ReachFramework] | XpsDocumentWriter VisualsToXpsDocument | Schreiben von XPS, Konvertieren von Visuals |
| System.IO.Packaging [WindowsBase] | Package PackageRelationship | allgemeine Bibliothek für Package |
| System.Windows. Xps.Packaging [ReachFramework] | XpsDocument XpsFont XpsImage XpsThumbnail | spezielle Objekte für XPS-Dokumente |
| System.Windows.Markup [PresentationCore] | IAddChild (Interface) | erforderlich, um FixedPage mit PageContent zu verbinden. |
Mit den in Tabelle 2 gezeigten Namespaces und Klassen lassen sich XPS-Dokumente eigenständig aufbauen und speichern. Zur Anzeige eines XPS-Dokuments dient der in den System.Windows.Controls enthalten DocumentViewer. Er ermöglicht die schnelle Implementierung von XPS-Bildschirmdarstellungen. Andere eigenständige oder in den Internet Explorer integrierbare Viewer können im Internet heruntergeladen werden. Empfehlenswert ist der Standalone-Viewer XPS-Viewer EP (Essentials Pack).
Um XPS-Dokumente aus Standardprogrammen zu erstellen, verwendet man den XPS Document Writer. Der Document Writer ist im .NET Framework 3.0 (oder Vista) enthalten und kann dann wie jeder Drucker als Ausgabegerät verwendet werden.
Der WPF-DocumentViewer
In wenigen Schritten werden wir nun ein WPF-Projekt aufbauen, mit dem der Einsatz des WPF-DocumentViewer-Steuerelements demonstriert werden kann. Zunächst können wir ein geeignetes XPS-Dokument downloaden, das wir nachher anzeigen möchten – im Beispiel ist es das ECMA Open XPS White Paper TC46. Im Visual Studio legen wir ein neues Projekt vom Typ Visual C#-Windows-WPF-Applikation an. Wir nennen es hier DocumentViewerDemo. Der Projektassistent legt eine rudimentäre Projektstruktur mit einem XAML für die Programmoberfläche und einer dazugehörigen cs-Programmcodedatei an. Im XAML wird ein Grid vorgegeben, das wir mit einem DocumentViewer aus der Toolbox ersetzen. Unser XAML steht in Listing 2.
<Window x:Class="DocumentViewerDemo.Window1"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="DocumentViewerDemo" Height="320" Width="480"<DocumentViewer Name="documentViewer"/></Window>
Ohne die Einbindung ins Grid und ohne Größenangaben wird der DocumentViewer so dargestellt, dass er den gesamten Fensterbereich einnimmt. Das Projekt lässt sich nun bereits starten und zeigt einen leeren DocumentViewer. Damit die XPS-Spezifikation angezeigt wird, ist eine Ergänzung im Programmcode erforderlich:
// ... vordefinierte usings// ProjektReferenz auf ReachFramework erforderlichusing System.Windows.Xps.Packaging;namespace DocumentViewerDemo{public partial class Window1 : Window{public Window1(){InitializeComponent();XpsDocument xpsDocument = new XpsDocument("C:\\downloads\\TC46 XPS White Paper.xps", System.IO.FileAccess.Read); // Pfad anpassen!this.documentViewer.Document = xpsDocument.GetFixedDocumentSequence();}}}
Mit den Direktiven using System.Windows.Xps und using System.Xps.Packaging werden die benötigten XPS-Namespaces zugänglich gemacht. Dabei sind Projektreferenzen auf System.Printing und ReachFramework erforderlich, die mit Projekt – Referenz hinzufügen ergänzt werden müssen.




