Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
JavaFx PDF in einem Element in einem Fenster anzeigen.
Ich würde gerne in einem Element innerhalb eines Forms ein PDF anzeigen.
Dazu muss man scrollen und vergrößern/verkleinern können. Andere Funktionen würde ich nicht brauchen.
Ich habe schon gegoogle aber bin mir bei all den Vorschlägen nicht sicher ob ich den Viewer wie ein Element verwenden kann.
Wäre super wenn mir jemand sagen könnte ob das überhaupt möglich ist und vielleicht wo ich mich da einlesen könnte.
Developing a desktop application in JavaFX which requires to display a pdf. I read that there is no support for pdf viewing/displaying in JavaFX(current version), I read about JPedal too. Now,
@yfons123Das scheint mir ein viewer in einem eigenen Fenster zu sein,
oder habe ich da was falsch verstanden.
WebViewer benötigt ganz schön viel.
Ich habe folgendes gefunden, bin aber nicht sicher ob das geht.
Wenn ich das richtig verstanden habe benötige ich da nur ein ImageView,
also kein javafx.web
Wenn ich das umbaue mit einem Scrollpane und das Imageview entsprechend vergrößere sollte das gehen.
Könnte bitte einer mal drauf schauen ob ich da in etwa richtig liege.
also das github repo hat ganze 3 klassen.. wenn du in die klasse rein schaust dann siehst du dass der da auch eine webview hergenommen hat, das untere ist nur ein beispiel was man damit machen kann
INFORMATION: --> VTIDXCLA 01-000001 - --> VTIDXCLA 01-000001 - Language is set : strings_de_DE
netscape.javascript.JSException: TypeError: undefined is not a function
at javafx.web@18/com.sun.webkit.dom.JSObject.fwkMakeException(JSObject.java:160)
at javafx.web@18/com.sun.webkit.WebPage.twkExecuteScript(Native Method)
at javafx.web@18/com.sun.webkit.WebPage.executeScript(WebPage.java:1562)
at javafx.web@18/javafx.scene.web.WebEngine.executeScript(WebEngine.java:985)
at VTDESKTOP/org.joobsoft.vt.PVA00000.Controller.You.testwebviewController.lambda$injecttestwebviewController$0(testwebviewController.java:63)
at javafx.base@18/com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:181)
at javafx.base@18/com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:80)
at javafx.base@18/javafx.beans.property.ReadOnlyObjectPropertyBase.fireValueChangedEvent(ReadOnlyObjectPropertyBase.java:80)
at javafx.base@18/javafx.beans.property.ReadOnlyObjectWrapper.fireValueChangedEvent(ReadOnlyObjectWrapper.java:102)
at javafx.base@18/javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:113)
at javafx.base@18/javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:147)
at javafx.web@18/javafx.scene.web.WebEngine$LoadWorker.updateState(WebEngine.java:1264)
at javafx.web@18/javafx.scene.web.WebEngine$LoadWorker.dispatchLoadEvent(WebEngine.java:1379)
at javafx.web@18/javafx.scene.web.WebEngine$PageLoadListener.dispatchLoadEvent(WebEngine.java:1244)
at javafx.web@18/com.sun.webkit.WebPage.fireLoadEvent(WebPage.java:2563)
at javafx.web@18/com.sun.webkit.WebPage.fwkFireLoadEvent(WebPage.java:2407)
at javafx.web@18/com.sun.webkit.MainThread.twkScheduleDispatchFunctions(Native Method)
at javafx.web@18/com.sun.webkit.MainThread.lambda$fwkScheduleDispatchFunctions$0(MainThread.java:35)
at javafx.graphics@18/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:457)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at javafx.graphics@18/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:456)
at javafx.graphics@18/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
at javafx.graphics@18/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics@18/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:184)
at java.base/java.lang.Thread.run(Thread.java:833)
Nachdem ich das immer wieder gegoogled habe und nie etwas hilfreiches gefunden habe, habe ich mir die Seite durchgelesen.
Edit : This article has been updated to be compliant with PDF.js version 2.8.335. For Java 8 and at least 11 you need to use the “Prebuilt (for older browsers)” version of PDFJS because…
blog.samirhadzic.com
Der will das man das pdf.js ins Resourcenverzeichnis extrahiert.
Ich hatte das in Gradel eingebunden.
Code:
// Pdf Viewer - possible clean and build required
implementation 'org.webjars:pdf-js:2.13.216'
// implementation 'org.apache.commons:commons-lang3:3.0'
implementation 'commons-io:commons-io:2.11.0'
Wie macht man das richtig, und woher weiß java wo es die Funktion in js finden kann.
Ich bin im Moment der Meinung das Java die Funktion nicht findet,
zumal ich nachgesehen (debug) habe das bytes die Daten enhält, bei base64 ist das ja nicht möglich.
Schönen Dank für deinen Vorschlag.
Aber ich habe, nachdem ich gesehen habe was für ein PDF View notwendig ist,
einen anderen Weg gefunden der für meine Anwendung gut ist.
Ich verwende weiterhin ein Imageview, packe es aber in eine Scrollpane und gebe die Möglichkeit das Image in Orginalgröße zu sehen.
Schönen Dank für deinen Vorschlag.
Aber ich habe, nachdem ich gesehen habe was für ein PDF View notwendig ist,
einen anderen Weg gefunden der für meine Anwendung gut ist.
Ich verwende weiterhin ein Imageview, packe es aber in eine Scrollpane und gebe die Möglichkeit das Image in Orginalgröße zu sehen.
Nein, für meinen Anwendungsfall reicht eine Grafik.
Ich hatte gedacht das ich mit dem PDF einen Mehrwert schaffe, das ist aber nicht der Fall.
Also bleibe ich bei Grafiken, ich habe nicht die Notwendigkeit PDFs in Images umzusetzen.
Allerdings habe ich bei meinen Experimenten einige Plugins gesehen die das können sollen.
Auch das Pagination Element von Fx ist ggf. eine ganz gute Lösung wenn du mehrere Seiten hast.
Aber wie gesagt für mich nicht notwendig und es macht für meinen Fall alles unnötig kompliziert.