Laden und Speichern von klassischen Annotationen

Formatspezifische Ausprägungen von Annotationen werden anhand von Profilen definiert. Beim Laden muss daher das entsprechende Profil gesetzt werden.

Laden von jadice Annotationen

Alle jadice Annotationen eines Dokumentes sind in einem einzigen Datenobjekt (XML-Format) zusammengefasst.

Codebeispiel:

      // Jadice Profil laden
      // Hier wird das "default" Profil verwendet
      final URL profileUrl = JadiceAnnotationReader.class.getResource("/default-annotation-profile.xml");
      final AnnotationProfile profile = AnnotationProfile.load(profileUrl);

      // Vordefiniertes Profil im Document setzen
      <<Document-Instanz>>.getProperties().put(AnnotationProfile.class.getName(), profile);

      final DefaultReaderControls controls = new DefaultReaderControls();
      controls.getSettings(JadiceAnnotationReaderSettings.class).setAnnotationProfile(profile);

      Reader reader = new Reader();
      // Document-Instanz setzen
      reader.setDocument(<<Document-Instanz>>);
      reader.setReaderControls(controls);
      // Startseitenindex setzen
      reader.setTargetIndex(0);
      // Jadice Annotation Format setzen
      reader.setFormat(new JadiceAnnotationFormat());
      reader.read(<<Annotation-Inputstream>>);
      reader.complete();

JadiceAnnotationReaderSettings Konfiguration:

  • setEncoding(String) (Default = "utf-8")

    Hier kann ein Encoding gesetzt werden.

    Zu beachten: Wenn ein anderes Encoding als UTF-8 verwendet wird, muss das entsprechende Encoding beim Speichern in den JadiceAnnotationWriterSettings gesetzt werden.

  • setIgnoreUndefinedAnnotationProperty(boolean) (Default = false)

    Bei der Einstellung true werden Attribute, die nicht im Annotationsprofil definiert sind, ignoriert und es wird kein Fehler ausgelöst.

Speichern von jadice Annotationen

Es werden alle Annotationen des Dokuments in ein Datenobjekt (XML-Format) geschrieben.

Codebeispiel:

      JadiceAnnotationWriter writer = new JadiceAnnotationWriter();
      DefaultWriterControls controls = new DefaultWriterControls();
      writer.write(<<Document-Instanz>>, <<Outputstream>>, controls);

JadiceAnnotationWriterSettings Konfiguration:

  • setEncoding(String) (Default = "utf-8")

    Hier kann ein Encoding gesetzt werden.

    Zu beachten: Wenn ein anderes Encoding als UTF-8 verwendet wird, muss das entsprechende Encoding beim Laden in den JadiceAnnotationReaderSettings gesetzt werden.

  • setWriteXMLDeclaration(boolean) (Default = true)

    Hier kann das Schreiben der XML-Deklaration ausgeschaltet werden.

Laden von ContentManager (CM) Annotationen

Alle CM Annotation eines Dokumentes (n-Seiten) sind immer in einem Datenobjekt (IBM MODCA-Format) zusammengefasst.

Es gibt CM 7 und CM 8 Annotationen, die CM 7 sind nach CM 8 kompatibel, aber nicht umgekehrt.

Beim Laden ist darauf zu achten den Startseitenindex auf 0 zu setzen, da die Annotation den Seitenindex selbst bestimmen.

Codebeispiel:

final DefaultReaderControls controls = new DefaultReaderControls();

// AnnotationCustomizer-Implementation, wird hier fürs setzen der
// Berechtigung benutzt
final AnnotationCustomizer annotationCustomizer = new AnnotationCustomizer() {
    @Override
    public void customize(Annotation a) {
    	// Geladenen Annotation können nicht verändert werden
    	a.getPermissions().getPermissions()
    			.add(IndividualAnnotationPermission.DENY.CHANGE);
    }
};
controls.getSettings(CMAnnotationReaderSettings.class)
    	.getAnnotationCustomizers().add(annotationCustomizer);

// Laden und setzen des Annotations-Profil
// für CM 7 Umfeld: cm7-annotation-profile.xml verwenden
// für CM 8 Umfeld: cm8-annotation-profile.xml verwenden
final URL profileUrl = CMAnnotationReader.class
    	.getResource("/cm8-annotation-profile.xml");
