Skip to main content

Annotationen

Überblick

Grundsätzliches zu Annotationen kann der Dokumentation der jadice document platform 5 entnommen werden.

Das jadice web toolkit unterstützt die folgenden Annotationsformate:

  • FileNet Image Services

  • IBM FileNet P8

  • IBM Content Manager 7

  • IBM Content Manager 8

  • Jadice Format (XML-basiertes, Jadice eigenes Annotationsformat)

Dabei unterstützt das jadice web toolkit die folgenden Annotationstypen:

  • LineAnnotation

    Darstellung einer einfachen Linie. Start-/Endpunkt, Linienfarbe und Liniendicke können definiert werden.

  • ArrowAnnotation

    Darstellung eines Pfeils, ist von der LineAnnotation abgeleitet. Pfeilspitze, Winkel und Länge (in Pixel oder prozentual zur Gesamtlänge) des Pfeilkopfes können definiert werden.

  • PathAnnotation

    Darstellung eines Vektorobjekts. Vektorpfad (offen, geschlossen, gefüllt), Linien- und Füllfarbe sowie Liniendicke können definiert werden.

  • RectangleAnnotation

    Darstellung eines Rechtecks. Größe, Füllung (gefüllt/nicht gefüllt), Linien- und Füllfarbe sowie Liniendicke können definiert werden. Es existiert eine spezielle Ausprägung zum Schwärzen von Texten. Weitere Informationen folgen im nächsten Abschnitt.

  • EllipseAnnotation

    Darstellung einer Ellipse, von der RectangleAnnotation abgeleitet.

  • TextAnnotation

    Darstellung von Text, von der RectangleAnnotation abgeleitet. Schriftart, -grösse und Stil sowie Textfarbe können definiert werden.

  • HistoryAnnotation (aktuell nur für IBM Content Manager 7 unterstützt, aktuell kein Parallelbetrieb mit IBM-Clients unterstützt)

    Revisionssichere Darstellung von Text, von der TextAnnotation abgeleitet.

  • StampAnnotation

    Darstellung von Text, ähnlich eines Stempels. Rotierbar, von der TextAnnotation abgeleitet. Rotation kann definiert werden.

  • CalloutAnnotation

    Legendenannotation: Verankerter, abknickbarer Pfeil, an dessen Ende ein Textblock hängt. Dieser Typ wird nur vom Jadice Format unterstützt.

  • JWTImageAnnotation

    Bildannotation: Darstellung eines Bildes, welches serverseitig zur Verfügung gestellt wird. Von der RectangleAnnotation abgeleitet. Dieser Typ wird nur vom Jadice Format unterstützt.

  • TextHighlightAnnotation

    TextHighlightAnnotation: Durch das Selektieren eines Textabschnitts innerhalb eines Dokuments wird dieser Bereich farblich markiert. Die TextHighlightAnnotation sorgt dafür, dass die Markierung dauerhaft erhalten bleibt. Sobald die Annotation erstellt ist kann sie nicht mehr verschoben werden. Dieser Typ wird nur vom Jadice Format unterstützt und ist zudem nicht in die AnnotationProfileAwareToolbar integriert. Es existiert eine spezielle Ausprägung zum Schwärzen von Texten. Weitere Informationen folgen im nächsten Abschnitt.

Aktuell werden keine StampImageAnnnotations unterstützt. Diese sind proprietär für IBM Content Manager 8. Falls ein Dokument eine solche Annotation enthält, wird die Annotation mit einer entsprechenden Logmeldung ignoriert.

Für die oben aufgeführten Annotationen bietet das jadice web toolkit passende Editoren, über die ein Benutzer im Frontend neue Annotationen erstellen und bestehende Annotationen bearbeiten kann. Dies beinhaltet unter anderem die Eingabe und Formatierung beliebiger Texte für Text- und Stempelannotationen und die Formatierung der Farben und Formen von RectangleAnnotations.

Typische Anwendungsfälle

  • Markierung wichtiger Stellen im Dokument

    Der Sachbearbeiter erstellt eine ArrowAnnotation auf der zu markierenden Stelle. Der Sachbearbeiter markiert die Annotation und stellt die Pfeilfarbe im Annotationseditor auf "rot" ein.

  • Revisionssichere Dokumentation der Bearbeitungsergebnisse

    Ein Dokument wird über den Posteingang an einen Sachbearbeiter geroutet. Der Sachbearbeiter analysiert das Dokument und erstellt anschließend eine HistoryAnnotation auf der ersten Seite. Der Sachbearbeiter dokumentiert die gewonnenen Erkenntnisse als Text in der HistoryAnnotation. Die Annotation protokolliert zusätzlich den Benutzernamen und das aktuelle Datum. Der eingegebene Text kann anschließend nicht mehr gelöscht werden. In der weiteren Sachbearbeitung werden zusätzliche Freitexte von anderen Sachberabeitern aufgebracht, die History Annotation zeigt die gesamte Historie chronologisch geordnet nach dem Datum der Annotationsmodifikation und mit dem Namen des zugehörigen Sachbearbeiters.

  • Verdecken sensibler Dokumentinhalte beim Druck

    Der Sachbearbeiter erstellt auf der sensiblen Stelle eine schwarze RectangleAnnotation und verdeckt dadurch die sensiblen Daten mit einem schwarzen Balken. Alternativ kann sensibler Text ausgewählt und mit einer TextHighlightAnnotation verdeckt werden. Der Sachbearbeiter druckt das Dokument, der sensible Teil ist nicht lesbar.

  • Verdecken sensibler Dokumentinhalte bei der weiteren Sachbearbeitung

    Der Sachbearbeiter erstellt auf der sensiblen Stelle eine schwarze RectangleAnnotation. Alternativ kann sensibler Text ausgewählt und mit einer TextHighlightAnnotation verdeckt werden. Über die Vergabe entsprechender Berechtigungen wird das Rendering dieser Annotation immer serverseitig durchgeführt. Dies bedeutet, dass die Annotation serverseitig in die entsprechende Kachel eingebrannt und der sensible Teil des Dokuments damit niemals zum Benutzer übetragen wird. Details zur Konfiguration der notwendigen Berechtigungen finden sich im Kapitel Berechtigungen)

Hinweis

Bei der Nutzung von Annotationen zum Verdecken sensibler Dokumentinhalte gilt es folgendes zu beachten: Sofern es sich um ein textbasiertes Dokument handelt (z.B. ein PDF), findet eine Textsuche auch Text, der von der Annotation verdeckt ist. Gleiches gilt für die Textselektion - auch diese erlaubt das Selektieren von Textpassagen, die von einer "eingebrannten" Annotation überdeckt werden.
Es wird daher empfohlen, das TextSelectionTool und die Textsuche (RolloutSearch bzw. ActivateRolloutSearchCommand, ToolbarSearch bzw. ActivateToolbarSearch oder AdvancedSearch) für die betroffenen Dokumente zu deaktivieren.

Rendering von Textannotationen auf Client und Server mit Standard 14 Fonts

Das jadice web toolkit verfügt über eine automatische Konfiguration sowie ein vordefiniertes Default-Mapping von logischen Schriftarten auf physikalische Schriften. Damit wird sichergestellt, dass sowohl auf dem Client als auch auf dem Server dieselben physikalischen Schriftarten zum Rendern von Textannotationen verwendet werden, wenn in den Textannotationen logische Fontbezeichnungen angegeben sind. Dies ist wichtig, da sonst Zeilenhöhen und Laufweiten deutlich voneinander abweichen können.

