mirror of
https://github.com/LucasVbr/LecteurPdfDoubleAffichage.git
synced 2026-07-09 12:47:45 +00:00
Merge branch 'lvab/affichagePages'
This commit is contained in:
@@ -10,6 +10,7 @@ import lecteur_pdf.document.PDF;
|
|||||||
import lecteur_pdf.menu.Menu;
|
import lecteur_pdf.menu.Menu;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -27,7 +28,7 @@ public class Fenetre extends JFrame {
|
|||||||
/**
|
/**
|
||||||
* TODO
|
* TODO
|
||||||
*/
|
*/
|
||||||
private String titre;
|
private final String TITRE = "Lecteur PDF";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO
|
* TODO
|
||||||
@@ -37,16 +38,28 @@ public class Fenetre extends JFrame {
|
|||||||
/**
|
/**
|
||||||
* TODO
|
* TODO
|
||||||
*/
|
*/
|
||||||
private PDF fichierPDF;
|
private File fichier;
|
||||||
|
|
||||||
|
private PDF documentPDF;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO
|
* TODO
|
||||||
*/
|
*/
|
||||||
public Fenetre() {
|
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
|
// Création du menu
|
||||||
menu = new Menu(this);
|
menu = new Menu(this);
|
||||||
|
|
||||||
|
this.setTitle(TITRE);
|
||||||
|
|
||||||
// Ajout de la barre de menu au frame
|
// Ajout de la barre de menu au frame
|
||||||
|
|
||||||
this.setJMenuBar(menu);
|
this.setJMenuBar(menu);
|
||||||
@@ -62,24 +75,68 @@ public class Fenetre extends JFrame {
|
|||||||
*
|
*
|
||||||
* @param fichier
|
* @param fichier
|
||||||
*/
|
*/
|
||||||
public void chargerPdf(File fichier) {
|
public void chargerPDF(File fichier) {
|
||||||
fichierPDF = new PDF(fichier);
|
dechargerPDF();
|
||||||
|
|
||||||
|
this.fichier = fichier;
|
||||||
|
|
||||||
|
/* Crée le panel qui contient le document PDF */
|
||||||
|
JPanel pdfPanel = new JPanel();
|
||||||
/* Crée l’élément scrollable */
|
/* Crée l’élément scrollable */
|
||||||
JScrollPane scrollPane = new JScrollPane(fichierPDF);
|
JScrollPane scrollPane = new JScrollPane(pdfPanel);
|
||||||
scrollPane.setHorizontalScrollBarPolicy(
|
|
||||||
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
|
|
||||||
scrollPane.setVerticalScrollBarPolicy(
|
|
||||||
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
|
|
||||||
scrollPane.getVerticalScrollBar().setUnitIncrement(16);
|
scrollPane.getVerticalScrollBar().setUnitIncrement(16);
|
||||||
|
this.add(scrollPane, BorderLayout.CENTER);
|
||||||
|
|
||||||
/* Supprime le précédent PDF */
|
documentPDF = new PDF(fichier);
|
||||||
this.getContentPane().removeAll();
|
pdfPanel.add(documentPDF);
|
||||||
|
|
||||||
/* Affiche le nouveau PDF */
|
/* Ajoute le scrollPane et le centre dans la page */
|
||||||
scrollPane.setAlignmentX(JComponent.CENTER_ALIGNMENT);
|
|
||||||
this.getContentPane().add(scrollPane);
|
/* Charge les pages */
|
||||||
|
documentPDF.loadPages();
|
||||||
|
|
||||||
|
/* Met à jour la page */
|
||||||
|
this.setTitle(TITRE + " | " + fichier.getName());
|
||||||
this.validate();
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ package lecteur_pdf.document;
|
|||||||
import org.apache.pdfbox.pdmodel.PDDocument;
|
import org.apache.pdfbox.pdmodel.PDDocument;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
@@ -37,6 +38,8 @@ public class PDF extends JPanel {
|
|||||||
*/
|
*/
|
||||||
private final Page[] pages;
|
private final Page[] pages;
|
||||||
|
|
||||||
|
private float zoom;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Crée un document PDF qui est capable d’être affiché dans une fenêtre
|
* 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 {
|
try {
|
||||||
this.document = PDDocument.load(fichier);
|
this.document = PDDocument.load(fichier);
|
||||||
this.pages = new Page[document.getNumberOfPages()];
|
this.pages = new Page[document.getNumberOfPages()];
|
||||||
|
this.zoom = 1.0f;
|
||||||
|
|
||||||
this.setLayout(new BoxLayout(this,BoxLayout.PAGE_AXIS));
|
this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
|
||||||
this.loadPages();
|
this.setAlignmentX(Component.CENTER_ALIGNMENT);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new IllegalArgumentException();
|
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
|
* 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++) {
|
for (int i = 0; i < pages.length; i++) {
|
||||||
/* Crée un JLabel de la page */
|
try {
|
||||||
pages[i] = new Page(document, i);
|
pages[i] = new Page(document, i, zoom);
|
||||||
this.add(pages[i]);
|
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() {
|
public int getNbPages() {
|
||||||
return document.getNumberOfPages();
|
return document.getNumberOfPages();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setZoom(float zoom) {
|
||||||
|
this.zoom = zoom;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
package lecteur_pdf.document;
|
package lecteur_pdf.document;
|
||||||
|
|
||||||
import org.apache.pdfbox.pdmodel.PDDocument;
|
import org.apache.pdfbox.pdmodel.PDDocument;
|
||||||
import org.apache.pdfbox.rendering.ImageType;
|
|
||||||
import org.apache.pdfbox.rendering.PDFRenderer;
|
import org.apache.pdfbox.rendering.PDFRenderer;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
@@ -25,16 +24,21 @@ import java.io.IOException;
|
|||||||
*/
|
*/
|
||||||
public class Page extends JLabel {
|
public class Page extends JLabel {
|
||||||
|
|
||||||
/**
|
/** Indice de la page dans le document */
|
||||||
* Hauteur de la page
|
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;
|
private int hauteur;
|
||||||
|
|
||||||
/**
|
/** Largeur de la page */
|
||||||
* Largeur de la page
|
|
||||||
*/
|
|
||||||
private int largeur;
|
private int largeur;
|
||||||
|
|
||||||
|
/** Image de la page générée */
|
||||||
|
private final ImageIcon IMAGE_ICON;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Crée une page virtuellement pour l’afficher avec java swing
|
* Crée une page virtuellement pour l’afficher avec java swing
|
||||||
*
|
*
|
||||||
@@ -50,7 +54,36 @@ public class Page extends JLabel {
|
|||||||
throw new IllegalArgumentException();
|
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 l’afficher 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 n’as 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 d’image
|
* @return JLabel contenant la page sous forme d’image
|
||||||
* @throws IOException En cas d’erreur de lecture
|
* @throws IOException En cas d’erreur 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);
|
PDFRenderer pdfRenderer = new PDFRenderer(document);
|
||||||
BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(index,
|
BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(INDEX, DPI);
|
||||||
300,
|
|
||||||
ImageType.RGB);
|
|
||||||
|
|
||||||
this.largeur = bufferedImage.getWidth() / 2;
|
this.largeur = (int)(bufferedImage.getWidth() * scale);
|
||||||
this.hauteur = bufferedImage.getHeight() / 2;
|
this.hauteur = (int)(bufferedImage.getHeight() * scale);
|
||||||
|
|
||||||
final ImageIcon imageIcon = new ImageIcon(
|
return new ImageIcon(bufferedImage.getScaledInstance(largeur, hauteur,
|
||||||
bufferedImage.getScaledInstance(largeur, hauteur,
|
imageScale));
|
||||||
Image.SCALE_SMOOTH));
|
|
||||||
return imageIcon;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ public class Menu extends JMenuBar {
|
|||||||
switch (choice) {
|
switch (choice) {
|
||||||
case "Ouvrir" -> {
|
case "Ouvrir" -> {
|
||||||
File fichier = SelectionnerFichier.ouvrirFichier();
|
File fichier = SelectionnerFichier.ouvrirFichier();
|
||||||
fenetre.chargerPdf(fichier);
|
fenetre.chargerPDF(fichier);
|
||||||
}
|
}
|
||||||
case "Fermer" -> System.exit(
|
case "Fermer" -> System.exit(
|
||||||
0); // TODO à changer pour que ça quitte vraiment
|
0); // TODO à changer pour que ça quitte vraiment
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ class PageTest {
|
|||||||
Page page = new Page(document, 0);
|
Page page = new Page(document, 0);
|
||||||
|
|
||||||
/* Ajout de l’objet dans la frame et mise à jour de la frame */
|
/* Ajout de l’objet dans la frame et mise à jour de la frame */
|
||||||
frame.add(page);
|
// frame.add(page);
|
||||||
frame.validate();
|
frame.validate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user