Dokumente in WPF

Windows Presentation Foundation (WPF) bietet eine große Auswahl an Dokumentfunktionen zum Erstellen von Inhalten mit hoher Wiedergabetreue, auf die im Vergleich zu früheren Generationen von Windows einfacher zugegriffen werden kann und die auch einfacher zu lesen sind. Neben erweiterten Funktionen und verbesserter Qualität bietet WPF auch integrierte Dienste für Dokumentanzeige, Packen und Sicherheit. Dieses Thema enthält eine Einführung zu WPF-Dokumenttypen und dem Verpacken von Dokumenten.

Dokumenttypen

WPF teilt Dokumente hinsichtlich ihres Verwendungszwecks in zwei große Kategorien ein: „fixierte Dokumente“ und „Flussdokumente“.

Fixierte Dokumente werden für Anwendungen verwendet, die unabhängig von der verwendeten Anzeige- oder Druckerhardware eine genaue WYSIWYG-Darstellung (What You See Is What You Get) erfordern. Typische Verwendungen für fixierte Dokumente sind Desktoppublishing, Textverarbeitung und Formularlayout, bei denen die Beibehaltung des ursprünglichen Seitenentwurfs sehr wichtig ist. Ein fixiertes Dokument behält die exakte Positionierung von Inhaltselementen als Teil seines Layouts bei, unabhängig davon, welches Anzeige- oder Druckgerät verwendet wird. Beispielsweise wird die Seite eines fixierten Dokuments auf einem 96-DPI-Anzeigegerät genau gleich angezeigt wie bei einem Laserdrucker mit 600-DPI-Auflösung oder in einem 4800-DPI-Fotosatz. Das Seitenlayout bleibt in allen Fällen gleich, während die Qualität des Dokuments entsprechend der Funktionen der einzelnen Geräte maximiert wird.

Flussdokumente sollen dagegen Anzeige und Lesbarkeit optimieren und werden daher bevorzugt verwendet, wenn das Hauptaugenmerk auf der Erleichterung des Lesens liegt. Flussdokumente sind nicht auf ein vordefiniertes Layout festgelegt, sondern passen ihren Inhalt auf Grundlage von Laufzeitvariablen wie Fenstergröße, Geräteauflösung und optionalen Benutzereinstellungen dynamisch an und brechen ihn dynamisch um. Ein einfaches Beispiel für ein Flussdokument ist eine Webseite, bei der der Seiteninhalt dynamisch formatiert wird, um sich dem aktuellen Fenster anzupassen. Flussdokumente optimieren Anzeige und Lesbarkeit für den Benutzer basierend auf der Laufzeitumgebung. So wird im Sinne der optimalen Lesbarkeit z.B. dasselbe Flussdokument auf einem hochauflösenden 19-Zoll-Anzeigegerät anders dynamisch umformatiert als auf einem kleinen PDA-Bildschirm mit 2x3 Zoll. Zudem verfügen Flussdokumente über eine Vielzahl integrierter Funktionen, inklusive der Suche, Anzeigemodi zur Optimierung der Lesbarkeit und der Möglichkeit zum Ändern der Größe und Darstellung von Schriftarten. Abbildungen, Beispiele und ausführliche Informationen zu Flussdokumenten finden Sie unter Übersicht über Flussdokumente.

Dokumentsteuerelemente und Textlayout

.NET Framework bietet eine Reihe von vorgefertigten Steuerelementen zur vereinfachten Verwendung von fixierten Dokumenten, Flussdokumenten und allgemeinem Text in einer Anwendung. Die Anzeige von fixiertem Dokumentinhalt wird durch das DocumentViewer-Steuerelement unterstützt. Die Anzeige des Inhalts von Flussdokumenten wird durch drei verschiedene Steuerelemente unterstützt: FlowDocumentReader, FlowDocumentPageViewer und FlowDocumentScrollViewer, die verschiedenen Benutzerszenarien entsprechen (siehe Abschnitte unten). Weitere WPF-Steuerelemente bieten ein vereinfachtes Layout zur Unterstützung von allgemeinem Text (siehe hierzu Text in der Benutzeroberfläche weiter unten).

Steuerelement für fixierte Dokumente – DocumentViewer

