...
for (Annotation annotation : annoSegment.getAnnotations()) {
if (annotation instanceof TextAnnotation) {
clearAnnoShowPermissions(annotation);
annotation.getPermissions().getPermissions().add(IndividualAnnotationPermission.DENY.SHOW);
// it is essential to set the modified flag here, in order to transport the permission
// change to the server and ensure that the annotations with DENY.SHOW will NOT be
// rendered when exporting the document as PDF
annotation.setModified();
}
}
getPageView().repaint();
ToolManager tm = leftViewer.getPageView().getToolManager();
ThumbnailTool thumbnailTool = tm.getTool(ThumbnailTool.class);
thumbnailTool.getThumbnailView().repaint();
}
};
Einen einzigen kleinen Fallstrick gibt es jedoch dabei: möchte man, dass die DENY.SHOW-Permission beim Ausdruck beim Ausdrucken des Dokuments Anwendung findet (und somit die versteckten Annotationen auch im Ausdruck versteckt werden), so muss die Annotation als "modified" gekennzeichnet werden (siehe oben: Information, welche der Annotationen ausgeblendet sind, beim Ausdruck an den Server transportiert werden.
- Einfachste Variante wäre das Setzen von annotation.setModified()
...
- auf den mit DENY.SHOW belegten Annotationen vor dem Aufruf der ServerOperation. Dies kann nun umgekehrt zu Problemen beim Speichern der Annotationen per ServerOperation führen. Obwohl die Annotation eigentlich schon gespeichert war und nicht verändert wurde, ist sie nun
...
- am Client als "modified" markiert und wird in
...
- allen folgenden ServerOperations mit diesem Zustand an den Server übertragen.
...
- Besser ist es, die versteckten Annoationen über die ServerOperationParameters-Implementierung an den Server zu übermitteln. Wie genau diese Implementierung aussieht (Liste von Annotation-IDs,...), bleibt der konkreten Integration überlassen. Serverseitig muss die Implementierung der Druck-ServerOperation diese Information entsprechend auswerten und verarbeiten.
Fall Nummer 2: DENY.CHANGE & DENY.REMOVE - Nichts einfacher als das
...