Zum Hintergrund: Annotationen werden im jadice web toolkit teils client-, teils serverseitig gerendert. Bei der Anzeige im Viewer werden Annotationen in der Regel clientseitig gerendert. Nur wenn sie über eingeschränkte Berechtigungen und eine entsprechende Render-Strategie gezielt konfiguriert werden, werden sie bei der Dokumentanzeige serverseitig gerendert und in die Dokumentkacheln mit eingebrannt (siehe "Schwärzen von Akten" im Abschnitt Berechtigungen). Beim PDF Export werden Annotationen grundsätzlich serverseitig gerendert.

Im jadice web toolkit werden als Default-Schriftarten für textbasierte Annotationen die Standard 14 Fonts (manchmal auch als “base 14 fonts“ bezeichnet) eingesetzt. Die Standard 14 Fonts stellen der Anwendung Open-Source-Fonts für die logischen Schriftfamilien “serif“, “sans-serif“ und “monospaced“ zur Verfügung (derzeit Arimo, Cousine und Tinos, jeweils in den Varianten “regular“, “bold“, “italic“ und “bold+italic“).

Für den Einsatz im Browser werden diese Schriften vom jadice web toolkit Server über ein Servlet zur Verfügung gestellt und vom Client beim Aufruf der Webseite geladen.

Hinweis

Die Standard 14 Fonts sind in der jadice web toolkit Auslieferung enthalten, können aber auch unter folgender URL heruntergeladen werden: Open-Source-Fonts auf github. Es ist keine Installation der Standard 14 Fonts auf dem jadice web toolkit Server erforderlich, sie müssen lediglich in die Anwendung eingebunden werden.
Im Normalfall wird das FontDownloadServlet zum Bereitstellen der Fonts auf dem Client automatisch über eine Annotation eingebunden. Sollte dies nicht funktionieren, muss der Deployment Deskriptor web.xml um folgenden Eintrag ergänzt werden:

