mirror of
https://github.com/LucasVbr/LecteurPdfDoubleAffichage.git
synced 2026-07-09 12:47:45 +00:00
Test d'affichage PDF
-> Fonctionnel (voir PDFTest.java)
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
|
||||
package lecteur_pdf.affichage;
|
||||
|
||||
import lecteur_pdf.document.Pdf;
|
||||
import lecteur_pdf.document.PDF;
|
||||
import lecteur_pdf.menu.Menu;
|
||||
import javax.swing.*;
|
||||
|
||||
@@ -24,7 +24,7 @@ public class Fenetre {
|
||||
private JFrame frame;
|
||||
private String titre ;
|
||||
private Menu menu = new Menu();
|
||||
private Pdf pdf ;
|
||||
private PDF pdf ;
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -6,14 +6,8 @@
|
||||
|
||||
package lecteur_pdf.affichage;
|
||||
|
||||
import lecteur_pdf.document.Pdf;
|
||||
import lecteur_pdf.menu.Menu;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import static lecteur_pdf.menu.SelectionnerFichier.ouvrirFichier;
|
||||
|
||||
/**
|
||||
* classe de gestion des fenêtres
|
||||
*
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Pdf, 17/11/2021
|
||||
* PDF, 17/11/2021
|
||||
* IUT Rodez 2021, INFO2
|
||||
* pas de copyright, aucun droits
|
||||
*/
|
||||
@@ -11,7 +11,6 @@ import org.apache.pdfbox.pdmodel.PDDocument;
|
||||
import javax.swing.*;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Définis virtuellement un fichier PDF
|
||||
@@ -21,7 +20,7 @@ import java.util.ArrayList;
|
||||
* @author Lucàs VABRE
|
||||
* @author Noé VILLENEUVE
|
||||
*/
|
||||
public class Pdf {
|
||||
public class PDF extends JPanel {
|
||||
|
||||
/**
|
||||
* Espacement entre chaque page
|
||||
@@ -34,16 +33,9 @@ public class Pdf {
|
||||
private final PDDocument document;
|
||||
|
||||
/**
|
||||
* Le nombre de pages du document PDF
|
||||
* Les pages du PDF sous forme de JLabel contenant des images
|
||||
*/
|
||||
private int nbPages;
|
||||
|
||||
/**
|
||||
* Les pages du PDF sous forme d’images
|
||||
*/
|
||||
private final ArrayList<Page> pages;
|
||||
|
||||
private int currentPositionY;
|
||||
private final Page[] pages;
|
||||
|
||||
/**
|
||||
* Crée un document PDF qui est capable d’être affiché dans une fenêtre
|
||||
@@ -51,62 +43,46 @@ public class Pdf {
|
||||
* @param fichier Le fichier PDF que l’on veut ouvrir
|
||||
* @throws IllegalArgumentException si le fichier n’existe pas
|
||||
*/
|
||||
public Pdf(File fichier) throws IOException {
|
||||
public PDF(File fichier) throws IOException {
|
||||
if (!fichier.exists()) {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
|
||||
this.pages = new ArrayList<>();
|
||||
this.document = PDDocument.load(fichier);
|
||||
this.nbPages = 0;
|
||||
// this.container = new JPanel();
|
||||
|
||||
this.currentPositionY = 0;
|
||||
this.document = PDDocument.load(fichier);
|
||||
this.pages = new Page[document.getNumberOfPages()];
|
||||
|
||||
this.loadPages();
|
||||
}
|
||||
|
||||
/**
|
||||
* Charge toutes les pages du document PDF et les stocke dans la liste
|
||||
* Charge toutes les pages du document PDF et les stocke dans le tableau
|
||||
*/
|
||||
private void loadPages() {
|
||||
for (nbPages = 0; nbPages < document.getNumberOfPages(); nbPages++) {
|
||||
int currentPositionY = 0;
|
||||
|
||||
for (int i = 0; i < pages.length; i++) {
|
||||
try {
|
||||
addPage(new Page(document, nbPages));
|
||||
/* Crée un JLabel de la page */
|
||||
pages[i] = new Page(document, i);
|
||||
|
||||
/* Défini sa position dans le panel et l’ajoute au panel */
|
||||
pages[i].setLocation(0, currentPositionY);
|
||||
System.out.println(pages[i].getLocation());
|
||||
currentPositionY += (pages[i].getHauteur() + OFFSET_PAGES);
|
||||
this.add(pages[i]);
|
||||
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Ajoute une page dans la liste
|
||||
*
|
||||
* @param page Page à ajouter dans la liste
|
||||
*/
|
||||
private void addPage(Page page) {
|
||||
pages.add(page);
|
||||
page.setPosition(0, currentPositionY);
|
||||
currentPositionY += (page.getHauteur() + OFFSET_PAGES);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return un panel scrollable contenant toutes les pages du PDF
|
||||
*/
|
||||
public JScrollPane getRenderView() {
|
||||
JPanel panel = new JPanel();
|
||||
JScrollPane scrollPane = new JScrollPane(panel);
|
||||
|
||||
for (Page page : pages) {
|
||||
panel.add(page.getImage());
|
||||
}
|
||||
|
||||
return scrollPane;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Le nombre de pages chargées
|
||||
*/
|
||||
public int getNbPages() {
|
||||
return nbPages;
|
||||
return document.getNumberOfPages();
|
||||
}
|
||||
}
|
||||
@@ -23,17 +23,7 @@ import java.io.IOException;
|
||||
* @author Lucàs VABRE
|
||||
* @author Noé VILLENEUVE
|
||||
*/
|
||||
public class Page {
|
||||
|
||||
/**
|
||||
* Indice de la page
|
||||
*/
|
||||
private final int index;
|
||||
|
||||
/**
|
||||
* Label contenant l’image de la page
|
||||
*/
|
||||
private final JLabel image;
|
||||
public class Page extends JLabel {
|
||||
|
||||
/**
|
||||
* Hauteur de la page
|
||||
@@ -45,16 +35,6 @@ public class Page {
|
||||
*/
|
||||
private int largeur;
|
||||
|
||||
/**
|
||||
* Position X de la page dans son panel
|
||||
*/
|
||||
private int positionX;
|
||||
|
||||
/**
|
||||
* Position Y de la page dans son panel
|
||||
*/
|
||||
private int positionY;
|
||||
|
||||
/**
|
||||
* Crée une page virtuellement pour l’afficher avec java swing
|
||||
*
|
||||
@@ -70,11 +50,7 @@ public class Page {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
|
||||
this.index = index;
|
||||
this.image = generateImage(document);
|
||||
|
||||
positionX = 0;
|
||||
positionY = 0;
|
||||
this.setIcon(generateImage(document, index));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -98,44 +74,22 @@ public class Page {
|
||||
* @return JLabel contenant la page sous forme d’image
|
||||
* @throws IOException En cas d’erreur de lecture
|
||||
*/
|
||||
private JLabel generateImage(PDDocument document) throws IOException {
|
||||
private ImageIcon generateImage(PDDocument document, int index) throws IOException {
|
||||
|
||||
PDFRenderer pdfRenderer = new PDFRenderer(document);
|
||||
BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(this.index,
|
||||
BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(index,
|
||||
300,
|
||||
ImageType.RGB);
|
||||
|
||||
this.largeur = bufferedImage.getWidth();
|
||||
this.hauteur = bufferedImage.getHeight();
|
||||
this.largeur = bufferedImage.getWidth() / 2;
|
||||
this.hauteur = bufferedImage.getHeight() / 2;
|
||||
|
||||
ImageIcon icon = new ImageIcon(
|
||||
System.out.println(largeur + "x" + hauteur);
|
||||
|
||||
final ImageIcon imageIcon = new ImageIcon(
|
||||
bufferedImage.getScaledInstance(largeur, hauteur,
|
||||
Image.SCALE_SMOOTH));
|
||||
|
||||
JLabel result = new JLabel("", SwingConstants.LEADING);
|
||||
result.setIcon(icon);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Positionne la page dans son Panel
|
||||
*
|
||||
* @param positionX Position X de la page
|
||||
* @param positionY Position Y de la page
|
||||
*/
|
||||
public void setPosition(int positionX, int positionY) {
|
||||
this.positionX = positionX;
|
||||
this.positionY = positionY;
|
||||
|
||||
image.setLocation(positionX, positionY);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Le label contenant l’image de la page
|
||||
*/
|
||||
public JLabel getImage() {
|
||||
return image;
|
||||
return imageIcon;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -10,7 +10,6 @@ import javax.swing.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import lecteur_pdf.document.Pdf;
|
||||
|
||||
/**
|
||||
* Classe pour afficher le Menu "Fichier" avec ses options
|
||||
|
||||
Reference in New Issue
Block a user