Merge branch 'lvab/affichagePages'

This commit is contained in:
LucasV-IUT
2021-12-06 20:38:59 +01:00
5 changed files with 142 additions and 45 deletions
+71 -14
View File
@@ -10,6 +10,7 @@ import lecteur_pdf.document.PDF;
import lecteur_pdf.menu.Menu;
import javax.swing.*;
import java.awt.*;
import java.io.File;
/**
@@ -27,7 +28,7 @@ public class Fenetre extends JFrame {
/**
* TODO
*/
private String titre;
private final String TITRE = "Lecteur PDF";
/**
* TODO
@@ -37,16 +38,28 @@ public class Fenetre extends JFrame {
/**
* TODO
*/
private PDF fichierPDF;
private File fichier;
private PDF documentPDF;
/**
* TODO
*/
public Fenetre() {
/* Change le style de la fenêtre */
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException
| IllegalAccessException | UnsupportedLookAndFeelException e) {
e.printStackTrace();
}
// Création du menu
menu = new Menu(this);
this.setTitle(TITRE);
// Ajout de la barre de menu au frame
this.setJMenuBar(menu);
@@ -62,24 +75,68 @@ public class Fenetre extends JFrame {
*
* @param fichier
*/
public void chargerPdf(File fichier) {
fichierPDF = new PDF(fichier);
public void chargerPDF(File fichier) {
dechargerPDF();
this.fichier = fichier;
/* Crée le panel qui contient le document PDF */
JPanel pdfPanel = new JPanel();
/* Crée l’élément scrollable */
JScrollPane scrollPane = new JScrollPane(fichierPDF);
scrollPane.setHorizontalScrollBarPolicy(
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPane.setVerticalScrollBarPolicy(
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
JScrollPane scrollPane = new JScrollPane(pdfPanel);
scrollPane.getVerticalScrollBar().setUnitIncrement(16);
this.add(scrollPane, BorderLayout.CENTER);
/* Supprime le précédent PDF */
this.getContentPane().removeAll();
documentPDF = new PDF(fichier);
pdfPanel.add(documentPDF);
/* Affiche le nouveau PDF */
scrollPane.setAlignmentX(JComponent.CENTER_ALIGNMENT);
this.getContentPane().add(scrollPane);
/* Ajoute le scrollPane et le centre dans la page */
/* Charge les pages */
documentPDF.loadPages();
/* Met à jour la page */
this.setTitle(TITRE + " | " + fichier.getName());
this.validate();
this.pack();
this.setLocationRelativeTo(null);
}
/**
*
*/
public void rechargerPDF() {
dechargerPDF();
/* Crée le panel qui contient le document PDF */
JPanel pdfPanel = new JPanel();
/* Crée l’élément scrollable */
JScrollPane scrollPane = new JScrollPane(pdfPanel);
scrollPane.getVerticalScrollBar().setUnitIncrement(16);
this.add(scrollPane, BorderLayout.CENTER);
documentPDF = new PDF(fichier);
pdfPanel.add(documentPDF);
/* Ajoute le scrollPane et le centre dans la page */
/* Charge les pages */
documentPDF.loadPages();
/* Met à jour la page */
this.setTitle(TITRE + " | " + fichier.getName());
this.validate();
this.pack();
this.setLocationRelativeTo(null);
}
/**
*
*/
public void dechargerPDF() {
if (this.getContentPane() != null) {
this.getContentPane().removeAll();
}
}
/**
+19 -11
View File
@@ -9,6 +9,7 @@ package lecteur_pdf.document;
import org.apache.pdfbox.pdmodel.PDDocument;
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.io.IOException;
@@ -37,6 +38,8 @@ public class PDF extends JPanel {
*/
private final Page[] pages;
private float zoom;
/**
* Crée un document PDF qui est capable d’être affiché dans une fenêtre
*
@@ -47,9 +50,10 @@ public class PDF extends JPanel {
try {
this.document = PDDocument.load(fichier);
this.pages = new Page[document.getNumberOfPages()];
this.zoom = 1.0f;
this.setLayout(new BoxLayout(this,BoxLayout.PAGE_AXIS));
this.loadPages();
this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
this.setAlignmentX(Component.CENTER_ALIGNMENT);
} catch (IOException e) {
throw new IllegalArgumentException();
}
@@ -58,19 +62,19 @@ public class PDF extends JPanel {
/**
* Charge toutes les pages du document PDF et les stocke dans le tableau
*/
private void loadPages() {
public void loadPages() {
try {
for (int i = 0; i < pages.length; i++) {
/* Crée un JLabel de la page */
pages[i] = new Page(document, i);
for (int i = 0; i < pages.length; i++) {
try {
pages[i] = new Page(document, i, zoom);
this.add(pages[i]);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("PDF: Loaded successfully");
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("PDF: Loaded successfully");
}
/**
@@ -79,4 +83,8 @@ public class PDF extends JPanel {
public int getNbPages() {
return document.getNumberOfPages();
}
public void setZoom(float zoom) {
this.zoom = zoom;
}
}
+50 -18
View File
@@ -7,7 +7,6 @@
package lecteur_pdf.document;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.ImageType;
import org.apache.pdfbox.rendering.PDFRenderer;
import javax.swing.*;
@@ -25,16 +24,21 @@ import java.io.IOException;
*/
public class Page extends JLabel {
/**
* Hauteur de la page
*/
/** Indice de la page dans le document */
private final int INDEX;
/** Zoom de la page (1.0f == 100 %, 0.5 == 50%, ...) */
private final float ZOOM;
/** Hauteur de la page */
private int hauteur;
/**
* Largeur de la page
*/
/** Largeur de la page */
private int largeur;
/** Image de la page générée */
private final ImageIcon IMAGE_ICON;
/**
* Crée une page virtuellement pour lafficher avec java swing
*
@@ -50,7 +54,36 @@ public class Page extends JLabel {
throw new IllegalArgumentException();
}
this.setIcon(generateImage(document, index));
this.INDEX = index;
this.ZOOM = 1.0f;
this.IMAGE_ICON = generateImage(document, ZOOM);
/* Render */
this.setIcon(IMAGE_ICON);
}
/**
* Crée une page virtuellement pour lafficher avec java swing
*
* @param document Document pdf
* @param index indice de la page
* @param zoom Le zoom de la page
* @throws IllegalArgumentException Si les arguments ne sont pas valides
* @throws IOException Si la page nas pas pu être lue
*/
public Page(PDDocument document, int index, float zoom) throws
IllegalArgumentException,
IOException {
if (!isValid(document, index)) {
throw new IllegalArgumentException();
}
this.INDEX = index;
this.ZOOM = zoom;
this.IMAGE_ICON = generateImage(document, ZOOM);
/* Render */
this.setIcon(IMAGE_ICON);
}
/**
@@ -74,20 +107,19 @@ public class Page extends JLabel {
* @return JLabel contenant la page sous forme dimage
* @throws IOException En cas derreur de lecture
*/
private ImageIcon generateImage(PDDocument document, int index) throws IOException {
private ImageIcon generateImage(PDDocument document, float scale) throws IOException {
final int DPI = 120;
int imageScale = (scale > 1.0f) ? Image.SCALE_SMOOTH : Image.SCALE_FAST;
PDFRenderer pdfRenderer = new PDFRenderer(document);
BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(index,
300,
ImageType.RGB);
BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(INDEX, DPI);
this.largeur = bufferedImage.getWidth() / 2;
this.hauteur = bufferedImage.getHeight() / 2;
this.largeur = (int)(bufferedImage.getWidth() * scale);
this.hauteur = (int)(bufferedImage.getHeight() * scale);
final ImageIcon imageIcon = new ImageIcon(
bufferedImage.getScaledInstance(largeur, hauteur,
Image.SCALE_SMOOTH));
return imageIcon;
return new ImageIcon(bufferedImage.getScaledInstance(largeur, hauteur,
imageScale));
}
/**
+1 -1
View File
@@ -102,7 +102,7 @@ public class Menu extends JMenuBar {
switch (choice) {
case "Ouvrir" -> {
File fichier = SelectionnerFichier.ouvrirFichier();
fenetre.chargerPdf(fichier);
fenetre.chargerPDF(fichier);
}
case "Fermer" -> System.exit(
0); // TODO à changer pour que ça quitte vraiment
+1 -1
View File
@@ -28,7 +28,7 @@ class PageTest {
Page page = new Page(document, 0);
/* Ajout de lobjet dans la frame et mise à jour de la frame */
frame.add(page);
// frame.add(page);
frame.validate();
}
}