<servlet>
<servlet-name>FontDownload</servlet-name>
<servlet-class>com.levigo.jadice.web.server.FontDownloadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FontDownload</servlet-name>
<url-pattern>/jwt/font/*</url-pattern>
</servlet-mapping>

Ausblick: Im Moment sind die Mappings von serif, sans-serif und monospaced nach Tinos, Arimo und Cousine fest verdrahtet. Für die Zukunft wird eine flexiblere Konfigurierbarkeit angestrebt. Aufgrund fehlender Fontmetriken in der HTML5- und JavaScript-Welt kann derzeit noch keine vollständige Gleichheit beim Rendering zwischen Server und Client gewährleistet werden. Stetige Verbesserungen sind in Entwicklung.

Serien-Erstellung von Annotationen

In einigen Usecases müssen Annotationen desselben Typs mehrfach hintereinander aufgebracht werden.

In diesen Fällen kann der Erstellungsmodus über die Annotationstoolbar eingerastet werden. Dadurch wird das Aufbringen beliebig vieler Annotationen desselben Typs mit jeweils nur einem Mausklick ermöglicht.

Standardmäßig wird der Erstellungsmodus über einen Doppelklick auf das jeweilige Annotationsicon in der Annotationstoolbar eingerastet. Jeder Linksklick auf eine Seite führt dann zum Erstellen einer neuen Annotation des ausgewählten Typs. Über einen Rechtsklick oder das Drücken der Escape-Taste wird der Modus beendet.

Die Implementierung eines kundenspezifischen AnnotationToolbarInitializers ermöglicht das Überschreiben des Defaultverhaltens. Damit kann der Batch-Erstellungsmodus global oder auch für einzelne Annotationstypen ein- oder ausgeschaltet werden. Es wird empfohlen eigene Implementierungen von der Klasse AbstractAnnotationToolbarInitializer abzuleiten.

Details zur Integration und die zugehörigen Codebeispiele finden sich in den Showcases unter “Annotations -> Change CreateMode of CreateAnnotationCommand“.

Ausblenden von Annotationen auf Basis Annotationstyp

Für Review-Usecases kann es sinnvoll sein, ein Dokument ohne Annotationen anzuzeigen. Damit versperren aufgebrachte Annotationen die Sicht auf den Dokument-Content nicht mehr.

Das jadice web toolkit bietet daher die Möglichkeit, alle Annotationen eines oder mehrerer Annotationstypen auf dem gesamten Dokument auszublenden. Hierbei wird für jeden im Annotationsprofil definierten Annotationstypen z.B. im Kontextmenü ein Menüeintrag in der Benutzeroberfläche angezeigt. Über diesen kann jeder einzelne Annotationstyp ausgeblendet werden. Zusätzlich gibt es die Möglichkeit, alle Annotationstypen aus- bzw. wieder einzublenden. Im Standard wird die Liste der ausgeblendeten Annotationstypen beim Laden eines neuen Dokuments zurückgesetzt.

Falls nach dem Ausblenden von Annotationstypen ein Druck (PDF, TIFF, Postscript) vom Benutzer angestoßen wird, sind die ausgeblendeten Annotationen in diesem ebenfalls nicht enthalten.

Serverseitig gerenderte, zum Maskieren kritischer Dokumentpassagen eingesetzte Annotationen sind immer sichtbar, auch wenn die zugehörigen Annotationstypen ausgeblendet sind. Dies gilt sowohl für die Anzeige als auch den Ausdruck (Export) des Dokuments. Diese Annotationen sind zwar, auch wenn sie ausblendet sind, auf dem Dokument sichtbar, jedoch nicht mehr selektierbar. Auch die Toolbar wird dann nicht mehr angezeigt.

Die Thumbnails sind von der Funktionalität unabhängig - die Thumbnailansicht zeigt immer alle Annotationen.

Wird ein Annotationstyp ausgeblendet, so wird die Neuerstellung für diese Annotationen unterbunden. In diesem Fall werden dann die zugehörigen Buttons der Annotationstoolbar ausgegraut.

Details zur Integration und die zugehörigen Codebeispiele finden sich in den Showcases unter “Annotations -> Hide Annotation Types“ und auch in der Enterprise-Demo.

Einblenden von Tooltips

In einigen Anwendungsfällen kann es sinnvoll sein, dem Benutzer eine Möglichkeit zu bieten, schnell eine Auswahl an Annotations-Metainformationen ein- und wieder auszublenden. Damit können relevante Annotationen schnell von weniger interessanten Annotationen unterschieden und Arbeitsprozesse beschleunigt werden.

Das jadice web toolkit bietet daher die Möglichkeit, über die kundenspezifische Implementierung eines AnnotationTooltipGenerators eine Reihe von Metainformationen in frei wählbarer Form innerhalb von Tooltips anzuzeigen. Die Tooltips erscheinen beim Hovern mit der Maus über eine Annotation und werden ausgeblendet, sobald der Mauszeiger die Annotation wieder verlässt.

Typischerweise werden Tooltips dabei spezifisch pro Annotationstyp eingeblendet. So könnte beispielsweise für jede Textannotation der Benutzername des letzten Bearbeiters und das letzte Bearbeitungsdatum angezeigt werden. Für Stempelannotationen könnte hingegen lediglich das Erstellungsdatum relevant sein.

Für die Visualisierung mittels Tooltips stehen die folgenden Informationen zur Verfügung:

  • Ersteller

  • Erstellungszeitpunkt (Format unter Berücksichtigung des Locale)

  • Bearbeiter

  • Bearbeitungszeitpunkt (Format unter Berücksichtigung des Locale)

  • Berechtigungen der Annotation

  • Berechtigungen des Dokuments

  • Content der Annotation (bei textbasierten Annotationen)

  • alle über die Annotationsinstanz zugreifbaren Informationen

  • alle über die zugrundeliegende Dokumentinstanz zugreifbaren Informationen

Details zur Integration und die zugehörigen Codebeispiele finden sich in den Showcases unter “Annotations -> Annotation Tooltips“ und auch in der Enterprise-Demo.

Löschen aller selektierten Annotationen

In manchen Fällen sollen mehrere Annotationen gemeinsam gelöscht werden. Das sequentielle Löschen ist in diesem Fall zu aufwendig, sodass die selektierten Annotationen mit einer Aktion entfernt werden können sollen.

Für diesen Usecase liefert die Klasse DeleteSelectedAnnotationsCommand die passende Funktionalität. Insbesondere kann das Command mit einem Shortcut verbunden werden, sodass die selektierten Annotationen beispielsweise mit der Taste “Entf“ gelöscht werden können.

Ein Codebeispiel hierzu findet sich in der Enterprise-Demo.

Annotationsprofile

Die unterstützten Annotationen, deren Eigenschaften, Vorbelegungen und die zum Zeichnen verwendeten Renderer-Implementierungen werden in den aus der jadice document platform 5 bekannten Annotations-Profilen definiert (siehe Abschnitt Annotationsformate / Profile in der Dokumentation der jadice document platform 5 ).

Renderer-Klassen

Die Renderer-Klassen setzen die Eigenschaften der Annotationen in visuelle Objekte um und bestimmen ihre Darstellung im jadice web toolkit Viewer.

Um eine einheitlichere Darstellung zu erzielen, bietet das jadice web toolkit für manche Annotationsformate (z.B. FileNet P8- oder Content Manager-Annotationen) die Möglichkeit, eine archivspezifische Parametrisierung der Renderer vorzunehmen oder dedizierte archivspezifische Renderer-Klassen zu verwenden. Die zugehörige Konfiguration wird im Annotationsprofil vorgenommen. Beispielprofile sind im Verzeichnis annotation-configurations der Library webtoolkit-demo-common-*.jar zu finden.

Die folgende Tabelle gibt einen Überblick über die derzeit im jadice web toolkit verfügbaren Renderer-Implementierungen und Parametrisierungsmöglichkeiten.

AnnotationstypGWT Renderer (jadice® web toolkit)AnnotationsformatParameterSwing Renderer (jadice® document platform)
Arrowcom.levigo.jadice.web.client.renderer.internal.annotation.ArrowAnnotationRendererFN P8adjustLineWidthFNP8ArrowAnnotationRenderer
CM 7/8adjustLineWidthCMArrowAnnotationRenderer
sonstigekeineArrowAnnotationRenderer
Ellipsecom.levigo.jadice.web.client.renderer.internal.annotation.EllipseAnnotationRendererFN P8adjustLineWidthFNP8EllipseAnnotationRenderer
CM 7/8adjustLineWidthCMEllipseAnnotationRenderer
sonstigekeineEllipseAnnotationRenderer
Linecom.levigo.jadice.web.client.renderer.internal.annotation.LineAnnotationRendererFN P8adjustLineWidthFNP8LineAnnotationRenderer
CM 7/8adjustLineWidthCMLineAnnotationRenderer
sonstigekeineLineAnnotationRenderer
Pathcom.levigo.jadice.web.client.renderer.internal.annotation.PathAnnotationRendererFN P8adjustLineWidthFNP8PathAnnotationRenderer
CM 7/8adjustLineWidthCMPathAnnotationRenderer
sonstigekeinePathAnnotationRenderer
Rectanglecom.levigo.jadice.web.client.renderer.internal.annotation.RectangleAnnotationRendererFN P8adjustLineWidthFNP8RectangleAnnotationRenderer
CM 7/8adjustLineWidthCMRectangleAnnotationRenderer
sonstigekeineRectangleAnnotationRenderer
Stampcom.levigo.jadice.web.client.renderer.internal.annotation.fnp8.FNP8StampAnnotationRendererFN P8adjustLineWidth, useISRenderingFNP8StampAnnotationRenderer
com.levigo.jadice.web.client.renderer.internal.annotation.cm.CMStampAnnotationRendererCM 7/8adjustLineWidth, adjustFontSizeCMStampAnnotationRenderer
com.levigo.jadice.web.client.renderer.internal.annotation.StampAnnotationRenderersonstigekeineStampAnnotationRenderer
Textcom.levigo.jadice.web.client.renderer.internal.annotation.TextAnnotationRenderersonstigelineWrapTextAnnotationRenderer
com.levigo.jadice.web.client.renderer.internal.annotation.cm.CMTextAnnotationRendererCM 7/8adjustLineWidth, adjustFontSizeCMTextAnnotationRenderer
com.levigo.jadice.web.client.renderer.internal.annotation.FNP8TextAnnotationRendererFN P8useISRendering, adjustLineWidth, lineWrapFNP8TextAnnotationRenderer
com.levigo.jadice.web.client.renderer.internal.annotation.TextInfoAnnotationRenderersonstigeinfoDateType, infoUserType, infoLayoutConstraint, infoTextStyle, infoTextColor, infoFontFace, infoTextPattern, infoFontSize, showInfoText, lineWrapTextInfoAnnotationRenderer
com.levigo.jadice.web.client.renderer.internal.annotation.FNP8TextInfoAnnotationRendererFN P8infoDateType, infoUserType, infoLayoutConstraint, infoTextStyle, infoTextColor, infoFontFace, infoTextPattern, infoFontSize, showInfoText, lineWrap, adjustLineWidth, useIsRenderingFNP8TextInfoAnnotationRenderer
com.levigo.jadice.web.client.renderer.internal.annotation.FNISNoteAnnotationRendererFN ISiconifiedWidth, iconifiedHeight, lineWrapFNISNoteAnnotationRenderer
HistoryAnnotationcom.levigo.jadice.web.client.renderer.internal.annotation.HistoryAnnotationRendererJadicelineWrapHistoryAnnotationRenderer
Calloutcom.levigo.jadice.web.client.renderer.internal.annotation.CalloutAnnotationRendererJadicelineWrapCalloutAnnotationRenderer
Imagecom.levigo.jadice.web.client.renderer.internal.annotation.JWTImageAnnotationRendererJadicekeineJWTImageAnnotationRenderer
Beliebigcom.levigo.jadice.web.client.renderer.internal.annotation.IconRendererSonstige / BeliebigiconUrl, iconWidth, iconHeight (alles Pflichtfelder)com.levigo.jadice.annotation.internal.renderer.IconAnnotationRenderer

Konfiguration der Renderer-Klassen

  • adjustLineWidth

    • Der Parameter adjustLineWidth gibt an, ob die Liniendicke einer Annotation abhängig von der Auflösung angepasst werden soll. Hierdurch kann die Anzeige an die im IBM-CM-Viewer und Daeja-Viewer angelichen werden.

      Mögliche Werte: true, false. Default: true.

              <renderer toolkit="gwt"
      class="com.levigo.jadice.web.client.renderer.internal.annotation.ArrowAnnotationRenderer" >
      <property name="adjustLineWidth">false</property>
      </renderer>

  • adjustFontSize

    • Der Parameter adjustFontSize gibt an, ob die Schriftgröße einer Annotation abhängig von der Auflösung angepasst werden soll. Hierdurch kann die Anzeige an die im IBM-CM-Viewer angelichen werden.

      Mögliche Werte: true, false. Default: true.

              <renderer toolkit="gwt"
      class="com.levigo.jadice.web.client.renderer.internal.annotation.cm.CMStampAnnotationRenderer" >
      <property name="adjustFontSize">false</property>
      </renderer>

  • useISRendering

    • Der Parameter useISRendering gibt an, ob das FileNet IS (IDM Viewer) renderspezifische Verhalten verwendet werden soll oder nicht. Wird dieser Parameter auf false gesetzt, so wird das FNP8 Daeja Viewer Verhalten verwendet.

      Mögliche Werte: true, false. Default: false.

              <renderer toolkit="gwt"
      class="com.levigo.jadice.web.client.renderer.internal.annotation.fnp8.FNP8StampAnnotationRenderer" >
      <property name="useISRendering">true</property>
      </renderer>

  • lineWrap

    • Der Parameter lineWrap gibt an, wie das Zeilenumbruchverhalten von Annotationen aussehen soll.

      Mögliche Werte: WORD_CR, CHARACTER_CR, NONE. Default: WORD_CR.

      Für eine Darstellung, die dem IBM CM-Viewer entspricht, muss hier der Parameter NONE eingestellt werden.

      • WORD_CR

        Bricht den Text nach dem letzten vollständig enthaltenen Wort um, falls der Text länger als die Textannotation ist.

      • CHARACTER_CR

        Bricht den Text nach einem beliebigen Zeichen um, falls der Text länger als die Textannotation ist.

      • NONE

        Bricht den Text innerhalb einer Zeile nicht um, falls der Text länger als die Textannotation ist.

              <renderer toolkit="gwt"
      class="com.levigo.jadice.web.client.renderer.internal.annotation.TextAnnotationRenderer" >
      <property name="lineWrap">CHARACTER_CR</property>
      </renderer>

  • infoDateType

    • Der Parameter infoDateType gibt an, welcher Zeitstempel angezeigt werden soll.

      Mögliche Werte: CREATE, MODIFY, CURRENT. Default: MODIFY.

      • CREATE

        Es wird der Zeitstempel angezeigt, wann die Annotation erstellt wurde.

      • MODIFY

        Es wird der Zeitstempel angezeigt, wann die Annotation zuletzt verändert wurde.

      • CURRENT

        Es wird immer der aktuelle Zeitstempel angezeigt. Dieser wird bei jedem Rendervorgang aktualisiert.

              <renderer toolkit="gwt"
      class="com.levigo.jadice.web.client.renderer.internal.annotation.TextInfoAnnotationRenderer" >
      <property name="infoDateType">CREATE</property>
      </renderer>

  • infoUserType

    • Der Parameter infoUserType gibt an, welcher Benutzer angezeigt werden soll.

      Mögliche Werte: CREATE, MODIFY. Default: MODIFY.

      • CREATE

        Es wird der Benutzer angezeigt, welcher die Annotation angebracht hat.

      • MODIFY

        Es wird der Benutzer angezeigt, welcher die Annotation zuletzt bearbeitet hat.

              <renderer toolkit="gwt"
      class="com.levigo.jadice.web.client.renderer.internal.annotation.TextInfoAnnotationRenderer" >
      <property name="infoUserType">CREATE</property>
      </renderer>

  • infoLayoutConstraint

    • Der Parameter infoLayoutConstraint gibt an, wo die Infobox angezeigt werden soll.

      Mögliche Werte: TOP, BOTTOM. Default: BOTTOM.

      • TOP

        Die Infobox wird oberhalb der Annotation angezeigt.

      • BOTTOM

        Die Infobox wird unterhalb der Annotation angezeigt.

              <renderer toolkit="gwt"
      class="com.levigo.jadice.web.client.renderer.internal.annotation.TextInfoAnnotationRenderer" >
      <property name="infoLayoutConstraint">TOP</property>
      </renderer>

  • infoTextStyle

    • Der Parameter infoTextStyle gibt an, wie der Text der Infobox dargestellt werden soll.

      Mögliche Werte: PLAIN, BOLD, ITALIC, BOLD_ITALIC. Default: PLAIN.

              <renderer toolkit="gwt"
      class="com.levigo.jadice.web.client.renderer.internal.annotation.TextInfoAnnotationRenderer" >
      <property name="infoTextStyle">BOLD</property>
      </renderer>

  • infoTextColor

    • Der Parameter infoTextColor gibt an, welche Farbe für den in der Infobox dargestellten Text verwendet werden soll.

      Mögliche Werte: Alle Farbwerte. Default: BLACK.

              <renderer toolkit="gwt"
      class="com.levigo.jadice.web.client.renderer.internal.annotation.TextInfoAnnotationRenderer" >
      <property name="infoTextColor">RED</property>
      </renderer>

  • infoFontFace

    • Der Parameter infoFontFace gibt an, welche Schriftart für den in der Infobox dargestellten Text verwendet werden soll.

      Mögliche Werte: alle Schriftarten. Default: monospaced.

              <renderer toolkit="gwt"
      class="com.levigo.jadice.web.client.renderer.internal.annotation.TextInfoAnnotationRenderer" >
      <property name="infoFontFace">serif</property>
      </renderer>

  • infoTextPattern

    • Der Parameter infoTextPattern gibt das Pattern an, welches für die Ausgabe des Infotextes verwendet werden soll.

      Mögliche Werte: String. Default: {user} {date,MM-dd-yyyy} {time,HH:mm:ss}

              <renderer toolkit="gwt"
      class="com.levigo.jadice.web.client.renderer.internal.annotation.TextInfoAnnotationRenderer" >
      <property name="infoFontFace">{user} {date,MM-dd-yyyy} {time,HH:mm:ss}</property>
      </renderer>

  • infoFontSize

    • Der Parameter infoFontSize gibt an, welche Schriftgröße für den in der Infobox dargestellten Text verwendet werden soll.

      Mögliche Werte: Integer-Werte. Default: 12.

              <renderer toolkit="gwt"
      class="com.levigo.jadice.web.client.renderer.internal.annotation.TextInfoAnnotationRenderer" >
      <property name="infoFontSize">serif</property>
      </renderer>

  • showInfoText

    • Der Parameter showInfoText gibt an, ob die Infobox angezeigt werden soll.

      Mögliche Werte: true, false. Default: false.

              <renderer toolkit="gwt"
      class="com.levigo.jadice.web.client.renderer.internal.annotation.TextInfoAnnotationRenderer" >
      <property name="showInfoText">true</property>
      </renderer>

  • iconifiedWidth, iconifiedHeight

    • Die Parameter iconifiedWidth und iconifiedHeight geben die Größe (in Pixeln) von ikonifizierten Annotationen an.

      Mögliche Werte: Integer-Werte. Default: 0.

              <renderer toolkit="gwt"
      class="com.levigo.jadice.web.client.renderer.internal.annotation.FNISNoteAnnotationRenderer" >
      <property name="iconifiedWidth">20</property>
      <property name="iconifiedHeight">20</property>
      </renderer>

  • iconUrl, iconWidth, iconHeight

    • Bei Verwendung des IconRenderer (oder auch des IconWranglers) geben die Parameter iconWidth und iconHeight die Größe (in Pixeln) des Images an. Diese Felder sind Pflichtfelder und müssen immer angegeben werden. Das Bild wird in der angegebenen Pixelgröße gerendert.

      Mögliche Werte: Integer-Werte größer 0

      Der Parameter iconUrl gibt die URL des Images für den IconRenderer an. Folgende URL-Angaben werden unterstützt:

      Data URLs: Direkte Angabe einer Data-URL (z.B. data:image/png;base64,BASE64_ENCODED_PNG_DATA)

      Relative Web-URL: Angabe einer relativen Web-URL (z.B. /images/MyImage.jpg). Das Image muss auf dem lokalen Server verfügbar sein.

      Absolute Web-URL: Angabe einer absoluten Web-URL (z.B. https://external/MyImage.jpg). Hinweis: Ggfs müssen für die Verwendung von externen URLs entsprechende CORS-Filter konfiguriert werden

              <renderer toolkit="gwt" class="com.levigo.jadice.web.client.renderer.internal.annotation.IconRenderer">
      <property name="iconUrl">/images/MyImage.jpg</property>
      <property name="iconWidth">24</property>
      <property name="iconHeight">24</property>
      </renderer>

Wrangler-Klassen

Die Wrangler-Klassen dienen der Interaktion GUI / Annotation. Sie werden zum Anlegen, Verändern und Editieren der Annotation verwendet.

Manche Wrangler lassen sich über das Annotationprofil konfigurieren. Beispielprofile sind im Verzeichnis annotation-configurations der Library webtoolkit-demo-common-*.jar zu finden.

Die folgende Tabelle gibt einen Überblick über die im jadice web toolkit verfügbaren Wrangler-Implementierungen und Parameterisierungsmöglichkeiten.

AnnotationstypGWT Wrangler (jadice® web toolkit)AnnotationsformatParameterSwing Wrangler (jadice® document platform)
Arrowcom.levigo.jadice.web.client.internal.annotation.wrangler.ArrowAnnotationWrangleralleminimumLineLengthArrowAnnotationWrangler
Ellipsecom.levigo.jadice.web.client.internal.annotation.wrangler.EllipseAnnotationWrangleralleminimumWidth, minimumHeightEllipseAnnotationWrangler
Highlight, Mask, Rectanglecom.levigo.jadice.web.client.internal.annotation.wrangler.DefaultWrangleralleminimumWidth, minimumHeightRectangleAnnotationWrangler
Freehandcom.levigo.jadice.web.client.internal.annotation.wrangler.FreehandAnnotationWrangleralle-FreehandAnnotationWrangler
Polygoncom.levigo.jadice.web.client.internal.annotation.wrangler.PolygonAnnotationWrangleralleclosedPolygonAnnotationWrangler
Iconified Notecom.levigo.jadice.web.client.internal.annotation.wrangler.IconifiedTextAnnotationWranglerFN P8, FN ISexecuteActionAfterCreation, editorWidth, editorHeight, textSelection, cursorPositionIconifiedTextAnnotationWrangler
Linecom.levigo.jadice.web.client.internal.annotation.wrangler.LineAnnotationWrangleralleminimumLineLengthLineAnnotationWrangler
Stampcom.levigo.jadice.web.client.internal.annotation.wrangler.StampAnnotationWrangleralleexecuteActionAfterCreation, editorWidth, editorHeight, textSelection, cursorPosition, editorBehaviorOnOutsideClick, lineWrap, forceAnnotationUprightStampAnnotationWrangler
Textcom.levigo.jadice.web.client.internal.annotation.wrangler.TextAnnotationWrangleralleexecuteActionAfterCreation, editorWidth, editorHeight, textSelection, cursorPosition, editorBehaviorOnOutsideClick, expandHeight, forceAnnotationUpright, showRotationHandleTextAnnotationWrangler
Calloutcom.levigo.jadice.web.client.internal.annotation.wrangler.CalloutAnnotationWrangleralleeditorWidth, editorHeight, executeActionAfterCreation, editorBehaviorOnOutsideClick, textSelection, cursorPosition, expandHeight-
Imagecom.levigo.jadice.web.client.internal.annotation.wrangler.JWTImageAnnotationWrangleralle--
Beliebigcom.levigo.jadice.web.client.internal.annotation.wrangler.IconWrangleralleiconWidth, iconHeight (in px; alles Pflichtfelder)-
TextHighlightcom.levigo.jadice.annotation.TextHighlightAnnotationjadice(*)isAllowMultiPageSelectionTextHighlightAnnotationWrangler, (*)HighlightTextCommand

(*) Die TextHighlightAnnotation besitzt zusätzlich zum Wrangler das HighlightTextCommand, welches das Anlegen der Annotation übernimmt.

Konfiguration der Wrangler-Klassen

Codebeispiele finden sich in den Showcases unter Customized Wranglers.

  • DefaultWrangler (und alle davon abgeleiteten Wrangler)

    • Minimale Breite und Höhe rechteckbasierter Annotationen (Rectangle, Highlight, Mask, Ellipse, Text, Note, Image): minimumWidth, minimumHeight

      Mögliche Werte: Float-Wert in mm. Default: 5.0.

              <wrangler toolkit="gwt"
      class="com.levigo.jadice.web.client.internal.annotation.wrangler.DefaultWrangler" >
      <property name="minimumWidth">10.0</property>
      <property name="minimumHeight">10.0</property>
      </wrangler>

    • Anlegemodus (im folgenden Beispiel für den TextAnnotationWrangler gezeigt): creationMode

      Mögliche Werte: DEFAULT, SINGLE_CLICK

      <wrangler toolkit="gwt" class="com.levigo.jadice.web.client.internal.annotation.wrangler.TextAnnotationWrangler" >
      <property name="creationMode">SINGLE_CLICK</property>
      </wrangler>

      Ohne Angabe bzw. mit Wert DEFAULT: Die Annotation kann während des Anlegens in der Größe beliebig aufgezogen werden. Der Anlegevorgang wird beendet, sobald die Maustaste losgelassen wird. Einschränkung: Das Aufziehen ist bei Stempelannotationen nicht möglich, da diese ihre Größe anhand des Textinhalts bzw. der Bildgrösse selbst bestimmen.

      SINGLE_CLICK: Das Anlegen der Annotation wird beim ersten Mausklick beendet; die Annotation erhält die minimale Grösse (die wiederum im Annotationsprofil über minimumWidth/minimumHeight konfiguriert werden kann). Über einen AnnotationCustomizer lässt sich zusätzlich - abweichend von der Minimalgröße - eine initiale Größe der Annotation einstellen. Diesen Weg kann man nutzen, um eine initiale Größe vorzugeben, die von der Minimalgröße abweicht.

  • LineAnnotationWrangler, ArrowAnnotationWrangler

    • Minimale Länge von Linien- und Pfeilannotationen: minimumLineWidth

      Mögliche Werte: Float-Wert in mm. Default: 5.0.

      <wrangler toolkit="gwt" class="com.levigo.jadice.web.client.internal.annotation.wrangler.LineAnnotationWrangler" >
      <property name="minimumLineLength">10.0</property>
      </wrangler>

  • TextAnnotationWrangler, StampAnnotationWrangler, IconifiedTextAnnotationWrangler, CalloutAnnotationWrangler

    Aufgrund der Vererbungshierarchie wirkt sich eine etwaige Konfiguration des TextAnnotationWranglers nicht nur auf Textannotationen, sondern auch auf Stempel- und Notizannotationen aus. Falls unterschiedliche Konfigurationen pro Annotationstyp eingestellt werden sollen, können die jeweiligen Parameter für Stempel- und Notizannotationen überschrieben werden.

    • Automatisches Öffnen des Texteditors: executeActionAfterCreation

      Mögliche Werte: true, false. Default: false.

      <annotation-type name="BaseText" archetype="BaseText" class="com.levigo.jadice.annotation.TextAnnotation">
      <wrangler toolkit="gwt" class="com.levigo.jadice.web.client.internal.annotation.wrangler.TextAnnotationWrangler" >
      <property name="executeActionAfterCreation">true</property>
      </wrangler>
      </annotation-type>

      Über den Parameter executeActionAfterCreation kann der TextAnnotationWrangler so konfiguriert werden, dass unmittelbar nach dem Erstellen der Annotation der Texteditor geöffnet wird.

    • Freie Rotation bei der Bearbeitung erlauben

      <fixed name="showRotationHandle" propertyType="java.lang.Boolean">
      <default>true</default>
      </fixed>

      Hier wird definiert, ob der Anfasser für die freie Rotation angezeigt wird.

      Folgende Einstellungen sind möglich:

      • false

        Der Anfasser für das freie Rotieren der Annotation wird nicht angezeigt (Standardeinstellung)

      • true

        Der Anfasser für das freie Rotieren der Annotation wird angezeigt

      Hinweis für den Umgang mit ContentManager Annotationen

      Generell wird beim Speichern von Annotationen im CM Format die korrekte Konfiguration via CMAnnotationWriterSettings erwartet, siehe hierzu die Dokumentation der jadice document platform 5. Im Fall von rotierten Annotationen muss .setSaveAdditionalInfo(true) aufgerufen werden, siehe folgendes Code Snippet.

      FormatWriter writer = new CMAnnotationWriter();
      controls.getSettings(CMAnnotationWriterSettings.class).setFormat(CMAnnotationWriterSettings.Format.CM8);
      controls.getSettings(CMAnnotationWriterSettings.class).setSaveAdditionalInfo(true);

    • Verhalten auf rotierten Seiten: forceAnnotationUpright

      Mögliche Werte: OFF, ON_CREATION. Default: OFF.

      <annotation-type name="BaseText" archetype="BaseText" class="com.levigo.jadice.annotation.TextAnnotation">
      <wrangler toolkit="gwt" class="com.levigo.jadice.web.client.internal.annotation.wrangler.TextAnnotationWrangler" >
      <property name="forceAnnotationUpright">ON_CREATION</property>
      <property name="showRotationHandle">true</property>
      </wrangler>
      </annotation-type>

      Über den Parameter forceAnnotationUpright kann der TextAnnotationWrangler so konfiguriert werden, dass beim Erstellen der Annotation die Rotation so angepasst wird, dass bei ON_CREATION die Annotation aufrecht steht.

      Wenn die Einstellung ON_CREATION gewählt wird, muss die Eigenschaft Rotation für Textannotationen im Profil aufgenommen werden. Hierdurch wird sichergestellt, dass die beim Erstellen gesetzte Rotation gespeichert werden kann.

          <fixed name="rotation"  propertyType="java.lang.Integer"></fixed>
    • Minimale Breite und Höhe des Annotationseditors: editorWidth, editorHeight

      Mögliche Werte: Integer-Wert in px. Default: 50.

          <wrangler toolkit="gwt" class="com.levigo.jadice.web.client.internal.annotation.wrangler.TextAnnotationWrangler" >
      <property name="editorWidth">300</property>
      <property name="editorHeight">100</property>
      </wrangler>

      Über die Parameter editorWidth und editorHeight können die Wrangler textbasierter Annotationen so konfiguriert werden, dass sie den Texteditor mit den angegebenen Minimalgrößen öffnen.

    • Initiales Selektionsverhalten des Editors: textSelection

      Mögliche Werte: NONE, ALL. Default: NONE.

          <wrangler toolkit="gwt" class="com.levigo.jadice.web.client.internal.annotation.wrangler.TextAnnotationWrangler" >
      <property name="textSelection">ALL</property>
      </wrangler>

      Der Parameter textSelection bestimmt, ob im TextEditor der Text selektiert ist.

    • Cursorposition im Editor: cursorPosition

      Mögliche Werte: START, END. Default: START.

          <wrangler toolkit="gwt" class="com.levigo.jadice.web.client.internal.annotation.wrangler.TextAnnotationWrangler" >
      <property name="cursorPosition">END</property>
      </wrangler>

      Der Parameter cursorPosition bestimmt die Position des Cursors nach dem Öffnen des TextEditors.

    • Verhalten des Editiermodus: editorBehaviorOnOutsideClick

      Mögliche Werte: APPLY_TEXT, DISCARD_TEXT, IGNORE_CLICK. Default: APPLY_TEXT.

          <wrangler toolkit="gwt" class="com.levigo.jadice.web.client.internal.annotation.wrangler.TextAnnotationWrangler" >
      <property name="editorBehaviorEditorOnOutsideClick">IGNORE_CLICK</property>
      </wrangler>

      Der Parameter behaviorOnOutsideClick bestimmt das Verhalten, wenn außerhalb der Annotation geklickt wird. Bei APPLY_TEXT und DISCARD_TEXT wird der Editier-Modus verlassen und die aktuelle Textänderung der Annotation entweder übernommen bzw. verworfen. Bei IGNORE_CLICK wird der Editier-Modus nicht verlassen.

    • Höhenerweiterung abhängig von der Textlänge: expandHeight

      Mögliche Werte: OFF, ON_TEXT_INPUT, ON_TEXT_INPUT_AND_EDITOR_OPEN. Default: ON_TEXT_INPUT.

          <wrangler toolkit="gwt" class="com.levigo.jadice.web.client.internal.annotation.wrangler.TextAnnotationWrangler" >
      <property name="expandHeight">ON_TEXT_INPUT</property>
      </wrangler>

      Der Parameter expandHeight bestimmt das Verhalten, wenn der Text beim Bearbeiten im Editor zu lang ist und nicht vollständig in der Annotation angezeigt werden kann. Bei ON_TEXT_INPUT wird die Annotation beim Editieren nach unten erweitert, um genug Platz zu schaffen. Bei ON_TEXT_INPUT_AND_EDITOR_OPEN passiert dies bereits beim öffnen des Editors. Bei OFF werden keine Größenerweiterungen vorgenommen.

  • IconWrangler

    • Größe des Images wird auch im Wrangler für die Selektionsgröße benötigt: iconWidth und iconHeight müssen immer angegeben werden.

      Mögliche Werte: Integer-Wert in px > 0

          <wrangler toolkit="gwt" class="com.levigo.jadice.web.client.internal.annotation.wrangler.IconWrangler">
      <property name="iconWidth">24</property>
      <property name="iconHeight">24</property>
      </wrangler>

Konfiguration des HighlightTextCommand

Wie eingangs des Kapitels bereits erwähnt, gibt es bei der TextHighlightAnnotation zusätzlich zum Wrangler noch das HighlightTextCommand. Hierzug gibt es einen Parameter isAllowMultiPageSelection. Ist dieser Parameter gesetzt, ist es möglich mehrere Seiten zu selektiern, womit pro Seite dann genau eine neue Annotation erstellt wird, sobald das Command ausgeführt wird. Ist im Gegensatz hierzu der Parameter deaktiviert, lässt sich das Command nur genau dann aktivieren, wenn eine Selektion auf einer einzelnen Seite aufgezogen wird.

Konfiguration der Annotationen selbst

  • TextAnnotation, StampAnnotation

    • Nicht editierbare textbasierte Annotationen: editable = false

      <annotation-type name="Stamp" archetype="Stamp" class="com.levigo.jadice.annotation.StampAnnotation">
      <fixed name="editable" propertyType="java.lang.Boolean">
      <default>true</default>
      </fixed>
      ...
      </annotation-type>
      ...
      <annotation-template name="StampDone" extends="Stamp">
      ...
      <!-- configure stamp annotation derived from this template to be read-only -->
      <default name="editable">false</default>
      ...
      </annotation-template>

      Über den Parameter editable kann der Annotationseditor auf Basis Annotationstyp als read-only konfiguriert werden. In diesem Fall öffnet sich der Annotationseditor für alle Annotationen des zugehörigen Annotationstyps unabhängig von etwaigen Berechtigungen immer im Read-Only-Modus.

  • ArrowAnnotation

    Der ArrowAnnotationWrangler stellt einen Sonderfall dar, da er indirekt über die Annotation selbst konfiguriert wird. Gibt die Konfiguration einer ArrowAnnotation einen Bereich (range) für headAngle oder headLength mit Minimal- und Maximal-Werten vor, so werden diese vom ArrowAnnotationWrangler berücksichtigt.

    <annotation-type name="Arrow" archetype="Arrow"
    extends="Line" class="com.levigo.jadice.annotation.ArrowAnnotation">
    ...
    <range name="headAngle" propertyType="java.lang.Integer">
    <labels>
    <label locale="en">Head angle</label>
    <label locale="de">Winkel</label>
    </labels>
    <default>20</default>
    <maximum>89</maximum>
    <minimum>1</minimum>
    </range>
    <range name="headLength" propertyType="java.lang.Integer">
    <default>25</default>
    <labels>
    <label locale="en">Arrow tip</label>
    <label locale="de">Pfeilspitze</label>
    </labels>
    ...
    <maximum>100</maximum>
    <minimum>1</minimum>
    </range>
    <fixed name="headLengthInPercent" propertyType="java.lang.Boolean">
    <default>false</default>
    </fixed>
    ...
    </annotation-type>

  • CalloutAnnotation

    Auch bei CalloutAnnotations werden Profil-Einstellungen der Annotation von ihren Wranglern ausgewertet und berücksichtigt. Anders als bei ArrowAnnotations werden bei CalloutAnnotations (anstelle von headAngle und headLength) die Eigenschaften arrowWidth und arrowHeight konfiguriert (Einheit hier: Jadice Document Units).

    Analog zur Konfiguration von TextAnnotations lassen sich auch die Eigenschaften der Textbox über das Annotationsprofil konfigurieren (strokeColor, fillColor, lineWidth, fontFace, fontSize, textColor,... ).

    <annotation-type name="Callout" archetype="Callout"
    class="com.levigo.jadice.annotation.CalloutAnnotation">
    ...
    <range name="arrowWidth" propertyType="java.lang.Integer">
    <default>1000</default>
    <minimum>0</minimum>
    <maximum>10000</maximum>
    </range>

    <range name="arrowHeight" propertyType="java.lang.Integer">
    <default>1000</default>
    <minimum>0</minimum>
    <maximum>10000</maximum>
    </range>

    ...
    </annotation-type>

  • JWTImageAnnotation

    Dieser Annotationstyp stellt eine Besonderheit dar, da er aus zwei Teilen besteht:

    • Der Annotation selber.

      • Diese hält lediglich eine Referenz auf ein Bild in Form einer ID.
    • Einem AnnotationImageProvider

      • Dieser ist dafür verantwortlich, die Bild-ID in ein Bild aufzulösen, um es dem client- oder serverseitigen Renderer zur Verfügung zu stellen.

      • Wird serverseitig in der AnnotationProfileRegistry auf ein bestimmtes Annotationsprofil registriert.

        • Immer wenn eine Bildannotation gerendert wird, wird abhängig des zugehörigen Annotationsprofils der Provider gewählt und das Bild angefragt.

    Die Bild-ID kann entweder statisch in dem Annotationsprofil gesetzt werden oder programmatisch per AnnotationCustomizer auf Clientseite. Durch letztere Variante lassen sich dynamisch Bild-IDs setzen, um beispielsweise abhängig von der Benutzersitzung unterschiedliche Bilder anzufragen.

    Definition der Bild-ID über das Annotationsprofil:

    <annotation-profile name="exampleProfile">
    ...
    <annotation-type name="Image" archetype="Image"
    class="com.levigo.jadice.annotation.JWTImageAnnotation">
    ...
    <fixed name="imageID" propertyType="java.lang.String">
    <default>exampleImageID</default>
    </fixed>

    ...
    </annotation-type>
    ...
    </annotation-profile>

    Programmatische Definition der Bild-ID auf Clientseite

    Annotations.getAnnotationCustomizers().add(new AnnotationCustomizer() {
    @Override
    public void customize(Annotation annotation) {
    if (annotation instanceof JWTImageAnnotation) {
    final String name = annotation.getType().getName();

    if (name.equals("Image"))
    ((JWTImageAnnotation) annotation).setImageID("exampleImageID");
    }
    }
    });

    Definition eines entsprechenden AnnotationImageProviders

    @Component
    public class AnnoImageProvider implements AnnotationImageProvider {

    @Override
    public SeekableInputStream provideAnnotationImage(String annotationImageID) throws IOException {
    InputStream is = null;
    if (annotationImageID.equals("exampleImageID"))
    is = Thread.currentThread().getContextClassLoader().getResourceAsStream("example.png");

    if (null == is)
    throw new IOException("Couldn't find/load image for id "" + annotationImageID + """);

    return new MemoryInputStream(is);
    }
    }

    Analog zur Konfiguration von RectangleAnnotations lassen sich auch die Eigenschaften des Rahmens über das Annotationsprofil konfigurieren (linePainted, strokeColor, lineWidth).

     <annotation-type name="Image" archetype="Image" 
    class="com.levigo.jadice.annotation.JWTImageAnnotation">
    ...
    <fixed name="linePainted" propertyType="java.lang.Boolean">
    <default>true</default>
    </fixed>

    <fixed name="lineWidth" propertyType="java.lang.Float">
    <default>1.0</default>
    </fixed>

    <fixed name="strokeColor" propertyType="java.awt.Color">
    <default>#000000</default>
    </fixed>
    ...
    </annotation-type>

Initializer

Annotation Initializer werden benötigt, um die Annotation um zusätzliche Informationen (wie z.B. der Auflösung der Seite, auf der sich die Annotation befindet) anzureichern. Initializer sind nur für FN P8 und CM Annotationen erforderlich.

AnnotationstypGWT Initializer (jadice web toolkit)AnnotationsformatSwing Initializer (jadice document platform)
Allecom.levigo.jadice.web.client.internal.annotation.initializer.FNP8AnnotationInitializerFN P8FNP8AnnotationInitializer
Allecom.levigo.jadice.web.client.internal.annotation.initializer.CMAnnotationInitializerCM7 / 8com.levigo.jadice.annotation.internal.renderer.cm.CMAnnotationInitializer

Auf Clientseite wird aktuell nur der FNP8AnnotationInitializer sowie der CMAnnotationInitializer unterstützt. Die Konfiguration sieht beispielsweise wie folgt aus:

    <annotation-type name="BaseLine" archetype="BaseLine"
class="com.levigo.jadice.annotation.LineAnnotation">
...
<initializer toolkit="swing"
class="com.levigo.jadice.annotation.internal.renderer.fnp8.FNP8AnnotationInitializer" />
<initializer toolkit="gwt"
class="com.levigo.jadice.web.client.internal.annotation.initializer.FNP8AnnotationInitializer" />
...
</annotation-type>

Bitte beachten Sie, dass diese Initializer im Annotationsprofil für alle Annotationstypen konfiguriert werden müssen, um eine korrekte Darstellung der Annotationen zu gewährleisten. Weitere Beispiele finden sich in den mitgelieferten CM- und P8-Annotationsprofilen in den Demos.

Laden von Annotationsprofilen

Das Laden von einem oder mehreren Annotationsprofilen im jadice web toolkit ist sehr einfach. Es muss hierzu lediglich die application.yml folgendermaßen angepasst werden:

webtoolkit:
annotationProfiles: /annos/jwt-annotation-profile.xml, /annos/jwt-demo-profile.xml
defaultAnnotationProfile: JWT-Demo-Profile

Annotation API

Das jadice web toolkit stellt eine API zur Verfügung, um Annotationen programmatisch zu erstellen. Hiermit lassen sich kundenspezifische Annotationen ohne Nutzerinteraktion anlegen.

Vor der Erstellung kann jede Annotation mit kundenspezifischen Standard-Einstellungen konfiguriert werden. Textannotationen können dadurch beispielsweise einen frei wählbaren Vorlagetext erhalten oder bestimmte Annotations-Metadaten im Text anzeigen.

Nach der Erstellung kann jede Annotation über den Annotationseditor vom Benutzer bearbeitet werden.

Um eine Annotation über die API anzulegen, wird ein eigenes, kundenspezifisches Command implementiert, das vom abstrakten Basiscommand CreateAnnotationViaApiCommand erbt. Innerhalb des Commands wird unter anderem konfiguriert, auf welche Seite die neue Annotation angebracht werden soll und welcher Annotationstyp verwendet wird. Auch feingranulare Einstellungen wie spezifische Hintergrundfarben, Schriftarten, etc. können darüber vorgenommen werden.

Verwandte Kapitel:

Details zur Integration und die zugehörigen Codebeispiele finden sich in den Showcases unter “Creating Annotations via API“.

Beeinflussung des Annotationsrendering über eine AnnotationRenderStrategy

Annotationen werden grundsätzlich clientseitig gerendert. Sollen die Annotationen eine serverseitige Maskierung von Dokumentinhalten sicherstellen, so kann über die AnnotationRenderStrategy SERVER_SIDE_MASKING und die Permissions DENY.CHANGE und DENY.REMOVE ein serverseitiges Rendering der Annotationen erzwungen werden.

Das Setzen der Render Strategy funktioniert mittels PredefinedAnnotationRenderStrategy.SERVER_SIDE_MASKING.applyToDocument(Document) bzw. PredefinedAnnotationRenderStrategy.CLIENT.applyToDocument(Document) (Default) und kann im DocumentDataProvider eingestellt werden. Hierzu gibt es auch einen neuen Artikel in der jadice Knowledge-Base, siehe Annotationsrendering im JWT auf Client- oder Serverseite.

Für das Berechtigungskonzept im Allgemeinen beachten Sie bitte das Kapitel Berechtigungen

Ausrichtung von Annotationen an Grids

In manchen Anwendungsfällen sollen Annotationen nicht an beliebigen Stellen innerhalb eines Dokuments positioniert werden können, sondern an definierten Stellen einrasten. Um dieses Szenario zu unterstützen, kann einem Dokument clientseitig ein rechteckiges Gitternetz (Grid) hinzugefügt werden, an dem sich die Annotationen beim Erstellen, Verschieben und Resizen ausrichten. Für jeden Annotationstyp kann dabei eingestellt werden, ob dieser an den Ecken oder im Zentrum der Grid-Zellen einrastet. Grids können über das GridTool visualisiert werden.

Die folgende Abbildung zeigt ein via GridTool visualiertes Grid (mit Außengrenzen) und drei daran ausgerichtete Annotationen:

 Pfeilannotation Rechteck- und Polygonannotation

Um ein Grid für die Ausrichtung zu verwenden, muss zunächst eine Instanz der Klasse BoundedGrid erzeugt werden. Über den Konstruktor werden zum einen Breite und Höhe der zugehörigen Zellen gesteuert, zum anderen kann darüber auch eine Außengrenze des Grids definiert werden, was die Verwendung eines Rands zwischen der zugehörigen Seite und dem Grid ermöglicht.

Im zweiten Schritt muss die erzeugte Grid-Instanz dem aktuellen Dokument hinzugefügt werden. Dies erfolgt über die Klasse Grids.

Im Standard rasten alle Annotationen an den Ecken der Grid-Zellen ein. Falls für einen Annotationstyp im Zentrum eingerastet werden soll, kann dies über die Klasse SnapToMappings konfiguriert werden.

Die Ausrichtung am Grid erfolgt aussschließlich bei der Bearbeitung von Annotationen. Insbesondere werden bestehende Annotation im Rahmen des Ladevorgangs an ihrer ursprünglichen Position dargestellt. Erst mit der Bearbeitung (Verschieben oder Resizen) werden Annotationen am Grid ausgerichtet.

Details zur Integration und ein zugehöriges Codebeispiel finden sich in den Showcases unter “Annotations -> Grid Positioning“.

Hinweis

Beim Verschieben einer am Grid ausgerichteten Mehrfachselektion, in der sowohl Annotationen enthalten sind, die an den Ecken, als auch Annotationen, die am Zentrum der Grid-Zellen ausgerichtet werden, verlieren die am Zentrum ausgerichteten Annotationen ihre Ausrichtung am Grid. Hintergrund ist, dass die Selektion immer als Ganzes verschoben wird.
Beim Resizen einer Mehrfachselektion verlieren die in der Selektion enthaltenen Annotationen ihre Ausrichtung am Grid.
Um sicherzustellen, dass am Grid ausgerichtete Annotationen nach dem Verschieben und Resizen am Grid ausgerichtet bleiben, muss die Mehrfachselektion über das AnnotationTool ausgeschaltet werden. Details siehe Tools.
Beim Resizen von Freihand- und Polygonannotationen geht die Ausrichtung am Grid verloren. Um dies zu verhindern muss für diese Annotationstypen das fixed Property allowResize im Annotationsprofil auf den Wert false gesetzt werden.