Problem:
Die Zoom-to-Fit-Buttons funktionieren nicht, sind aber trotzdem aktiviert. Andere Zoom-Funktionalitäten sind funktionsfähig (z. B. der Zoom auf einen festen Prozentwert).
Gleiches gilt für das Zoom Snap-In:
Möglicher Grund:
Presentation Rules sind nicht gesetzt.
Beim Aufbau der GUI muss z. B. folgendes Code-Fragment ausgeführt werden:
// add presentation rules final List<PresentationRule> rules = mainViewer.getPageView().getPresentationRuleManager().getRules(); rules.add(new SwitchToSinglePageOnFit()); rules.add(new ApplyDynamicZoomRule());
Anwendungsbeispiel: JadiceDemoApplication.initialiseGUI()
Hintergrundinformationen
Die Instanzen von PresentationRule
erlauben das Anpassen der Seitenanzeige als Reaktion auf verschiedene Events. Konkret handelt es sich dabei um die folgenden vier Events, die in jeweils eigenen Methoden-Implementationen behandelt werden können:
- Änderung der RenderSettings. Diese legen fest, wie eine Seite gerendert werden soll. Das beinhaltet zum Beispiel den Zoom-Faktor.
- Größenänderung der
PageView
-Komponente (z. B. durch Resizing des JFrame der Applikation) - Seitenwechsel innerhalb des Dokuments (Achtung: Dies beinhaltet nicht den Dokumentwechsel.)
- Änderung des Seitenlayouts
Das Setzen von PresentationRules erlaubt somit vielfältige Anpassungen des Verhaltens der Seitenanzeige. Die oben genannten Implementierungen haben folgende Aufgaben:
com.levigo.jadice.swing.pageview.SwitchToSinglePageOnFit
- Wechselt bei Auswahl eines Dynamic Zoom Mode (ein ›Anpassen‹-Modus) auf das Einzelseiten-Layout (siehe auch Hinweis unten)
com.levigo.jadice.swing.pageview.ApplyDynamicZoomRule
- Sorgt dafür, dass die Auswahl eines Dynamic Zoom Mode (ein ›Anpassen‹-Modus) auch tatsächlich dazu führt, dass die Seitenanzeige angepasst wird. So wird beispielsweise bei Seitenwechsel erneut berechnet, wie groß die Seite dargestellt werden muss, um nach der festgelegten Vorgabe anzupassen, z. B. "Breite anpassen".
Dynamic Zoom Modes
- ZOOM_MODE_FIT_BOTH
- ZOOM_MODE_FIT_WIDTH
- ZOOM_MODE_FIT_HEIGHT
stehen nur im Einzelseiten-Layout zur Verfügung. Daher muss zur korrekten Verwendung der Fit Funktionen beide PresentationRules com.levigo.jadice.swing.pageview.SwitchToSinglePageOnFit
und com.levigo.jadice.swing.pageview.ApplyDynamicZoomRule
gesetzt sein.