Attachments

Manche Dokumentformate bieten die Möglichkeit, in einem originären Datenstrom Verweise auf weitere Datenströme anzugeben. Letztere werden allgemein als Attachments bezeichnet. In manchen Fällen werden Attachments in den originären Datenstrom eingebettet, in anderen Fällen wird lediglich auf die Attachment-Daten verwiesen.[63] Manche Formate erlauben ausschließlich Attachments, die derselben Formatspezifikation genügen. Andere erlauben den Verweis auf beliebige Datenströme.[64]

Im Regelfall legen Formate zudem fest, wie die Verbindung zwischen einem Dokument und einem Attachment zu verstehen ist. So wird einerseits definiert, ob das Attachment mit dem Dokument als Ganzem oder lediglich mit einem Teil des Dokuments, beispielsweise einer Seite, verbunden ist. Andererseits wird oftmals die Art der Verbindung näher spezifiziert. Daraus kann zum Beispiel hervorgehen, ob das Attachment eine alternative Präsentation identischer Inhalte enthält, oder weitere Zusatzinformationen bietet, die im originären Dokument nicht enthalten sind. Mittels dieser Angaben kann somit die Semantik einer Beziehung zwischen Dokument und Attachment beschrieben werden.

Über die von Dokumentformaten gebotenen Möglichkeiten hinaus kann es in manchen Integrationen der jadice document platform sinnvoll sein, eigene, formatneutrale Attachments anzulegen und zu verwalten. In diesem Fall werden die Beziehungen zwischen Dokumenten (oder Dokumentteilen) und Attachments programmatisch zur Laufzeit angelegt und integrationsspezifisch persistiert.

Die Attachments API

Attachments werden in jadice durch das Interface Attachment repräsentiert. Während des Lesevorgangs eines Dokuments wird typischerweise[65] geprüft, ob Attachments enthalten sind, deren Daten eingebettet sind und die dem Dokument als Ganzem zugeordnet wurden. Ist dies der Fall, so werden Attachment Instanzen erzeugt und den beim Lesevorgang entstehenden PageSegments zugeordnet.[66]

Das Attachment ist ein PropertiesProvider. Aus dem Attachment können über die Methode getProperties() Zusatzinformationen abgefragt werden. Darüber hinaus gibt es die Möglichkeit, Listener mit den Methoden addPropertyChangeListener(PropertyChangeListener listener) und removePropertyChangeListener(PropertyChangeListener listener) zu registrieren oder zu deregistrieren, um Nachricht über Änderungen an den Properties zu erhalten.

Diese Zusatzinformationen, wie zum Beispiel Attachment ID, Attachment Name und Attachment Beschreibung, werden beim Ladevorgang des Dokuments, falls möglich, angereichert. In manchen Fällen können die Felder leer sein. Dies ist insbesondere dann der Fall, wenn solche Informationen im Originaldokument nicht vorliegen.

In der Klasse Attachment sind Konstanten/Schlüssel definiert, um auf die Informationen zugreifen zu können. Bei Bedarf können den Properties auch weitere Werte hinzugefügt werden

Bei der Arbeit mit Attachments werden für viele Aufgaben die Hilfsmethoden der Klasse Attachments verwendet. Diese Klasse bietet folgende Möglichkeiten:

  • Für eine Instanz von Document oder Page kann festgestellt werden, ob dem PageSegment auf einem bestimmten DocumentLayer Attachments zugeordnet sind.

  • In gleicher Weise besteht Zugriff auf die zugeordneten Instanzen von Attachment.

  • Für ein gegebenes Attachment besteht zudem die Möglichkeit, den eingebetteten Datenstrom anzufordern. Es wird dabei ein Datenstrom zurückgegeben, dessen Lebenszyklus an den des originären Dokumentdatenstroms gebunden ist. Wird letzterer durch Aufruf der close()-Methode geschlossen, so werdem damit auch sämtlich Attachment-Datenströme geschlossen.[67]

Das Laden von Attachments wird aus verschiedenen Formaten unterstützt. Nähere Details zu Attachments im PDF-Format gibt der Abschnitt PDF: Attachments“.

Anwendungsbeispiele

Unter „Beispiel zur Verwendung der Attachments API finden sich Beispiele für die Arbeit mit Attachments.



[63] Ein Beispiel für eingebettete Attachments sind die ›Embedded Files‹ des PDF/A-3 Formats. Ein Beispiel für referenzierte Attachments sind externe Resourcen eines MO:DCA Datenstroms.

[64] Während beispielsweise PDF/A-2 das Einbetten von Attachments im Format PDF/A-2 (oder dessen ›Teilmenge‹ PDF/A-1) erlaubt, bietet PDF/A-3 die Möglichkeit beliebige Datenströme einzubetten.

[65] Die Unterstützung für Attachments ist formatabhängig. Für Formate, die Attachments unterstützen, finden sich nähere Angaben unter Kapitel 6, Formatspezifika.

[66] Die Zuordnung erfolgt durch Ablage der Attachments in den User Properties des PageSegment unter einem definierten Schlüssel. Dies ist jedoch ein internes Implementations-Detail, das ohne weitere Benachrichtigung seitens levigo solutions jederzeit geändert werden kann. Ein zuverlässiger Zugriff auf Attachments besteht somit nur über die in diesem Abschnitt beschriebene Klasse Attachments.

[67] Wann der korrekte Zeitpunkt gekommen ist, um einen Dokumentdatenstrom zu schließen, kann nur Integrationsspezifisch entschieden werden. Aus diesem Grund hat der Integrator die Verantwortung, das Schließen von Datenströmen anzustoßen. Soll ein Attachment-Datenstrom länger verwendet werden, als der originäre Dokumentdatenstromn zur Verfügung steht, so muss eine Kopie der Daten angelegt werden. Dies ist beispielsweise über die Methoden der Klasse IOUtils möglich.

[jadice viewer Version 6.1.37: Dokumentation für Entwickler. Veröffentlicht: 2024-11-11]