import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.StackPane; import javafx.stage.Stage; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.rendering.PDFRenderer; import java.awt.image.BufferedImage; public class PdfViewer extends Application @Override public void start(Stage stage) throws Exception try (PDDocument doc = PDDocument.load(new java.io.File("document.pdf"))) PDFRenderer renderer = new PDFRenderer(doc); BufferedImage bufferedImage = renderer.renderImage(0); // Page 0 Image fxImage = convertToFxImage(bufferedImage); ImageView imageView = new ImageView(fxImage);
private void showPage(int page) throws Exception BufferedImage bim = renderer.renderImage(page); Image fxImage = SwingFXUtils.toFXImage(bim, null); imageView.setImage(fxImage); javafx pdf
JavaFX does not have a built-in PDF viewer or generator. You must use third-party libraries. 1. Display a PDF in JavaFX (Viewer) Best Option: Apache PDFBox + JavaFX Canvas/ImageView PDFBox renders PDF pages as Java BufferedImage , which you convert to JavaFX Image . import javafx
Use Apache PDFBox for both viewing and generating in JavaFX (pure open source, no license restrictions). 5. Complete Hybrid Example (View + Page Navigation) public class PdfViewerWithControls extends Application private PDDocument document; private PDFRenderer renderer; private int currentPage = 0; private ImageView imageView; @Override public void start(Stage stage) throws Exception document = PDDocument.load(new File("sample.pdf")); renderer = new PDFRenderer(document); imageView = new ImageView(); Button prev = new Button("◀ Prev"); Button next = new Button("Next ▶"); prev.setOnAction(e -> if (currentPage > 0) showPage(--currentPage); ); next.setOnAction(e -> if (currentPage < document.getNumberOfPages()-1) showPage(++currentPage); ); showPage(0); VBox root = new VBox(10, new HBox(10, prev, next), new ScrollPane(imageView)); stage.setScene(new Scene(root, 800, 600)); stage.show(); Display a PDF in JavaFX (Viewer) Best Option:
Scene scene = new Scene(new StackPane(imageView), 800, 600); stage.setScene(scene); stage.show();