1
1
package com .dansoftware .pdfdisplayer ;
2
2
3
3
import javafx .application .Platform ;
4
- import javafx .collections .ObservableList ;
4
+ import javafx .beans .value .ChangeListener ;
5
+ import javafx .beans .value .ObservableValue ;
5
6
import javafx .concurrent .Worker ;
6
7
import javafx .scene .Parent ;
7
8
import javafx .scene .web .WebEngine ;
10
11
11
12
import java .io .*;
12
13
import java .net .URL ;
13
- import java .nio .file .Files ;
14
14
import java .util .Base64 ;
15
15
16
16
public class PDFDisplayer {
@@ -20,9 +20,11 @@ public class PDFDisplayer {
20
20
private ProcessListener processListener ;
21
21
22
22
private WebView nodeValue ;
23
+ private String loadScript ;
23
24
private String toExecuteWhenPDFJSLoaded = "" ;
24
25
25
26
27
+
26
28
public PDFDisplayer () {
27
29
}
28
30
@@ -79,7 +81,7 @@ public void displayPdf(InputStream inputStream) throws IOException {
79
81
try {
80
82
nodeValue .getEngine ().executeScript (js );
81
83
} catch (Exception ex ) {
82
- if (!pdfJsLoaded ) toExecuteWhenPDFJSLoaded + = js ;
84
+ if (!pdfJsLoaded ) loadScript = js ;
83
85
}
84
86
});
85
87
@@ -89,27 +91,52 @@ public void displayPdf(InputStream inputStream) throws IOException {
89
91
90
92
}
91
93
92
- @ SuppressWarnings ( "all" )
94
+
93
95
public void setSecondaryToolbarToggleVisibility (boolean value ) {
94
- String css ;
96
+ setVisibilityOf ("secondaryToolbarToggle" , value );
97
+
98
+ String js ;
95
99
if (value ){
100
+ js = new StringBuilder ()
101
+ .append ("var element = document.getElementsByClassName('verticalToolbarSeparator')[0];" )
102
+ .append ("element.style.display = 'inherit';" )
103
+ .append ("element.style.visibility = 'inherit';" )
104
+ .toString ();
105
+ } else {
106
+ js = new StringBuilder ()
107
+ .append ("var element = document.getElementsByClassName('verticalToolbarSeparator')[0];" )
108
+ .append ("element.style.display = 'none';" )
109
+ .append ("element.style.visibility = 'hidden';" )
110
+ .toString ();
111
+ }
112
+
113
+ try {
114
+ nodeValue .getEngine ().executeScript (js );
115
+ } catch (Exception ex ){
116
+ if (!pdfJsLoaded ) toExecuteWhenPDFJSLoaded += js ;
117
+ }
118
+ }
119
+
120
+ @ SuppressWarnings ("all" )
121
+ public void setVisibilityOf (String id , boolean value ){
122
+ String css ;
123
+ if (value ) {
96
124
css = new StringBuilder ()
97
- .append ("document.getElementById('secondaryToolbarToggle ').style.display = 'inherit';" )
98
- .append ("document.getElementById('secondaryToolbarToggle ').style.visibility = 'inherit';" )
125
+ .append ("document.getElementById('" + id + " ').style.display = 'inherit';" )
126
+ .append ("document.getElementById('" + id + " ').style.visibility = 'inherit';" )
99
127
.toString ();
100
128
} else {
101
129
css = new StringBuilder ()
102
- .append ("document.getElementById('secondaryToolbarToggle ').style.display = 'none';" )
103
- .append ("document.getElementById('secondaryToolbarToggle ').style.visibility = 'hidden';" )
130
+ .append ("document.getElementById('" + id + " ').style.display = 'none';" )
131
+ .append ("document.getElementById('" + id + " ').style.visibility = 'hidden';" )
104
132
.toString ();
105
133
}
106
134
107
135
try {
108
136
nodeValue .getEngine ().executeScript (css );
109
- } catch (Exception ex ){
137
+ } catch (Exception ex ) {
110
138
if (!pdfJsLoaded ) this .toExecuteWhenPDFJSLoaded += css ;
111
139
}
112
-
113
140
}
114
141
115
142
public void navigateByPage (int pageNum ) {
@@ -125,53 +152,64 @@ public void setProcessListener(ProcessListener listener) {
125
152
this .processListener = listener ;
126
153
}
127
154
155
+ public void executeScript (String js ) {
156
+ try {
157
+ this .nodeValue .getEngine ().executeScript (js );
158
+ } catch (Exception ex ) {
159
+ if (!pdfJsLoaded ) toExecuteWhenPDFJSLoaded += String .format ("%s;" , js );
160
+ }
161
+ }
162
+
128
163
private void updateProcessListener (boolean val ) {
129
164
if (processListener != null && pdfJsLoaded ) processListener .listen (val );
130
165
}
131
166
132
167
private WebView createWebView () {
133
168
WebView webView = new WebView ();
169
+ webView .setContextMenuEnabled (false );
170
+ webView .getStylesheets ().add ("/com/dansoftware/pdfdisplayer/base.css" );
171
+
134
172
WebEngine engine = webView .getEngine ();
135
173
String url = getClass ().getResource ("/pdfjs/web/viewer.html" ).toExternalForm ();
136
174
137
175
engine .setJavaScriptEnabled (true );
138
176
engine .load (url );
139
177
140
178
if (processListener != null ) processListener .listen (false );
179
+
180
+
141
181
engine .getLoadWorker ()
142
182
.stateProperty ()
143
- .addListener ((observable , oldValue , newValue ) -> {
144
- JSObject window = (JSObject ) engine .executeScript ("window" );
145
- window .setMember ("java" , new JSLogListener ());
146
- engine .executeScript ("console.log = function(message){ try {java.log(message);} catch(e) {} };" );
147
-
148
- if (newValue == Worker .State .SUCCEEDED ) {
149
- try {
150
- if (processListener != null ) processListener .listen (pdfJsLoaded = true );
151
-
152
- engine .executeScript (toExecuteWhenPDFJSLoaded );
153
- toExecuteWhenPDFJSLoaded = null ;
154
- } catch (Exception e ) {
155
- throw new RuntimeException (e );
156
- }
157
- }
158
- });
183
+ .addListener (
184
+ new ChangeListener <Worker .State >() {
185
+ @ Override
186
+ public void changed (ObservableValue <? extends Worker .State > observable , Worker .State oldValue , Worker .State newValue ) {
187
+ JSObject window = (JSObject ) engine .executeScript ("window" );
188
+ window .setMember ("java" , new JSLogListener ());
189
+ engine .executeScript ("console.log = function(message){ try {java.log(message);} catch(e) {} };" );
190
+
191
+ if (newValue == Worker .State .SUCCEEDED ) {
192
+ try {
193
+ if (processListener != null ) processListener .listen (pdfJsLoaded = true );
194
+
195
+ if (loadScript != null )
196
+ engine .executeScript (loadScript );
197
+
198
+ engine .executeScript (toExecuteWhenPDFJSLoaded );
199
+ toExecuteWhenPDFJSLoaded = null ;
200
+ observable .removeListener (this );
201
+ } catch (Exception e ) {
202
+ throw new RuntimeException (e );
203
+ }
204
+ }
205
+ }
206
+ });
159
207
160
208
return webView ;
161
209
162
210
}
163
211
164
- public ObservableList <String > getStylesSheets (){
165
- return nodeValue .getStylesheets ();
166
- }
167
212
168
- public void executeScript (String js ) {
169
- try {
170
- this .nodeValue .getEngine ().executeScript (js );
171
- } catch (Exception ex ) {
172
- if (!pdfJsLoaded ) toExecuteWhenPDFJSLoaded += String .format ("%s;" , js );
173
- }
174
- }
175
213
176
214
public Parent toNode () {
177
215
if (nodeValue == null )
0 commit comments