Seiteninhalte (PageSegment
s)
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 Page
s und PageSegment
s. 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 PageSegment
s zu mehreren Seiten zwingend erfordert, so
lassen Sie uns dies bitte wissen.
Als nächstes tragen PageSegment
s 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 PageSegment
s einer Seite legt die Größe beziehungsweise
den Bildbereich der Seite selbst fest, weshalb eine leere Seite (ohne PageSegment
s) auch keine Größe besitzt.
Bereits angesprochen wurden zwei weitere Eigenschaften des PageSegment
s: Es ist ein PropertiesProvider
, erlaubt also das Anheften
integrationsspezifischer Eigenschaften, und ein MetadataProvider, stellt also Metadaten
bereit. Die Metadaten der PageSegment
s sind dabei nur lesbar, nicht beschreibbar
(das PageSegment
implementiert nicht MutableMetadataProvider
), da die Metadaten des PageSegment
s 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 PageSegment
s des Dokuments auf ganz ähnliche PageSegmentSource
s.
Was gibt es über die Herkunft einers PageSegment
s zu sagen?
getStream()
liefert den Datenstrom, aus dem dasPageSegment
ursprünglich geladen wurde. Gemeint ist hier der gesamte Datenstrom, also gegebenenfalls ein Multi-Page-Dokument, aus dem mehrerePageSegment
s geladen wurden, nicht aber ein irgendwie gearteter ›Sub-Datenstrom‹, der einem bestimmtenPageSegment
zuordenbar wäre.getPageIndex()
liefert den (0-basierten) Seitenindex eines Multi-Page-Dokuments, aus dem dasPageSegment
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 dasFormat
des Datenstromes, aus dem dasPageSegment
stammt. 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
PageSegment
diese trägt? Ganz einfach: die Properties und Metadaten derPageSegmentSource
beziehen sich auf den gesamten Datenstrom, aus dem dasPageSegment
geladen wurde. AllePageSegmentSource
s allerPageSegment
s, 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. JedesPageSegment
hingegen hat eigene Properties und seine Metadaten sind überdies nicht veränderbar.