Seiteninhalte (PageSegments)
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 dasPageSegmentursprünglich geladen wurde. Gemeint ist hier der gesamte Datenstrom, also gegebenenfalls ein Multi-Page-Dokument, aus dem mehrerePageSegments geladen wurden, nicht aber ein irgendwie gearteter ›Sub-Datenstrom‹, der einem bestimmtenPageSegmentzuordenbar wäre.getPageIndex()liefert den (0-basierten) Seitenindex eines Multi-Page-Dokuments, aus dem dasPageSegmentgeladen 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 dasFormatdes Datenstromes, aus dem dasPageSegmentstammt. Je nach konkreter Implementierung von Format kann dieses noch zusätzliche Informationen über das geladene Dokument enthalten.Bleiben noch
getProperties()undgetMetadata(), die in gewohnter Manier integrationsspezifische Eigenschaften sowie Metadaten bereitstellen.Warum nun schon wieder Properties und Metadaten, wo doch schon das
PageSegmentdiese trägt? Ganz einfach: die Properties und Metadaten derPageSegmentSourcebeziehen sich auf den gesamten Datenstrom, aus dem dasPageSegmentgeladen wurde. AllePageSegmentSources allerPageSegments, 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. JedesPageSegmenthingegen hat eigene Properties und seine Metadaten sind überdies nicht veränderbar.