Das DocumentViewer-Steuerelement ist so konzipiert, dass FixedDocument-Inhalte angezeigt werden. Das DocumentViewer-Steuerelement besitzt eine intuitive Benutzeroberfläche mit integrierter Unterstützung für häufig durchgeführte Vorgänge, beispielsweise Druckausgabe, Kopieren in die Zwischenablage, Zoomen und Textsuchfunktionen. Das Steuerelement ermöglicht den Zugriff auf Seiteninhalte über einen vertrauten Bildlaufmechanismus. Wie alle WPF-Steuerelemente unterstützt auch DocumentViewer eine vollständige oder teilweise Umformatierung, wodurch das Steuerelement visuell in nahezu jede Anwendung oder Umgebung integriert werden kann.

DocumentViewer dient zur Anzeige von Inhalten in einem schreibgeschützten Modus. Das Bearbeiten und Ändern von Inhalt ist hier nicht verfügbar und wird nicht unterstützt.

Steuerelemente für Flussdokumente

Hinweis

Ausführlichere Informationen zu den Funktionen von Flussdokumenten und ihrer Erstellung finden Sie unter Übersicht über Flussdokumente.

Die Anzeige des Inhalts von Flussdokumenten wird durch drei Steuerelemente unterstützt: FlowDocumentReader, FlowDocumentPageViewer, und FlowDocumentScrollViewer.

FlowDocumentReader

FlowDocumentReader enthält Funktionen, mit denen der Benutzer dynamisch zwischen verschiedenen Anzeigemodi wählen kann, darunter „Einzelne Seite“ (Seite für Seite), „Zwei Seiten“ (Buchleseformat) und der fortlaufende Anzeigemodus „Fensterinhalt verschieben“ (unbeschränkt). Weitere Informationen über diese Anzeigemodi finden Sie unter FlowDocumentReaderViewingMode. Wenn Sie nicht die Möglichkeit benötigen, dynamisch zwischen verschiedenen Anzeigemodi zu wechseln, bieten FlowDocumentPageViewer und FlowDocumentScrollViewer einfachere Viewer für fortlaufenden Inhalt, die auf einen bestimmten Anzeigemodus festgelegt sind.

FlowDocumentPageViewer und FlowDocumentScrollViewer

FlowDocumentPageViewer zeigt den Inhalt im Modus „Einzelne Seite“ an, während FlowDocumentScrollViewer den Inhalt im Modus „Fensterinhalt verschieben“ anzeigt. Sowohl FlowDocumentPageViewer als auch FlowDocumentScrollViewer sind auf einen bestimmten Anzeigemodus festgelegt. Vergleichen Sie diese Modi mit FlowDocumentReader und den darin enthaltenen Funktionen, die es dem Benutzer ermöglichen, dynamisch zwischen verschiedenen Anzeigemodi zu wählen (wie durch die FlowDocumentReaderViewingMode-Enumeration bereitgestellt). Allerdings ist dieser Anzeigemodus ressourcenintensiver als FlowDocumentPageViewer oder FlowDocumentScrollViewer ist.

Standardmäßig wird eine vertikale Scrollleiste immer angezeigt, und eine horizontale Scrollleiste wird bei Bedarf angezeigt. Die Standardbenutzeroberfläche für FlowDocumentScrollViewer enthält keine Symbolleiste. Die Eigenschaft IsToolBarVisible kann jedoch verwendet werden, um eine integrierte Symbolleiste zu aktivieren.

Text in der Benutzeroberfläche

Text kann nicht nur Dokumenten hinzugefügt werden, sondern wird auch in Benutzeroberflächen von Anwendungen, wie z.B. Formularen, verwendet. WPF enthält zahlreiche Steuerelemente für das Zeichnen von Text auf dem Bildschirm. Jedes Steuerelement ist einem bestimmten Szenario zugeordnet und besitzt eine eigene Liste von Funktionen und Einschränkungen. Im Allgemeinen sollte das TextBlock-Element verwendet werden, wenn eine eingeschränkte Textunterstützung erforderlich ist, z. B. ein kurzer Satz auf einer Benutzeroberfläche. Label kann verwendet werden, wenn minimale Textunterstützung erforderlich ist. Weitere Informationen finden Sie unter Übersicht über TextBlock.

Packen von Dokumenten

