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:
-
Darstellung einer einfachen Linie. Start-/Endpunkt, Linienfarbe und Liniendicke können definiert werden.
-
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.
-
Darstellung eines Vektorobjekts. Vektorpfad (offen, geschlossen, gefüllt), Linien- und Füllfarbe sowie Liniendicke können definiert werden.
-
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.
-
Darstellung einer Ellipse, von der RectangleAnnotation abgeleitet.
-
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.
-
Darstellung von Text, ähnlich eines Stempels. Rotierbar, von der TextAnnotation abgeleitet. Rotation kann definiert werden.
-
Legendenannotation: Verankerter, abknickbarer Pfeil, an dessen Ende ein Textblock hängt. Dieser Typ wird nur vom Jadice Format unterstützt.
-
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: 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 StampImageAnnnotation
s 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)
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.
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.
Annotationstyp | GWT Renderer (jadice® web toolkit) | Annotationsformat | Parameter | Swing Renderer (jadice® document platform) |
---|---|---|---|---|
Arrow | com.levigo.jadice.web.client.renderer.internal.annotation.ArrowAnnotationRenderer | FN P8 | adjustLineWidth | FNP8ArrowAnnotationRenderer |
CM 7/8 | adjustLineWidth | CMArrowAnnotationRenderer | ||
sonstige | keine | ArrowAnnotationRenderer | ||
Ellipse | com.levigo.jadice.web.client.renderer.internal.annotation.EllipseAnnotationRenderer | FN P8 | adjustLineWidth | FNP8EllipseAnnotationRenderer |
CM 7/8 | adjustLineWidth | CMEllipseAnnotationRenderer | ||
sonstige | keine | EllipseAnnotationRenderer | ||
Line | com.levigo.jadice.web.client.renderer.internal.annotation.LineAnnotationRenderer | FN P8 | adjustLineWidth | FNP8LineAnnotationRenderer |
CM 7/8 | adjustLineWidth | CMLineAnnotationRenderer | ||
sonstige | keine | LineAnnotationRenderer | ||
Path | com.levigo.jadice.web.client.renderer.internal.annotation.PathAnnotationRenderer | FN P8 | adjustLineWidth | FNP8PathAnnotationRenderer |
CM 7/8 | adjustLineWidth | CMPathAnnotationRenderer | ||
sonstige | keine | PathAnnotationRenderer | ||
Rectangle | com.levigo.jadice.web.client.renderer.internal.annotation.RectangleAnnotationRenderer | FN P8 | adjustLineWidth | FNP8RectangleAnnotationRenderer |
CM 7/8 | adjustLineWidth | CMRectangleAnnotationRenderer | ||
sonstige | keine | RectangleAnnotationRenderer | ||
Stamp | com.levigo.jadice.web.client.renderer.internal.annotation.fnp8.FNP8StampAnnotationRenderer | FN P8 | adjustLineWidth, useISRendering | FNP8StampAnnotationRenderer |
com.levigo.jadice.web.client.renderer.internal.annotation.cm.CMStampAnnotationRenderer | CM 7/8 | adjustLineWidth, adjustFontSize | CMStampAnnotationRenderer | |
com.levigo.jadice.web.client.renderer.internal.annotation.StampAnnotationRenderer | sonstige | keine | StampAnnotationRenderer | |
Text | com.levigo.jadice.web.client.renderer.internal.annotation.TextAnnotationRenderer | sonstige | lineWrap | TextAnnotationRenderer |
com.levigo.jadice.web.client.renderer.internal.annotation.cm.CMTextAnnotationRenderer | CM 7/8 | adjustLineWidth, adjustFontSize | CMTextAnnotationRenderer | |
com.levigo.jadice.web.client.renderer.internal.annotation.FNP8TextAnnotationRenderer | FN P8 | useISRendering, adjustLineWidth, lineWrap | FNP8TextAnnotationRenderer | |
com.levigo.jadice.web.client.renderer.internal.annotation.TextInfoAnnotationRenderer | sonstige | infoDateType, infoUserType, infoLayoutConstraint, infoTextStyle, infoTextColor, infoFontFace, infoTextPattern, infoFontSize, showInfoText, lineWrap | TextInfoAnnotationRenderer | |
com.levigo.jadice.web.client.renderer.internal.annotation.FNP8TextInfoAnnotationRenderer | FN P8 | infoDateType, infoUserType, infoLayoutConstraint, infoTextStyle, infoTextColor, infoFontFace, infoTextPattern, infoFontSize, showInfoText, lineWrap, adjustLineWidth, useIsRendering | FNP8TextInfoAnnotationRenderer | |
com.levigo.jadice.web.client.renderer.internal.annotation.FNISNoteAnnotationRenderer | FN IS | iconifiedWidth, iconifiedHeight, lineWrap | FNISNoteAnnotationRenderer | |
HistoryAnnotation | com.levigo.jadice.web.client.renderer.internal.annotation.HistoryAnnotationRenderer | Jadice | lineWrap | HistoryAnnotationRenderer |
Callout | com.levigo.jadice.web.client.renderer.internal.annotation.CalloutAnnotationRenderer | Jadice | lineWrap | CalloutAnnotationRenderer |
Image | com.levigo.jadice.web.client.renderer.internal.annotation.JWTImageAnnotationRenderer | Jadice | keine | JWTImageAnnotationRenderer |
Beliebig | com.levigo.jadice.web.client.renderer.internal.annotation.IconRenderer | Sonstige / Beliebig | iconUrl, 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 auffalse
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
undiconifiedHeight
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 desIconWranglers
) geben die ParametericonWidth
undiconHeight
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 denIconRenderer
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.
Annotationstyp | GWT Wrangler (jadice® web toolkit) | Annotationsformat | Parameter | Swing Wrangler (jadice® document platform) |
---|---|---|---|---|
Arrow | com.levigo.jadice.web.client.internal.annotation.wrangler.ArrowAnnotationWrangler | alle | minimumLineLength | ArrowAnnotationWrangler |
Ellipse | com.levigo.jadice.web.client.internal.annotation.wrangler.EllipseAnnotationWrangler | alle | minimumWidth, minimumHeight | EllipseAnnotationWrangler |
Highlight, Mask, Rectangle | com.levigo.jadice.web.client.internal.annotation.wrangler.DefaultWrangler | alle | minimumWidth, minimumHeight | RectangleAnnotationWrangler |
Freehand | com.levigo.jadice.web.client.internal.annotation.wrangler.FreehandAnnotationWrangler | alle | - | FreehandAnnotationWrangler |
Polygon | com.levigo.jadice.web.client.internal.annotation.wrangler.PolygonAnnotationWrangler | alle | closed | PolygonAnnotationWrangler |
Iconified Note | com.levigo.jadice.web.client.internal.annotation.wrangler.IconifiedTextAnnotationWrangler | FN P8, FN IS | executeActionAfterCreation, editorWidth, editorHeight, textSelection, cursorPosition | IconifiedTextAnnotationWrangler |
Line | com.levigo.jadice.web.client.internal.annotation.wrangler.LineAnnotationWrangler | alle | minimumLineLength | LineAnnotationWrangler |
Stamp | com.levigo.jadice.web.client.internal.annotation.wrangler.StampAnnotationWrangler | alle | executeActionAfterCreation, editorWidth, editorHeight, textSelection, cursorPosition, editorBehaviorOnOutsideClick, lineWrap, forceAnnotationUpright | StampAnnotationWrangler |
Text | com.levigo.jadice.web.client.internal.annotation.wrangler.TextAnnotationWrangler | alle | executeActionAfterCreation, editorWidth, editorHeight, textSelection, cursorPosition, editorBehaviorOnOutsideClick, expandHeight, forceAnnotationUpright, showRotationHandle | TextAnnotationWrangler |
Callout | com.levigo.jadice.web.client.internal.annotation.wrangler.CalloutAnnotationWrangler | alle | editorWidth, editorHeight, executeActionAfterCreation, editorBehaviorOnOutsideClick, textSelection, cursorPosition, expandHeight | - |
Image | com.levigo.jadice.web.client.internal.annotation.wrangler.JWTImageAnnotationWrangler | alle | - | - |
Beliebig | com.levigo.jadice.web.client.internal.annotation.wrangler.IconWrangler | alle | iconWidth, iconHeight (in px; alles Pflichtfelder) | - |
TextHighlight | com.levigo.jadice.annotation.TextHighlightAnnotation | jadice | (*) isAllowMultiPageSelection | TextHighlightAnnotationWrangler, (*)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 einenAnnotationCustomizer
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
undeditorHeight
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. BeiON_TEXT_INPUT
wird die Annotation beim Editieren nach unten erweitert, um genug Platz zu schaffen. BeiON_TEXT_INPUT_AND_EDITOR_OPEN
passiert dies bereits beim öffnen des Editors. BeiOFF
werden keine Größenerweiterungen vorgenommen.
-
-
IconWrangler
-
Größe des Images wird auch im Wrangler für die Selektionsgröße benötigt:
iconWidth
undiconHeight
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.
-
-
Der ArrowAnnotationWrangler stellt einen Sonderfall dar, da er indirekt über die Annotation selbst konfiguriert wird. Gibt die Konfiguration einer ArrowAnnotation einen Bereich (
range
) fürheadAngle
oderheadLength
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>
-
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
undheadLength
) die EigenschaftenarrowWidth
undarrowHeight
konfiguriert (Einheit hier: Jadice Document Units).Analog zur Konfiguration von
TextAnnotation
s 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>
-
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
RectangleAnnotation
s 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.
Annotationstyp | GWT Initializer (jadice web toolkit) | Annotationsformat | Swing Initializer (jadice document platform) |
---|---|---|---|
Alle | com.levigo.jadice.web.client.internal.annotation.initializer.FNP8AnnotationInitializer | FN P8 | FNP8AnnotationInitializer |
Alle | com.levigo.jadice.web.client.internal.annotation.initializer.CMAnnotationInitializer | CM7 / 8 | com.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:
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“.
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.