Mittwoch, 23. Mai 2012


Artikel

Dezember 2009 | Artikel

Ein neuer Standard? Fortsetzung, Teil 2

Teil 1   Teil 2   Teil 3   

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.

  1. <Window x:Class="DocumentViewerDemo.Window1"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. Title="DocumentViewerDemo" Height="320" Width="480"
  5. <DocumentViewer Name="documentViewer"/>
  6. </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:

  1. // ... vordefinierte usings
  2. // ProjektReferenz auf ReachFramework erforderlich
  3. using System.Windows.Xps.Packaging;
  4. namespace DocumentViewerDemo
  5. {
  6. public partial class Window1 : Window
  7. {
  8. public Window1()
  9. {
  10. InitializeComponent();
  11. XpsDocument xpsDocument = new XpsDocument("C:\\downloads\\TC46 XPS White Paper.xps", System.IO.FileAccess.Read); // Pfad anpassen!
  12. this.documentViewer.Document = xpsDocument.GetFixedDocumentSequence();
  13. }
  14. }
  15. }

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.

Teil 1   Teil 2   Teil 3   

Kommentare