Die System.IO.Packaging-APIs bieten eine effiziente Möglichkeit zur Organisation von Anwendungsdaten, Dokumentinhalten und verwandten Ressourcen in einem einzelnen Container, auf den leicht zugegriffen werden kann, der außerdem portabel und leicht zu verteilen ist. Ein Beispiel für einen Package-Typ, der mehrere Objekte als einzelne Einheit enthalten kann, ist eine ZIP-Datei. Die APIs zum Packen von Dokumenten bieten standardmäßig eine ZipPackage-Implementierung zur Verwendung eines Open Packaging Conventions-Standards mit XML- und ZIP-Dateiarchitektur. Die WPF-APIs für die Paketerstellung erleichtern das Erstellen von Paketen und das Speichern von und den Zugriff auf Objekte in diesen Paketen. Ein Objekt, das in einem Package gespeichert ist, wird als PackagePart („Part“) bezeichnet. Pakete können auch signierte digitale Zertifikate enthalten, mit denen der Ersteller eines Parts identifiziert und der Inhalt eines Pakets auf Änderungen überprüft werden kann. Pakete enthalten außerdem eine PackageRelationship-Funktion, um zusätzliche Informationen zu einem Paket hinzufügen oder bestimmten Parts zuordnen zu können, ohne den Inhalt vorhandener Parts selbst zu ändern. Paketdienste unterstützen auch Microsoft Windows Rights Management (RM).

Die WPF-Paketarchitektur dient als Grundlage für eine Vielzahl von wichtigen Technologien:

  • XPS-Dokumente, die XPS (XML Paper Specification) entsprechen.

  • Microsoft Office „12“-Dokumente im Open XML-Format (.docx)

  • Benutzerdefinierte Speicherformate für eigene Anwendungsentwürfe

Basierend auf den APIs zum Packen von Dokumenten wurde ein XpsDocument speziell für das Speichern von WPF-Dokumenten mit fixiertem Inhalt entwickelt. Ein XpsDocument ist ein eigenständiges Dokument, das in einem Viewer geöffnet, in einem DocumentViewer-Steuerelement angezeigt, an einen Druckspooler weitergeleitet oder direkt an einen XPS-kompatiblen Drucker ausgegeben werden kann.

In den folgenden Abschnitten werden zusätzliche Informationen zu den mit WPF bereitgestellten Package- und XpsDocument-APIs bereitgestellt.

Paketkomponenten

Die WPF-APIs zum Packen von Dokumenten ermöglichen die Organisation von Anwendungsdaten und Dokumenten in einer einzigen portablen Einheit. Die ZIP-Datei ist einer der am häufigsten verwendeten Pakettypen und stellt auch den Standardpakettyp in WPF dar. Package selbst ist eine abstrakte Klasse, aus der ZipPackage unter Verwendung einer offenen XML- und ZIP-Standarddateiarchitektur implementiert wird. Die Open-Methode verwendet ZipPackage, um standardmäßig ZIP-Dateien zu erstellen und zu verwenden. Ein Paket kann drei grundlegende Arten von Elementen enthalten:

Element Beschreibung
PackagePart Anwendungsinhalte, Daten, Dokumente und Ressourcendateien
PackageDigitalSignature [X. 509-Zertifikat] zur Identifizierung, Authentifizierung und Validierung
PackageRelationship Hinzugefügte Informationen zu dem Paket oder einem bestimmten Part

PackageParts

Ein PackagePart („Part“) ist eine abstrakte Klasse, die sich auf ein in einem Package gespeichertes Objekt bezieht. In einer ZIP-Datei entsprechen die Parts den einzelnen in der ZIP-Datei gespeicherten Dateien. ZipPackagePart bietet die Standardimplementierung für serialisierbare Objekte, die in einem ZipPackage gespeichert sind. Wie in einem Dateisystem werden die im Paket enthaltenen Parts als hierarchisches Verzeichnis oder als Ordnerstruktur gespeichert. Mithilfe der WPF-APIs zum Packen von Dokumenten können Anwendungen durch Verwendung eines einzelnen ZIP-Dateicontainers zahlreiche PackagePart-Objekte schreiben, speichern und lesen.

PackageDigitalSignatures

Zur Sicherheit kann eine PackageDigitalSignature („digitale Signatur“) mit Parts innerhalb eines Pakets verbunden werden. Eine PackageDigitalSignature enthält eine [509], die zwei Funktionen bietet:

  1. Identifizieren und Authentifizieren des Erstellers eines Parts

  2. Überprüfen des Parts auf Änderungen

