From 68bae635da2a9d47adb006ac455573dbdb4b18dd Mon Sep 17 00:00:00 2001 From: leofranch <73280990+leofranch@users.noreply.github.com> Date: Mon, 22 Nov 2021 21:29:17 +0100 Subject: [PATCH 1/3] =?UTF-8?q?cr=C3=A9ation=20des=20classes=20et=20implem?= =?UTF-8?q?entation=20de=20base?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lecteur_pdf/affichage/Fenetre.java | 40 +++++++++++++++++++ src/lecteur_pdf/affichage/gestionFenetre.java | 33 +++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 src/lecteur_pdf/affichage/Fenetre.java create mode 100644 src/lecteur_pdf/affichage/gestionFenetre.java diff --git a/src/lecteur_pdf/affichage/Fenetre.java b/src/lecteur_pdf/affichage/Fenetre.java new file mode 100644 index 0000000..a687e5a --- /dev/null +++ b/src/lecteur_pdf/affichage/Fenetre.java @@ -0,0 +1,40 @@ +/* + * Fenetre, 22/11/2021 + * IUT Rodez 2021, INFO2 + * pas de copyright, aucun droits + */ + +package lecteur_pdf.affichage; + +import lecteur_pdf.document.Pdf; +import lecteur_pdf.menu.Menu; + +import javax.swing.*; + +/** + * Définis virtuellement un fichier PDF + * + * @author Léo FRANCH + * @author Tristan NOGARET + * @author Lucàs VABRE + * @author Noé VILLENEUVE + * @version 1.0 + */ + +public class Fenetre extends javax.swing.JFrame { + private JFrame frame ; + private String titre ; + private Menu menu ; + private Pdf pdf ; + + + public Fenetre() { + frame = new JFrame( "sans titre" ); + + } + + public Fenetre(String titre) { + frame = new JFrame( titre ); + } + +} diff --git a/src/lecteur_pdf/affichage/gestionFenetre.java b/src/lecteur_pdf/affichage/gestionFenetre.java new file mode 100644 index 0000000..085a8b9 --- /dev/null +++ b/src/lecteur_pdf/affichage/gestionFenetre.java @@ -0,0 +1,33 @@ +/* + * gestionFenetre, 22/11/2021 + * IUT Rodez 2021, INFO2 + * pas de copyright, aucun droits + */ + +package lecteur_pdf.affichage; + +import java.util.ArrayList; + +/** + * Définis virtuellement un fichier PDF + * + * @author Léo FRANCH + * @author Tristan NOGARET + * @author Lucàs VABRE + * @author Noé VILLENEUVE + * @version 1.0 + */ +public class gestionFenetre { + + + final int NB_MAX_FENETRE = 2 ; + private ArrayList fenetresOuvertes; + + + public void ouvrirFenetre(){ + + } + public void fermerFenetre(){ + + } +} From 3693d4b2c613fff984707bd3cae6d33af1b2113c Mon Sep 17 00:00:00 2001 From: LucasV-IUT Date: Mon, 22 Nov 2021 23:06:21 +0100 Subject: [PATCH 2/3] Edition de Page.java et Pdf.java Besoin de faire les tests unitaires --- src/lecteur_pdf/document/Page.java | 126 ++++++++++++++++++----- src/lecteur_pdf/document/Pdf.java | 80 +++++++++++--- tests/lecteur_pdf/document/PageTest.java | 24 ++++- tests/lecteur_pdf/document/PdfTest.java | 20 +++- 4 files changed, 201 insertions(+), 49 deletions(-) diff --git a/src/lecteur_pdf/document/Page.java b/src/lecteur_pdf/document/Page.java index 052f2ee..b409b57 100644 --- a/src/lecteur_pdf/document/Page.java +++ b/src/lecteur_pdf/document/Page.java @@ -7,76 +7,148 @@ 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.*; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.IOException; /** - * TODO class comment + * Page générée virtuellement pour l’affichage avec java swing * * @author Léo FRANCH * @author Tristan NOGARET * @author Lucàs VABRE * @author Noé VILLENEUVE - * @version 1.0 */ public class Page { /** - * TODO A compléter + * Indice de la page */ - private int index; + private final int index; /** - * TODO A compléter + * Label contenant l’image de la page */ - private JLabel image; + private final JLabel image; /** - * TODO A compléter + * Hauteur de la page */ private int hauteur; /** - * TODO A compléter + * Largeur de la page */ private int largeur; /** - * TODO A compléter - * @param document - * @param index - * @throws IllegalArgumentException + * Position X de la page dans son panel */ - public Page(PDDocument document, int index) throws IllegalArgumentException { - if (!isValid(document, index)) throw new IllegalArgumentException(); - // TODO + 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 + * + * @param document Document pdf + * @param index indice 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) throws + IllegalArgumentException, + IOException { + if (!isValid(document, index)) { + throw new IllegalArgumentException(); + } + + this.index = index; + this.image = generateImage(document); + + positionX = 0; + positionY = 0; } /** - * TODO A compléter - * @param document - * @param index - * @return + * Prédicat qui vérifie si une page est valide + * Le document ne doit pas être null et l’index doit être compris entre 0 + * et le nombre de pages du pdf. + * + * @param document Document pdf + * @param index indice de la page + * @return true si le prédicat est vérifié, false sinon */ private boolean isValid(PDDocument document, int index) { - return document != null - && 0 <= index && index < document.getNumberOfPages(); + return document != null && 0 <= index + && index < document.getNumberOfPages(); } /** - * TODO A compléter - * @param positionX - * @param positionY + * Génère une image de la page + * + * @param document Document PDF + * @return JLabel contenant la page sous forme d’image + * @throws IOException En cas d’erreur de lecture + */ + private JLabel generateImage(PDDocument document) throws IOException { + + PDFRenderer pdfRenderer = new PDFRenderer(document); + BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(this.index, + 300, + ImageType.RGB); + + this.largeur = bufferedImage.getWidth(); + this.hauteur = bufferedImage.getHeight(); + + ImageIcon icon = 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) { - // TODO + this.positionX = positionX; + this.positionY = positionY; + + image.setLocation(positionX, positionY); } /** - * TODO A compléter - * @return + * @return Le label contenant l’image de la page */ public JLabel getImage() { return image; } + + /** + * @return La hauteur de la page + */ + public int getHauteur() { + return hauteur; + } + + /** + * @return La largeur de la page + */ + public int getLargeur() { + return largeur; + } } diff --git a/src/lecteur_pdf/document/Pdf.java b/src/lecteur_pdf/document/Pdf.java index f1e3248..dd17983 100644 --- a/src/lecteur_pdf/document/Pdf.java +++ b/src/lecteur_pdf/document/Pdf.java @@ -7,10 +7,10 @@ package lecteur_pdf.document; import org.apache.pdfbox.pdmodel.PDDocument; -import org.apache.pdfbox.rendering.PDFRenderer; import javax.swing.*; import java.io.File; +import java.io.IOException; import java.util.ArrayList; /** @@ -20,41 +20,93 @@ import java.util.ArrayList; * @author Tristan NOGARET * @author Lucàs VABRE * @author Noé VILLENEUVE - * @version 1.0 */ public class Pdf { - /** Espacement entre chaque page */ + /** + * Espacement entre chaque page + */ public static final int OFFSET_PAGES = 10; // px - /** Document PDF chargé */ - private PDDocument document; + /** + * Document PDF chargé + */ + private final PDDocument document; - /** Le nombre de pages du document PDF */ + /** + * Le nombre de pages du document PDF + */ private int nbPages; - /** Les pages du PDF sous forme d’images */ - private ArrayList page; + /** + * Les pages du PDF sous forme d’images + */ + private final ArrayList pages; + + private int currentPositionY; /** * Crée un document PDF qui est capable d’être affiché dans une fenêtre + * * @param fichier Le fichier PDF que l’on veut ouvrir * @throws IllegalArgumentException si le fichier n’existe pas */ - public Pdf(File fichier) { - // TODO + 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.currentPositionY = 0; + + this.loadPages(); } - public int getNbPages() { - return nbPages; + /** + * Charge toutes les pages du document PDF et les stocke dans la liste + */ + private void loadPages() { + for (nbPages = 0; nbPages < document.getNumberOfPages(); nbPages++) { + try { + addPage(new Page(document, nbPages)); + } 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() { - // TODO - return null; // Bouchon + 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; + } } diff --git a/tests/lecteur_pdf/document/PageTest.java b/tests/lecteur_pdf/document/PageTest.java index 3b0168b..a60b041 100644 --- a/tests/lecteur_pdf/document/PageTest.java +++ b/tests/lecteur_pdf/document/PageTest.java @@ -1,6 +1,6 @@ /* - * PageTest.java, 17/11/2021 - * IUT Rodez 2021-2021, INFO2 + * PageTest.java, 22/11/2021 + * IUT Rodez 2021-2022, INFO 2 * pas de copyright, aucun droits */ @@ -11,15 +11,13 @@ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; /** - * TODO class comment + * Tests de la classe {@link Page} * * @author Léo FRANCH * @author Tristan NOGARET * @author Lucàs VABRE * @author Noé VILLENEUVE - * @version 1.0 */ - class PageTest { @Test @@ -29,4 +27,20 @@ class PageTest { @Test void getImage() { } + + @Test + void testSetPosition() { + } + + @Test + void testGetImage() { + } + + @Test + void getHauteur() { + } + + @Test + void getLargeur() { + } } \ No newline at end of file diff --git a/tests/lecteur_pdf/document/PdfTest.java b/tests/lecteur_pdf/document/PdfTest.java index bddbea4..ae17d4e 100644 --- a/tests/lecteur_pdf/document/PdfTest.java +++ b/tests/lecteur_pdf/document/PdfTest.java @@ -11,15 +11,13 @@ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; /** - * TODO class comment + * Tests de la classe {@link Pdf} * * @author Léo FRANCH * @author Tristan NOGARET * @author Lucàs VABRE * @author Noé VILLENEUVE - * @version 1.0 */ - class PdfTest { @Test @@ -29,4 +27,20 @@ class PdfTest { @Test void getRenderView() { } + + @Test + void testGetRenderView() { + } + + @Test + void testGetNbPages() { + } + + @Test + void testGetRenderView1() { + } + + @Test + void testGetNbPages1() { + } } \ No newline at end of file From 1c0b65e52936569d3974355fe3a80e1bc53c93da Mon Sep 17 00:00:00 2001 From: leofranch <73280990+leofranch@users.noreply.github.com> Date: Tue, 23 Nov 2021 08:04:38 +0100 Subject: [PATCH 3/3] =?UTF-8?q?cr=C3=A9ation=20des=20classes=20et=20implem?= =?UTF-8?q?entation=20de=20base?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lecteur_pdf/affichage/Fenetre.java | 2 +- src/lecteur_pdf/affichage/gestionFenetre.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lecteur_pdf/affichage/Fenetre.java b/src/lecteur_pdf/affichage/Fenetre.java index a687e5a..b83f378 100644 --- a/src/lecteur_pdf/affichage/Fenetre.java +++ b/src/lecteur_pdf/affichage/Fenetre.java @@ -12,7 +12,7 @@ import lecteur_pdf.menu.Menu; import javax.swing.*; /** - * Définis virtuellement un fichier PDF + * classe correspondant à l'objet Fenetre * * @author Léo FRANCH * @author Tristan NOGARET diff --git a/src/lecteur_pdf/affichage/gestionFenetre.java b/src/lecteur_pdf/affichage/gestionFenetre.java index 085a8b9..7989845 100644 --- a/src/lecteur_pdf/affichage/gestionFenetre.java +++ b/src/lecteur_pdf/affichage/gestionFenetre.java @@ -9,7 +9,7 @@ package lecteur_pdf.affichage; import java.util.ArrayList; /** - * Définis virtuellement un fichier PDF + * classe de gestion des fenêtres * * @author Léo FRANCH * @author Tristan NOGARET