final AnnotationProfile profile = AnnotationProfile
    	.load(profileUrl);
controls.getSettings(CMAnnotationReaderSettings.class)
    	.setAnnotationProfile(profile);

Reader reader = new Reader();
reader.setDocument(document);
// Document-Instanz setzen
reader.setDocument(<<Document-Instanz>>);
// Startseitenindex setzen
reader.setTargetIndex(0);
// ReaderControls setzen
reader.setReaderControls(controls);
// Spezifisches Format setzen
reader.setFormat(new CMAnnotationFormat());
reader.read(<<Annotation-Inputstream>>);
reader.complete();

CMAnnotationReaderSettings Konfiguration:

  • setCM8ViewerCompatibilityModeEnabled(boolean) (Default = false)

    Diese Einstellung muss beim Parallelbetrieb jadice / IBM CM Viewer aktiviert sein. Der Standardwert ist false, um altes Verhalten beizubehalten.

    Hintergrund: Der IBM CM Viewer unterstützt erst seit Kurzem das Anbringen von CM8-Annotationen auf PDF-Dokumenten. Da die Position und Größe der CM8-Annotationen abhängig von der Auflösung sind, haben wir als Standard eine Auflösung von 7200 DPI verwendet. Der IBM CM Viewer rechnet hier mit anderen Werten. Um eine korrekt Darstellung zwischen jadice und IBM CM Viewer zu bekommen, muss dieser Parameter auf true gesetzt werden. Zu beachten: Beim Schreiben muss der Parameter auch in den CMAnnotationWriterSettings gesetzt werden.

    Zu beachten (betrifft nur Annotationen auf PDF-Dokumenten): Bei Anwendung dieser Funktion auf früher gespeicherte Annotationen werden diese nicht mehr korrekt dargestellt. Die Positionierung und Größendarstellung ist dann falsch.

Über die folgenden Methoden kann das Input-Encoding beziehungsweise die Codepage einer textspezifischen Annotation (Note / Stamp / Text) gesetzt werden. Wird hier ein Encoding gesetzt, wird die Definition aus der Annotation überschrieben. Bei null wird das intern definierte Encoding der Annotation verwendet.

