Während die bisher genannten Klassen und Schnittstellen rein strukturelle Aufgaben wahrnehmen, kommen wir nun zum eigentlichen Träger der visuellen Information des Dokumentes, zum PageSegment. Fast jedes von jadice unterstützte Dokumentformat bringt eine eigene Implementierung von PageSegment mit. Die Annotationsformate bilden eine der wenigen Ausnahmen, da sie sich ein gemeinsames AnnotationPageSegment teilen.

Das PageSegment hat noch einige weitere Eigenschaften, auf die im Folgenden kurz eingegangen werden soll. Da wäre zunächst einmal der Zusammenhang zwischen Pages und PageSegments. Im Gegensatz zur Page hat das PageSegment einen Verweis auf das Elternobjekt, nämlich die Seite. Im Umkehrschluss bedeutet dies: Ein PageSegment kann nicht Kind mehrerer Seiten sein. Zwar ist es legal, ein PageSegment, das einer Seite zugeordnet ist, einer anderen Seite hinzuzufügen, dabei wird jedoch die Verbindung zur ursprünglichen Seite automatisch gelöst. Sollten Sie einmal auf einen Anwendungsfall stoßen, der das Hinzufügen eines PageSegments zu mehreren Seiten zwingend erfordert, so lassen Sie uns dies bitte wissen.

Als nächstes tragen PageSegments geometrische Eigenschaften. Sie haben eine Größe (getSize()) beziehungsweise einen Bildbereich (getBounds()), die jeweils in Basiseinheiten (1/100 pt) ausgedrückt sind. Erst die Vereinigung aller Größen beziehungsweise Bildbereiche der PageSegments einer Seite legt die Größe beziehungsweise den Bildbereich der Seite selbst fest, weshalb eine leere Seite (ohne PageSegments) auch keine Größe besitzt.

Bereits angesprochen wurden zwei weitere Eigenschaften des PageSegments: Es ist ein PropertiesProvider, erlaubt also das Anheften integrationsspezifischer Eigenschaften, und ein MetadataProvider, stellt also Metadaten bereit. Die Metadaten der PageSegments sind dabei nur lesbar, nicht beschreibbar (das PageSegment implementiert nicht MutableMetadataProvider), da die Metadaten des PageSegments generell vom Dateiformat bereitgestellt werden und somit das PageSegment diejenigen Metadaten enthält, die im Dokumentdatenstrom für die durch das PageSegment repräsentierte Seite hinterlegt sind. Integrationsspezifische Metadaten trägt nicht das PageSegment selbst – diese können aber mit Hilfe einer PageSegmentSource transportiert werden.

Jedes PageSegment stammt aus irgend einer Quelle – meist in Form eines Datenstromes, der ein Dokument enthält. Die PageSegmentSource beschreibt nun, wie ihr Name besagt, die Quelle, aus der ein PageSegment stammt. Wird ein mehrseitiges Dokument geladen, so verweisen in der Regel alle PageSegments des Dokuments auf ganz ähnliche PageSegmentSources.

Was gibt es über die Herkunft einers PageSegments zu sagen?

  • getStream() liefert den Datenstrom, aus dem das PageSegment ursprünglich geladen wurde. Gemeint ist hier der gesamte Datenstrom, also gegebenenfalls ein Multi-Page-Dokument, aus dem mehrere PageSegments geladen wurden, nicht aber ein irgendwie gearteter ›Sub-Datenstrom‹, der einem bestimmten PageSegment zuordenbar wäre.

  • getPageIndex() liefert den (0-basierten) Seitenindex eines Multi-Page-Dokuments, aus dem das PageSegment geladen wurde. Wir benötigen diesen, weil der Zusammenhang zwischen den Seiten eines Dokuments und deren Herkunft nicht starr ist, also ein bestimmter Seitenindex im Dokument nicht zwingend mit einem Seitenindex in einem Quelldatenstrom korrespondiert.

  • getFormat() liefert das Format des Datenstromes, aus dem das PageSegment stammt. Je nach konkreter Implementierung von Format kann dieses noch zusätzliche Informationen über das geladene Dokument enthalten.

  • Bleiben noch getProperties() und

  • getMetadata(), die in gewohnter Manier integrationsspezifische Eigenschaften sowie Metadaten bereitstellen.

    Warum nun schon wieder Properties und Metadaten, wo doch schon das PageSegment diese trägt? Ganz einfach: die Properties und Metadaten der PageSegmentSource beziehen sich auf den gesamten Datenstrom, aus dem das PageSegment geladen wurde. Alle PageSegmentSources aller PageSegments, die aus einem Datenstrom geladen wurden, tragen dieselben Eigenschaften und Metadaten. Diese werden in der Regel zum Zeitpunkt des Ladens durch den Integrator (via Reader-API) bereitgestellt. Eine Anwendung dafür ist zum Beispiel der Transport von Indexdaten eines Archivsystems, das den Dokumentdatenstrom bereitgestellt hat. Jedes PageSegment hingegen hat eigene Properties und seine Metadaten sind überdies nicht veränderbar.

[jadice® document platform 5 Dokumentation. Erstellungsdatum: 2011-08-12]
loading table of contents...