Ausblenden von Seiten mit Hilfe des FilteredDocument
Dieser Artikel beschreibt die Nutzung der neu geschaffenen Funktionen rund um das FilteredDocument zum Ausblenden von Seiten in Dokumenten.
Ab Version 5.9.4.1 lösen FilteredDocument und ThumbnailPageView.setApplyFilterInView() die bestehende PageFilter-API ab.
Motivation
Fachliche Abläufe machen es mitunter erforderlich, einzelne Seiten eines Dokuments auszublenden - beispielsweise Seiten, die persönliche oder anderweitig sensible Daten enthalten; gleiches gilt für schlichtweg leere Seiten.
Im jadice web toolkit existiert bereits die Möglichkeit, Seiten in der Thumbnail-Ansicht über einen PageFilter auszublenden. Bisher wirkt sich die Filterung nur auf die Thumbnails, nicht jedoch die Hauptansicht des Dokuments aus. Genau dies wird über das hier beschriebene Konzept eines FilteredDocument erreicht.
Grundidee
Der Manipulation der Dokumentstruktur liegt das Prinzip der Filterung zugrunde. So können einzelne Seiten ausgesteuert werden. Grundsätzlich könnten Filter aber auch in allgemeinerer Form genutzt werden, beispielsweise zum Umsortieren eines Dokuments.
In allen Fällen bleibt das Originaldokument unverändert - es wird lediglich ein Filter auf dieses Dokument angewendet, der die Sichtbarkeit der Seiten für die Anzeige bestimmt.
Das FilteredDocument "lebt" dabei ausschließlich auf dem Client. Es ist also Aufgabe der Integration, ggf. persistierte Filtereinstellungen serverseitig beim Laden des Dokuments auszulesen, diese an den Client zu übertragen und anschließend clientseitig den entsprechenden Filter zu setzen. Um es der Integration möglichst einfach zu machen, bietet der DefaultHiddenPagesMatcher Methoden zum Verstecken/Einblenden von Seiten an, die client- und serverseitig genutzt werden können. Details zur Nutzung siehe weiter unten.
Intern nutzt das FilteredDocument eine org.jadice.util.glazedlists.FilterList, so dass dem FilteredDocument über setMatcher() bzw. setMatcherEditor() der anzuwendende Filter (bzw. korrekter der Matcher) gesetzt werden kann. Das Originaldokument ist als Delegate im FilteredDocument enthalten.
Ladevorgang
Ausblenden von Seiten
Nachfolgend betrachten wir den Hauptanwendungsfall, einzelne Seiten in einem Dokument auszublenden. Das jadice web toolkit bringt hierzu die erforderlichen Funktionen mit, so dass ein umfangreiches Szenario damit abgedeckt werden kann:
Der Anwender zeigt ein Dokument an.
Über ein Kontextmenü kann der Anwender einzelne Seiten ausblenden.
Über eine Funktion kann der Anwender zwischen dem gefilterten und dem Originaldokument wechseln.
Der Anwender kann wahlweise das gefilterte oder das Originaldokument drucken.
Der Anwender kann die Filtereinstellung speichern.
Beim nächsten Öffnen des Dokuments wird der Filter geladen und auf das Dokument angewendet.
Die Beschreibung basiert auf den folgenden Showcases, die die unterschiedlichen Varianten abdecken:
Fall 1 | Fall 2 | Fall 3 | Fall 4 |
|---|---|---|---|
Thumbnail-Ansicht und Haupt-PageView zeigen dasselbe, vollständige Dokument an | Thumbnail-Ansicht und Haupt-PageView zeigen dasselbe, gefilterte Dokument an | Thumbnail-Ansicht zeigt das gefilterte Dokument an; Haupt-PageView zeigt alle Seiten | Thumbnail-Ansicht zeigt alle Seiten (ggf. mit grauem Overlay über ausgeblendete Seiten), Haupt-PageView zeigt das gefilterte Dokument an |
Fall 1+2: Synchrone Ansichten in der Thumbnail-Ansicht und Haupt-PageView
→ FilteredDocument with hidden pages: Synchronous Views. Hierfür sind folgende Anpassungen erforderlich:
| Involvierte Klassen | Beschreibung |
|---|---|---|
Laden des Filters (serverseitig) |
| Serverseite: An das ladende Dokument wird in der Anstelle des Das Datenformat zur Persistierung der Information, welche Seiten ausgeblendet sein sollen, ist frei und kann integrationsseitig definiert werden. |
Erzeugen des gefilterten Dokuments |
| Clientseite: Im filteredDoc = new FilteredDocument((SerializableDocument) result);
viewer.getPageView().setDocument(filteredDoc);
DefaultHiddenPagesMatcher matcher = new DefaultHiddenPagesMatcher();
filteredDoc.setMatcher(matcher);Weiterhin muss an das filteredDoc.setMatcher(matcher); |
Ein-/Ausschalten des Filters | Clientseite: Das Ein- und Ausblenden von Dokumentseiten zur Laufzeit ist gleichbedeutend mit einer Veränderung des Matchers: // Add button to switch to filter
Button b = new Button("Show filtered document");
b.addClickHandler(event -> filteredDoc.setMatcher(new DefaultHiddenPagesMatcher()));
// Add button to disable filtering
Button b2 = new Button("Show original document");
b2.addClickHandler(event -> filteredDoc.setMatcher(p -> true)); | |
Seite ein-/ausblenden | Clientseite: Wird im Showcase über ein Kontextmenü realisiert ( Beispiel mit DefaultHiddenPagesMatcher.hide(mouseEditEvent.getPage());
context.getContext().contextChanged();Man beachte den | |
Clientseite: Beim Ausdrucken oder Export lässt sich per Parameter steuern, ob gefiltert oder ungefiltert exportiert bzw. gedruckt werden soll: new FilteredPrintingServerOperationCommand(Filtering.NONE)Serverseite: In der FilteredPrintingServerOperation.java ist zu sehen, wie im Falle Filtering filtering = request.getParameters().getFiltering();
// Iterate over all pages of the document
if (filtering.equals(Filtering.NONE))
for (Page p : document.getPages())
exporter.getSourcePages().add(p);
else if (filtering.equals(Filtering.ENABLED)) {
DefaultHiddenPagesMatcher matcher = new DefaultHiddenPagesMatcher();
for (Page p : document.getPages()) {
if (matcher.matches(p))
exporter.getSourcePages().add(p);
}
} | ||
Speichern |
| Serverseite: Filter werden (wie auch Annotationen u.ä.) über eine Die Datenstruktur zur persistenten Speicherung der Informationen ist völlig frei und kann von der Integration definiert werden. |
Fall 3: Gefilterte Thumbnail-Ansicht, vollständige Haupt-Ansicht
→ FilteredDocument with filtered Thumbnail View. Ergänzend zu den Anpassungen für Fall 1+2 ist folgendes zu konfigurieren:
| Involvierte Klassen | Beschreibung |
|---|---|---|
Haupt-PageView konfigurieren | Im Hauptviewer muss das Flag viewer.getPageView().setApplyFilterInView(PageView.ApplyFilterInView.NO); | |
ThumbnailView konfigurieren | In der Thumbnail-Ansicht muss das Flag viewer.getPageView().setApplyFilterInView(PageView.ApplyFilterInView.YES); |
Fall 4: Ausgegraute Seiten in der Thumbnail-Ansicht
→ FilteredDocument with unfiltered Thumbnail View. Wie man sieht, sind in diesem Showcase die ausgeblendeten Seiten in der Thumbnail-Leiste ausgegraut dargestellt.
Diese Darstellung kann man folgendermaßen erreichen (ergänzend zu den Anpassungen für Fall 1+2 von oben):
| Involvierte Klassen | Beschreibung |
|---|---|---|
ThumbnailView konfigurieren | Auf der Thumbnailansicht muss das Flag PageView thumbnailPageView = thumbnailView.getThumbnailPageView();
thumbnailPageView.setApplyFilterInView(PageView.ApplyFilterInView.NO); | |
Ausgrauen der ausgeblendeten Seiten | Um ausgeblendete Seiten auszugrauen, muss lediglich das thumbnailToolToolManager.register(HiddenPagesOverlayTool.class, true). |