Anwendungsfall: Manche IBM Viewer legen das verwendete Encoding in der Annotation falsch ab und verwenden ein vordefiniertes Encoding.

  • setEncodingNoteAnnotation(String) (Default = null)

    Setzt das Encoding für die Notiz- / Note-Annotation.

  • setEncodingStampAnnotation(String) (Default = null

    Setzt das Encoding für die Stempel- / Stamp-Annotation.

  • setEncodingTextAnnotation(String) (Default = null)

    Setzt das Encoding für die Text-Annotation.

Speichern von ContentManager (CM) Annotationen

Es werden alle Annotationen vom Dokument in ein Datenobjekt geschrieben.

Codebeispiel:

DefaultWriterControls controls = new DefaultWriterControls();
// Ausgabeformat:
// für CM 7 Umfeld: Format.CM7 (Standard)
// für CM 8 Umfeld: Format.CM8
controls.getSettings(CMAnnotationWriterSettings.class).setFormat(Format.CM8);
CMAnnotationWriter writer = new CMAnnotationWriter();
writer.write(<<Document-Instanz>>, <<Outputstream>>, controls);

CMAnnotationWriterSettings Konfiguration:

  • setFormat(Format) (Default = Format.CM7)

    Wenn Annotationen im CM8-Format gespeichert werden sollen, muss hier Format.CM8 gesetzt werden.

    Zu beachten: CM8-Format Annotationen können nicht mehr im IBM CM7 Viewer angezeigt werden.

    Beim Laden wird das Format automatisch erkannt.

  • setCM8ViewerCompatibilityModeEnabled(boolean) (Default = false)

    Diese Einstellung muss beim Parallelbetrieb jadice / IBM CM Viewer aktiviert sein. Der Standardwert ist false, um altes Verhalten beizubehalten.

    Hintergrund: Der IBM CM Viewer unterstützt erst seit Kurzem das Anbringen von CM8-Annotationen auf PDF-Dokumenten. Da die Position und Größe der CM8-Annotationen abhängig von der Auflösung sind, haben wir als Standard eine Auflösung von 7200 DPI verwendet. Der IBM CM Viewer rechnet hier mit anderen Werten. Um eine korrekt Darstellung zwischen jadice und IBM CM Viewer zu bekommen, muss dieser Parameter auf true gesetzt werden. Zu beachten: Beim Lesen muss der Parameter in den CMAnnotationReaderSettings gesetzt werden.

  • setSaveAdditionalInfo(boolean) (Default = false)

    Es werden zusätzliche Informationen pro Annotation gespeichert, die Informationen werden aus dem Annotationsobjekt ausgelesen:

    • Erstellername

      Name des Erstellers der Annotation (getCreatedBy()).

    • Benutzername

      Name des Benutzers, der die Annotation zuletzt geändert hat (getLastModifiedBy()).

    • Erstelldatum

      Estelldatum der Annotation (getCreatedAt()).

    • Änderungsdatum

      Letzes Datum einer Änderung (getLastModifiedAt()).

    Zu beachten: Die zusätzlichen Informationen werden vom IBM CM Viewer ignoriert. Bei einem Speichervorgang im IBM CM Viewer gehen die Informationen verloren.

    Beim Ladevorgang werden die Informationen automatisch erkannt und im Annotationsobjekt gesetzt.

  • setUseImagePlusNamingScheme(boolean) (Default = false)

    Diese Einstellung sollte nur für Parallelbetrieb IBM Image-Plus Viewer (IODM-Viewer) / jadice Viewer verwendet werden.

    Hintergrund: Image-Plus Annotationen (Maske- / Mask-Annotation, Notiz- / Note-Annotation, Hervorhebung- / Highlight-Annotation) haben im Vergleich zu CM-Annotationen eine andere Namenskonvention.

Über die folgende Methoden kann das Output-Encoding beziehungsweise die Codepage einer textspezifischen Annotation (Note / Stamp / Text) gesetzt werden. Wird hier ein Encoding gesetzt, wird die Definition in die Annotation übernommen. Bei null wird das vordefinierte Encoding aus der CMAnnotationWriter Klasse verwendet.

  • setEncodingNoteAnnotation(String) (Default = null)

    Setzt das Encoding für die Notiz- / Note-Annotation.

  • setEncodingStampAnnotation(String) (Default = null)

    Setzt das Encoding für die Stempel- / Stamp-Annotation.

  • setEncodingTextAnnotation(String) (Default = null)

    Setzt das Encoding für die Text-Annotation.

Übersicht der Encoding-Definitionen:

  • CP850 (DOS-Latin-1)

    IBM-Encoding für Notiz- / Note-Annotation. Der Zeichensatz ist eingeschränkt, es fehlen zum Beispiel die osteuropäischen Sonderzeichen.

    Wird als Standard vom Windows IBM CM Viewer verwendet.

  • CP1252 (Western European / ANSI)

    IBM-Encoding für Text-Annotation und Stempel- / Stamp-Annotation. Der Zeichensatz ist eingeschränkt, es fehlen zum Beispiel die osteuropäischen Sonderzeichen.

    Wird als Standard vom Windows IBM CM Viewer verwendet.

  • CP1208 (UTF-8)

    IBM-Encoding für Notiz- / Note-Annotation, Text-Annotation und Stempel- / Stamp-Annotation. Zeichensatz entspricht der UTF-8 Definition.

Andere IBM-Encodings können verwendet werden, die Anzeige im IBM CM Viewer ist aber nicht sichergestellt.

Laden von FileNet IS (FNIS) Annotationen

Alle FNIS Annotation eines Dokumentes (n-Seiten) sind immer in einem Datenobjekt (XML-Format) zusammengefasst.

Beim Ladevorgang müssen Dokumente und Annotationen mit derselben Reader Instanz geladen werden, damit die Annotationen korrekt auf den entsprechenden Seiten positioniert werden.

Codebeispiel:

final DefaultReaderControls controls = new DefaultReaderControls();

// AnnotationCustomizer-Implementation, wird hier fürs setzen der
// Berechtigung benutzt
final AnnotationCustomizer annotationCustomizer = new AnnotationCustomizer() {
    @Override
    public void customize(Annotation a) {
    	a.getPermissions().getPermissions()
    			.add(IndividualAnnotationPermission.DENY.CHANGE);
    }
};
controls.getSettings(FNISAnnotationReaderSettings.class)
    	.getAnnotationCustomizers().add(annotationCustomizer);

// Für Tiff-Dokumente ohne Auflösungsdefinition muss eine Auflösung von 100 DPI
// verwendet werden
controls.getSettings(TIFFReaderSettings.class).setInvalidResolutionHandling(InvalidResolutionHandling.USE_DEFAULT);
controls.getSettings(TIFFReaderSettings.class).setDefaultResolution(new Resolution(100));

final URL profileUrl = FNISAnnotationReader.class
    	.getResource("/filenet-is-annotation-profile.xml");
final AnnotationProfile profile = AnnotationProfile
    	.load(profileUrl);
controls.getSettings(FNISAnnotationReaderSettings.class)
    	.setAnnotationProfile(profile);

Reader reader = new Reader();
// ReaderControls setzen
reader.setReaderControls(controls);

// Laden der Dokumente
// Format auf <null> setzen, d.h. das Dokument-Format wird automatisch ermittelt
reader.setFormat(null);
for (InputStream is : <<Liste mit Dokumentdaten>>) {
    reader.read(is);
}

// FileNet IS Format setzen
reader.setFormat(new FNISAnnotationFormat());
reader.read(<<Annotation-Inputstream>>);

reader.complete();

FNISAnnotationReaderSettings Konfiguration:

  • setEncoding(String) (Default = "ISO-8859-1")

    Encoding der XML-Annotationsdaten. In der XML-Datei, die vom FileNet IS Archiv geliefert wird, ist als Encoding UTF-8 angegeben, die Daten sind aber in ISO-8859-1 codiert. Falls vom Archiv ein anderes Encoding verwendet wird, kann dies hier entsprechend konfiguriert werden.

    Zu beachten: Beim Schreiben muss das Encoding passend gesetzt werden.

Speichern von FileNet IS (FNIS) Annotationen

Es werden alle Annotationen vom Dokument in ein Datenobjekt geschrieben.

Formatspezifischen Daten (Benutzer, Berechtigung, usw.) können anhand der FNISAnnotationWriterSettings-Klasse gesetzt werden.

FNISAnnotationWriterSettings Konfiguration:

  • setEncoding(String) (Default = "ISO-8859-1")

    Encoding der XML-Annotationsdaten. In der XML-Datei, die vom FileNet IS Archiv geliefert wird, ist als Encoding UTF-8 angegeben, die Daten sind aber in ISO-8859-1 codiert. Falls vom Archiv ein anderes Encoding verwendet wird, kann dies hier entsprechend konfiguriert werden.

  • setClientPermission(String) (Default = "change")

    Client-Berechtigung, siehe FileNet IS Dokumentation.

  • setDocId(String) (Default = "000000")

    ID des FileNet IS Dokuments, zu welchem die Annotationen gespeichert werden sollen.

  • setDomain(String) (Default = "Imaging")

    FileNet IS Archiv Domain-ID, siehe FileNet IS Dokumentation.

  • setLibrary(String) (Default = "DefaultIMS")

    FileNet IS Archiv Library-ID, siehe FileNet IS Dokumentation.

  • setOrganisation(String) (Default = "FileNet")

    FileNet IS Archiv Organisation-ID, siehe FileNet IS Dokumentation.

  • setPermissionNameAppend(String) (Default = "(ANYONE)")

    Berechtigung 'Append' Benutzername, siehe FileNet IS Dokumentation.

  • setPermissionNameRead(String) (Default = "(ANYONE)")

    Berechtigung 'Read' Benutzername, siehe FileNet IS Dokumentation.

  • setPermissionNameWrite(String) (Default = "(ANYONE)")

    Berechtigung 'Write' Benutzername, siehe FileNet IS Dokumentation.

  • setPermissionTypeAppend(String) (Default = "user")

    Typ für 'Append' Berechtigung, siehe FileNet IS Dokumentation.

  • setPermissionTypeRead(String) (Default = "user")

    Typ für 'Read' Berechtigung, siehe FileNet IS Dokumentation.

  • setPermissionTypeWrite(String) (Default = "user")

    Typ für 'Write' Berechtigung, siehe FileNet IS Dokumentation.

  • setUseDefaultPermission(boolean) (Default = false)

    Bei geladenen Annotationen aus den Archiv wird bei der Einstellung true die bereits vorhandene Berechtigungsdefinition verwendet, ansonsten wird eine neue Berechtigungsdefinition mit den Angaben aus der FNISAnnotationWriterSettings Klasse generiert.

Codebeispiel:

FNISAnnotationWriter writer = new FNISAnnotationWriter();
DefaultWriterControls controls = new DefaultWriterControls();
controls.getSettings(FNISAnnotationWriterSettings.class)
    	.setAnnotationProfile(profile);
writer.write(<<Document-Instanz>>, <<Outputstream>>, controls);

Nach dem Speichern der Annotationen im FileNet IS Archiv sollte das Dokument mit Annotationen erneut geladen werden um den aktuellen Annotationstand aus dem Archiv zu erhalten. Damit man die Dokumentdaten nicht erneut aus dem Archiv holen muss, besteht die Möglichkeit den Datenstrom aus den entsprechenden Seiten zu holen:

final Document document = <Jadice Document-Instanz>

final TreeMap<Integer, InputStream> streamMap = new TreeMap<Integer, InputStream>();

for (final Page page : document.getPages()) {
  final PageSegmentSource source = page.getPageSegment(DocumentLayer.DEFAULT).getSource();
  // Stream-Index
  final int streamIndex = source.getStreamIndex();
  // Document-Stream
  final InputStream stream = source.getStream();
  streamMap.put(streamIndex, stream);
}

// alle Seiten entfernen
document.getPages().clear();

final DefaultReaderControls controls = new DefaultReaderControls();

// Für Tiff-Dokumente ohne Auflösungsdefinition muss eine Auflösung von 100 DPI
// verwendet werden
controls.getSettings(TIFFReaderSettings.class).setInvalidResolutionHandling(InvalidResolutionHandling.USE_DEFAULT);
controls.getSettings(TIFFReaderSettings.class).setDefaultResolution(new Resolution(100));

final URL profileUrl = FNISAnnotationReader.class
    	.getResource("/filenet-is-annotation-profile.xml");
final AnnotationProfile profile = AnnotationProfile
    	.load(profileUrl);
controls.getSettings(FNISAnnotationReaderSettings.class)
    	.setAnnotationProfile(profile);

// Dokument neu laden
final Reader reader = new Reader();
// ReaderControls setzen
reader.setReaderControls(controls);
reader.setDocument(document);
reader.setFormat(null);

// Dokumentdaten neu laden
for (final Integer streamIndex : streamMap.keySet()) {
  final InputStream stream = streamMap.get(streamIndex);
  reader.read(stream);
}

// Annos neu laden
reader.setFormat(new FNISAnnotationFormat());
final DefaultReaderControls controls = new DefaultReaderControls();
controls.getSettings(FNISAnnotationReaderSettings.class).setAnnotationProfile(AnnotationProfile.getDefaultProfile());
reader.setReaderControls(controls);
reader.read(<<Anno-Daten>>);

reader.complete();

FNP8AnnotationReaderSettings Konfiguration:

  • setEncoding(String) (Default = "UTF-8")

    Encoding der XML-Annotationsdaten. In der XML-Datei, die vom FileNet P8 Archiv geliefert wird, ist kein Encoding definiert. Hier kann eine entsprechendes Encoding gesetzt werden.

    Zu beachten: Beim Schreiben muss das Encoding passend gesetzt werden.

  • setIgnoreMissingMultiPageAttribute(boolean) (Default = false)

    Anwendungsfall: Es kann vorkommen, dass das F_MULTIPAGETIFFPAGENUMBER Attribut in der XML-Datei fehlt. In diesem Fall muss die Einstellung auf true gesetzt werden, damit der Ladevorgang korrekt funktioniert.

Laden von FileNet P8 (FNP8) Annotationen

FileNet P8 Annotationen werden jeweils in einem eigenen Datenobjekt (XML-Format) zusammengefasst und werden einem FileNet P8 Dokument, dass aus mehreren Dokumentdatenströmen zusammengesetzt werden kann, im Archiv zugeordnet.

Beim Ladevorgang müssen Dokumente und Annotationen mit derselben Reader Instanz geladen werden, damit die Annotationen korrekt auf den entsprechenden Seiten positioniert werden.

Codebeispiel:

final DefaultReaderControls controls = new DefaultReaderControls();

// AnnotationCustomizer-Implementation, wird hier fürs setzen der Berechtigung benutzt
final AnnotationCustomizer annotationCustomizer = new AnnotationCustomizer() {
    @Override
    public void customize(Annotation a) {
    //	a.getPermissions().getPermissions()
    //		.add(IndividualAnnotationPermission.DENY.CHANGE);
    //	a.getPermissions().getPermissions()
    //		.add(IndividualAnnotationPermission.DENY.REMOVE);
    //	a.getPermissions().getPermissions()
    //		.add(IndividualAnnotationPermission.DENY.SHOW);
    }
};

controls.getSettings(FNP8AnnotationReaderSettings.class)
    .getAnnotationCustomizers().add(annotationCustomizer);

final URL profileUrl = FNP8AnnotationReader.class
    	.getResource("/filenet-p8-annotation-profile.xml");
final AnnotationProfile profile = AnnotationProfile
    	.load(profileUrl);
controls.getSettings(FNP8AnnotationReaderSettings.class)
    	.setAnnotationProfile(profile);

// Für Tiff-Dokumente ohne Auflösungsdefinition muss eine Auflösung von 100 DPI
// verwendet werden
controls.getSettings(TIFFReaderSettings.class).setInvalidResolutionHandling(InvalidResolutionHandling.USE_DEFAULT);
controls.getSettings(TIFFReaderSettings.class).setDefaultResolution(new Resolution(100));

Reader reader = new Reader();
// ReaderControls setzen
reader.setReaderControls(controls);

// Format auf <null> setzen, d.h. das Dokument-Format wird automatisch ermittelt
reader.setFormat(null);
for (InputStream is : docStreams) {
    reader.read(is);
}

// FileNet P8 Annotation-Format setzen
reader.setFormat(new FNP8AnnotationFormat());
for (InputStream is : annoStreams) {
    reader.read(is);
}

reader.complete();

Die Annotationsobjekte können auch zusammengefasst werden, damit der Ladevorgang mit nur einem Read-Aufruf erfolgen kann:

Reader reader = new Reader();

FNP8AnnotationInput input = new FNP8AnnotationInput();
// Vorgang für jedes Annotationsobjekt (1-n) durchführen
input.add(<<Annotation-Inputstream>>);

// Alle Annotationsobjekte in ein XML-Objekt schreiben
ByteArrayOutputStream os = new ByteArrayOutputStream();
input.write(os);

// FileNet P8 Annotation-Format setzen
reader.setFormat(new FNP8AnnotationFormat());
// Annotationen mit einem Read-Aufruf laden
reader.read(new ByteArrayInputStream(os.toByteArray()));

Speichern von FileNet P8 (FNP8) Annotationen

Das Speichern der FNP8 Annotation erfolgt in mehreren Schritten:

  • Alle Annotationen vom Dokument in ein Datenobjekt schreiben (Codebsp. 1)

  • Datenobjekt erneut laden um die neu angelegten / geänderten / gelöschten Annotationen ermitteln (Codebsp. 2)

  • Neu angelegte / veränderte Annotationen ins Archiv speichern, gelöschte anhand der Annotation ID aus dem Archiv entfernen, unveränderte Annotation müssen nicht gespeichert werden (siehe FileNet P8 API).

Codebeispiel 1:

FNP8AnnotationWriter writer = new FNP8AnnotationWriter();
DefaultWriterControls controls = new DefaultWriterControls();
writer.write(<<Document-Instanz>>, <<Outputstream>>, controls);

Um an die einzelnen Annotationen zu kommen und deren Zustand zu ermitteln, muss die die FNP8AnnotationOutput-Klasse verwendet werden.

Codebeispiel 2:

FNP8AnnotationOutput output = new FNP8AnnotationOutput(<<Datenobjekt-Inputstream>>);

// Unveränderte Annotationen für alle Seiten
org.w3c.dom.Document[] annotationsUmodified = output.getUnmodifiedAnnotations();

//Veränderte Annotationen
org.w3c.dom.Document[] annotationsModified = output.getModifiedAnnotations();

//Hinzugefügte Annotationen
org.w3c.dom.Document[] annotationsAdded = output.getAddedAnnotations();

//Gelöschte Annotationen
org.w3c.dom.Document[] annotationsDeleted = output.getDeletedAnnotations();

Die einzelnen Annotationsobjekte sind nun verfügbar (in DOM-Struktur), jetzt müssen je nach Änderung / Zustand noch Anpassungen an den Attribute vorgenommen werden.

  • Erstell-/ Änderungsdatum anpassen, nur bei neu angelegten und geänderten Annotationen nötig:

    // Aktueller Zeitstempel holen
    long timestamp = System.currentTimeMillis();
    //Setzen des Erstelldatums (nur für neu angelegte Anntationen nötig)
    FNP8AnnotationXMLUtils.setEntryDate(<<Annotation>>, timestamp);
    //Setzen des Modifikationsdatums
    FNP8AnnotationXMLUtils.setModifyDate(<<Annotation>>, timestamp);
    
  • Annotation-ID (F_ID und F_ANNOTATEDID Attribute) zum Speichern / Löschen ermitteln:

    • Geänderte / gelöschte Annotationen besitzen bereits eine ID, diese kann aus der DOM-Struktur ermittelt werden:

      String id = FNP8AnnotationXMLUtils.getAnnotationID(<<Annotation>>);
      
    • Neu angelegte Annotationen besitzen noch keine ID, diese muss aus dem Archiv ermittelt und gesetzt werden:

      FNP8AnnotationXMLUtils.setAnnotationID(<<Annotation>>, <<Neue ID>>);
      

    Die oben genannten ID's dann als Referenz zum Speichern der Annotation im Archiv verwenden (siehe FileNet P8 API).

  • Der Seitenindex der Annotation muss in der Regel nicht angepasst werden.

    Wird jedoch die Dokumentstruktur verändert und ins Archiv gespeichert, muss der Annotationsseitenindex (F_PAGENUMBER und F_MULTIPAGETIFFPAGENUMBER Attribute) entsprechend angepasst werden:

    // Setzen des Seitenindex für das Attribut F_PAGENUMBER (Dokument Nummer)
    FNP8AnnotationXMLUtils.setPageNumber(<<Annotation>>, <<Index>>);
    // Setzen des Seitenindex für das Attribut F_MULTIPAGETIFFPAGENUMBER (Seitennummer innerhalb des Dokuments)
    FNP8AnnotationXMLUtils.setMultiPageTiffPageNumber(<<Annotation>>, <<Index>>);
    

Die angepasste Annotation DOM-Struktur muss jetzt noch ins XML-Format geschrieben werden und kann ins Archiv gespeichert werden.

// Annotation DOM-Struktur ins XML-Format schreiben
ByteArrayOutputStream os = new ByteArrayOutputStream();
FNP8AnnotationXMLUtils.write(os, <<Annotation>>);
// XML-Daten in Byte-Array, ins Archiv speichern
byte[] xmlAnnoData = os.toByteArray();

FNP8AnnotationWriterSettings Konfiguration:

  • setEncoding(String) (Default = "UTF-8")

    Encoding der XML-Annotationsdaten.

  • setUseUnicodeTextEncoding(boolean) (Default = true)

    Bei der Einstellung true werden die Textzeichen in Unicode-Schreibweise geschrieben (zum Beispiel wird "ABC" nach "004100420043" konvertiert). Bei der Einstellung false werden die Textzeichen entsprechend dem Encoding direkt geschrieben.

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