Bonjour
J'ai un outil de lecture de fichier pdf développé en utilisant apache pdfbox, mon problème est que la page pdf devient floue si je zoom, sachant que la résolution est top, le problème c'est ce code fonctionne parfaitement avec des image tel que jpeg png etc.. mais avec les fichier pdf c la catastrophe, je vous en serai très reconnaissant si quels'un pourrai m'aider avec un affichage correct après le zoom
Controller.java
Pdfmodel.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110 package application; import java.nio.file.Paths; import javafx.beans.InvalidationListener; import javafx.beans.Observable; import javafx.beans.property.DoubleProperty; import javafx.beans.property.SimpleDoubleProperty; import javafx.fxml.FXML; import javafx.scene.control.ScrollPane; import javafx.scene.control.ScrollPane.ScrollBarPolicy; import javafx.scene.image.ImageView; import javafx.scene.layout.VBox; public class Controller { String imagePath = "C:\\Users\\piratack007\\Desktop\\1.jpg"; private ImageView imageView = new ImageView(); String path="C:\\Users\\piratack007\\Desktop\\file.pdf"; private PdfModel model= new PdfModel(Paths.get(path)); private ScrollPane scrollPane = new ScrollPane(); private DoubleProperty zoom = new SimpleDoubleProperty(1.1); private PageDimensions currentPageDimensions ; @FXML private VBox vbox; String cssLayout = "-fx-border-color: red;\n" + "-fx-border-insets: 5;\n" + "-fx-border-width: 3;\n" + "-fx-border-style: dashed;\n"; String scrollCssLayout= "-fx-border-color: green;\n" + "-fx-border-insets: 5;\n" + "-fx-border-width: 3;\n" + "-fx-border-style: dashed;\n"+ //Ne pas afficher le petit trait gris "-fx-background-color:transparent"; public void initialize() { afficheImage(); } void afficheImage() { /*try { imageView = new ImageView(new Image(new FileInputStream(imagePath))); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }*/ imageView = new ImageView(model.getImage(0)); System.out.print("1-imageView.getFitHeight(): "+imageView.getImage().getHeight()+"\n"); System.out.print("imageView.getFitWidth(): "+imageView.getImage().getWidth()+"\n"); currentPageDimensions = new PageDimensions(imageView.getImage().getWidth(), imageView.getImage().getHeight()); zoom.addListener(new InvalidationListener() { @Override public void invalidated(Observable arg0) { int width = (int) (imageView.getImage().getWidth() * zoom.get()); int height = (int) (imageView.getImage().getHeight() * zoom.get()); imageView.setFitWidth(width); System.out.print("Largeur: "+ (width) +"px\n"); imageView.setFitHeight(height); System.out.print("Hauteur: "+ height +"px\n"); } }); imageView.preserveRatioProperty().set(true); scrollPane.setPannable(true); scrollPane.setStyle(scrollCssLayout); scrollPane.setVbarPolicy(ScrollBarPolicy.AS_NEEDED); scrollPane.setHbarPolicy(ScrollBarPolicy.AS_NEEDED); scrollPane.setContent(imageView); vbox.setStyle(cssLayout); vbox.getChildren().add(scrollPane); } @FXML private void zoomIn() { zoom.set(zoom.get()*1.1); // System.out.print("zoom.get(): "+zoom.get()*100 +"%\n"); } @FXML private void zoomOut() { zoom.set(zoom.get()/1.1); // System.out.print("zoom.get(): "+zoom.get()*100 +"%\n"); } @FXML private void zoomFit() { } @FXML private void zoomWidth() { } private class PageDimensions { private double width ; private double height ; PageDimensions(double width, double height) { this.width = width ; this.height = height ; } @Override public String toString() { return String.format("[%.1f, %.1f]", width, height); } } }
Main.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76 package application; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.UncheckedIOException; import java.nio.file.Path; import javafx.embed.swing.SwingFXUtils; import javafx.scene.image.Image; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.common.PDRectangle; import org.apache.pdfbox.rendering.PDFRenderer; /** * @author toru */ class PdfModel { //private static final Logger logger = Logger.getLogger(PdfModel.class.getName()); private PDDocument document; private PDFRenderer renderer; Path chemin; PdfModel() { } PdfModel(Path path) { try { chemin=path; document = PDDocument.load(path.toFile()); renderer = new PDFRenderer(document); } catch (IOException ex) { throw new UncheckedIOException("PDDocument thorws IOException file=" + path, ex); } } int nombreDePages() { return document.getPages().getCount(); } PDPage getPage (int num) { PDPage page = document.getPage(num); return page; } void fermer() { try { document.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } void setPath(Path pPays) { chemin = pPays; System.out.println("On est dans la page pdfmodel"); System.out.println("Path: "+pPays); } Image getImage(int pageNumber) { BufferedImage pageImage; try { pageImage = renderer.renderImage(pageNumber); } catch (IOException ex) { throw new UncheckedIOException("PDFRenderer throws IOException", ex); } return SwingFXUtils.toFXImage(pageImage, null); } }
ui.fxml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package application; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; /** *@author toru */ public class Main extends Application { @Override public void start(Stage primaryStage) throws Exception { final Parent parent = FXMLLoader.load(getClass().getResource("ui.fxml")); primaryStage.setTitle("Zoom ImageView Demo "); primaryStage.setScene(new Scene(parent,800, 600)); primaryStage.show(); } public static void main(String[] args) { launch(args); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 <?xml version="1.0" encoding="UTF-8"?> <?import javafx.geometry.Insets?> <?import javafx.scene.control.Button?> <?import javafx.scene.layout.BorderPane?> <?import javafx.scene.layout.HBox?> <?import javafx.scene.layout.VBox?> <BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="10.0" minWidth="10.0" prefHeight="400.0" prefWidth="400.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.Controller"> <bottom> <HBox prefHeight="50.0" prefWidth="400.0" BorderPane.alignment="CENTER"> <children> <Button mnemonicParsing="false" onAction="#zoomIn" text="+"> <HBox.margin> <Insets left="5.0" top="5.0" /> </HBox.margin> </Button> <Button mnemonicParsing="false" onAction="#zoomOut" text="-"> <HBox.margin> <Insets left="5.0" top="5.0" /> </HBox.margin> </Button> <Button mnemonicParsing="false" onAction="#zoomFit" text="ZoomFit"> <HBox.margin> <Insets left="5.0" top="5.0" /> </HBox.margin> </Button> <Button mnemonicParsing="false" onAction="#zoomWidth" text="ZoomWidth"> <HBox.margin> <Insets left="5.0" top="5.0" /> </HBox.margin> </Button> </children> </HBox> </bottom> <center> <VBox fx:id="vbox" prefHeight="350.0" prefWidth="400.0" BorderPane.alignment="CENTER" /> </center> </BorderPane>
Partager