Dieser Artikel beschreibt, wie über die Thumbnail-Ansicht im jadice web toolkit Seiten entfernt oder umsortiert werden können.
Anforderung
Mitunter sind in Dokumenten störende Leerseiten enthalten oder die Reihenfolge von Seiten ist beim Scannen vertauscht worden. Es besteht die fachliche Anforderung, einzelne Seiten umzusortieren bzw. zu löschen.
Lösung
Das Verschieben von Seiten in der ThumbnailView
kann man über die Berechtigung DocumentPermission.DENY.REORDER_PAGES bzw. DocumentPermission.ALLOW.REORDER_PAGES steuern.
Die Berechtigung lässt sich entweder clientseitg setzen, z.B. im AsyncCallback
des clientseitigen Readers
:
@Override
public void onSuccess(Document result) {
getPageView().setDocument(result);
result.getPermissions().getPermissions().add(DocumentPermission.ALLOW.REORDER_PAGES);
}
oder serverseitig in der kundeneigenen Implementierung des DocumentDataProvider. Die Berechtigungen werden von den mitgelieferten Implementierungen der ThumbnailView unmittelbar berücksichtigt - egal ob die Thumbnail-Ansicht über ThumbnailViewBuilder.build()
oder durch Einbinden des ThumbnailTools
erzeugt wird.
Das Löschen von Seiten lässt sich mit Hilfe eines Commands realisieren. Dabei wird davon ausgegangen, dass der Anwender einzelne Seiten in der Thumbnail-Ansicht selektiert und diese z.B. über einen Tastaturshortcut löschen möchte.
Im folgenden exemplarisch der Code für ein Command, das die in der ThumbnailView
selektierten Seiten löscht:
public class DeleteSelectedPagesCommand extends AbstractDocumentCommand { @Override protected void execute() { ThumbnailTool thumbnailTool = getPageView().getToolManager().getTool(ThumbnailTool.class); getDocument().getPages().removeAll(thumbnailTool.getThumbnailView().getSelectedPages()); thumbnailTool.getThumbnailView().clearSelection(); } @Override protected boolean canExecute() { ThumbnailTool thumbnailTool = getPageView().getToolManager().getTool(ThumbnailTool.class); if (!thumbnailTool.getThumbnailView().getSelectedPages().isEmpty()) return true; return false; } }
Das Command kann z.B. durch eine RegisteredAction
eingebunden werden:
// register action without Button ActionRegistrationUtils.register(panel, new RegisteredAction("Delete selected Pages", new KeyStroke(Keys.DELETE, Modifier.CTRL), null, new DeleteSelectedPagesCommand (), null));
Siehe hierzu auch folgender Showcase: https://webtoolkit.jadice.com/showcase/index.html?connection=longpoll#!ActionsExample
Ausblick
Sollen die durchgeführten Änderungen persistiert werden, kann dies über die Ausführung einer ServerOperation erreicht werden. Dadurch wird der geänderte clientseitige Dokumentzustand auf die Serverseite transportiert und kann dort in kundenspezifischem Code beliebig weiterverarbeitet werden.