Die digitale Signatur schließt eine Änderung des Parts nicht aus, doch schlägt eine Validierungsüberprüfung der digitalen Signatur bei jedweder Änderung des Parts fehl. Die Anwendung kann dann entsprechende Maßnahmen ergreifen, wie z.B. das Öffnen des Parts blockieren oder den Benutzer darüber benachrichtigen, dass der Part geändert wurde und nicht sicher ist.

PackageRelationships

Eine PackageRelationship („Beziehung“) stellt einen Mechanismus zur Zuordnung von zusätzlichen Informationen zum Paket oder zu einem Part innerhalb des Pakets bereit. Eine Beziehung ist eine Funktion auf Paketebene, die einem Part zusätzliche Informationen zuordnen kann, ohne den Inhalt des Parts selbst zu ändern. Das direkte Einfügen von neuen Daten in den Inhalt des Parts ist in den meisten Fällen nicht praktisch:

  • Der tatsächliche Typ des Parts und dessen Inhaltsschema sind nicht bekannt.

  • Selbst wenn sie bekannt sind, ermöglicht das Inhaltsschema nicht das Hinzufügen von neuen Informationen.

  • Der Part ist möglicherweise digital signiert oder verschlüsselt, was jede Änderung ausschließt.

Paketbeziehungen bieten eine sichtbare Möglichkeit zum Hinzufügen und Zuordnen von zusätzlichen Informationen zu einzelnen Parts oder dem gesamten Paket. Paketbeziehungen besitzen zwei Hauptaufgaben:

  1. Definieren von Abhängigkeitsbeziehungen zwischen einem Part und einem anderen

  2. Definieren von Informationsbeziehungen, durch die Hinweise oder andere Daten zum Part hinzugefügt werden

Eine PackageRelationship bietet eine schnelle und sichtbare Möglichkeit zum Definieren von Abhängigkeiten und zum Hinzufügen von weiteren Informationen zu einem Part des Pakets oder dem Paket als Ganzes.

Abhängigkeitsbeziehungen

Abhängigkeitsbeziehungen werden verwendet, um Abhängigkeiten zwischen einem Part und anderen Parts zu beschreiben. Ein Paket kann z. B. einen HTML-Part enthalten, der einen oder mehrere Bildtags <img> einschließt. Die Bildtags verweisen auf Bilder, die sich als andere Parts innerhalb oder außerhalb des Pakets befinden (auf die z.B. über das Internet zugegriffen werden kann). Durch das Erstellen einer PackageRelationship, die einer HTML-Datei zugeordnet ist, können schnell und problemlos die abhängigen Ressourcen ermittelt und auf sie zugegriffen werden. Eine Browser- oder Vieweranwendung kann direkt auf die Beziehungen zwischen den Parts zugreifen und sofort die abhängigen Ressourcen zusammenstellen, ohne das Schema zu kennen oder das Dokument zu analysieren.

Informationsbeziehungen

Ähnlich wie bei einem Hinweis oder einer Anmerkung kann eine PackageRelationship auch verwendet werden, um andere Arten von Informationen zur Zuordnung zu einem Part zu speichern, ohne den Inhalt des Parts selbst zu ändern.

XPS-Dokumente

Ein XPS-Dokument (XML Paper Specification) ist ein Paket mit mindestens einem fixierten Dokument sowie sämtlichen zum Rendern notwendigen Ressourcen und Informationen. XPS ist außerdem das native Dateiformat des Windows Vista-Druckerspoolers. Ein XpsDocument wird im ZIP-Standarddataset gespeichert und kann eine Kombination aus XML- und binären Komponenten enthalten, z. B. Bild- und Schriftartdateien. PackageRelationships werden zum Definieren der Abhängigkeiten zwischen Inhalt und Ressourcen verwendet, die zum vollständigen Rendern eines Dokuments erforderlich sind. Das XpsDocument-Design bietet eine Dokumentlösung mit hoher Wiedergabetreue, die zahlreiche Verwendungen unterstützt:

  • Lesen, Schreiben und Speichern der Inhalte und Ressourcen von fixierten Dokumenten als eine einzelne, portable und leicht zu verteilende Datei

  • Anzeigen von Dokumenten mit der XPS-Vieweranwendung.

  • Ausgeben von Dokumenten im nativen Ausgabeformat des Druckerspoolers von Windows Vista.

  • Direktes Weiterleiten von Dokumenten an einen XPS-kompatiblen Drucker.

Weitere Informationen