Merge remote-tracking branch 'origin/main'

This commit is contained in:
NonoL3Robot
2021-11-23 22:11:56 +01:00
6 changed files with 274 additions and 49 deletions
+40
View File
@@ -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.*;
/**
* classe correspondant à l'objet Fenetre
*
* @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 );
}
}
@@ -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;
/**
* classe de gestion des fenêtres
*
* @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<Fenetre> fenetresOuvertes;
public void ouvrirFenetre(){
}
public void fermerFenetre(){
}
}
+99 -27
View File
@@ -7,76 +7,148 @@
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 javax.swing.*; 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 laffichage avec java swing
* *
* @author Léo FRANCH * @author Léo FRANCH
* @author Tristan NOGARET * @author Tristan NOGARET
* @author Lucàs VABRE * @author Lucàs VABRE
* @author Noé VILLENEUVE * @author Noé VILLENEUVE
* @version 1.0
*/ */
public class Page { public class Page {
/** /**
* TODO A compléter * Indice de la page
*/ */
private int index; private final int index;
/** /**
* TODO A compléter * Label contenant limage de la page
*/ */
private JLabel image; private final JLabel image;
/** /**
* TODO A compléter * Hauteur de la page
*/ */
private int hauteur; private int hauteur;
/** /**
* TODO A compléter * Largeur de la page
*/ */
private int largeur; private int largeur;
/** /**
* TODO A compléter * Position X de la page dans son panel
* @param document
* @param index
* @throws IllegalArgumentException
*/ */
public Page(PDDocument document, int index) throws IllegalArgumentException { private int positionX;
if (!isValid(document, index)) throw new IllegalArgumentException();
// TODO /**
* Position Y de la page dans son panel
*/
private int positionY;
/**
* Crée une page virtuellement pour lafficher 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 nas 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 * Prédicat qui vérifie si une page est valide
* @param document * Le document ne doit pas être null et lindex doit être compris entre 0
* @param index * et le nombre de pages du pdf.
* @return *
* @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) { private boolean isValid(PDDocument document, int index) {
return document != null return document != null && 0 <= index
&& 0 <= index && index < document.getNumberOfPages(); && index < document.getNumberOfPages();
} }
/** /**
* TODO A compléter * Génère une image de la page
* @param positionX *
* @param positionY * @param document Document PDF
* @return JLabel contenant la page sous forme dimage
* @throws IOException En cas derreur 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) { public void setPosition(int positionX, int positionY) {
// TODO this.positionX = positionX;
this.positionY = positionY;
image.setLocation(positionX, positionY);
} }
/** /**
* TODO A compléter * @return Le label contenant limage de la page
* @return
*/ */
public JLabel getImage() { public JLabel getImage() {
return image; return image;
} }
/**
* @return La hauteur de la page
*/
public int getHauteur() {
return hauteur;
}
/**
* @return La largeur de la page
*/
public int getLargeur() {
return largeur;
}
} }
+66 -14
View File
@@ -7,10 +7,10 @@
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.PDFRenderer;
import javax.swing.*; import javax.swing.*;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
/** /**
@@ -20,41 +20,93 @@ import java.util.ArrayList;
* @author Tristan NOGARET * @author Tristan NOGARET
* @author Lucàs VABRE * @author Lucàs VABRE
* @author Noé VILLENEUVE * @author Noé VILLENEUVE
* @version 1.0
*/ */
public class Pdf { public class Pdf {
/** Espacement entre chaque page */ /**
* Espacement entre chaque page
*/
public static final int OFFSET_PAGES = 10; // px 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; private int nbPages;
/** Les pages du PDF sous forme dimages */ /**
private ArrayList<Page> page; * Les pages du PDF sous forme dimages
*/
private final ArrayList<Page> pages;
private int currentPositionY;
/** /**
* 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
*
* @param fichier Le fichier PDF que lon veut ouvrir * @param fichier Le fichier PDF que lon veut ouvrir
* @throws IllegalArgumentException si le fichier nexiste pas * @throws IllegalArgumentException si le fichier nexiste pas
*/ */
public Pdf(File fichier) { public Pdf(File fichier) throws IOException {
// TODO if (!fichier.exists()) {
throw new IllegalArgumentException();
} }
public int getNbPages() { this.pages = new ArrayList<>();
return nbPages; this.document = PDDocument.load(fichier);
this.nbPages = 0;
this.currentPositionY = 0;
this.loadPages();
}
/**
* 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 * @return un panel scrollable contenant toutes les pages du PDF
*/ */
public JScrollPane getRenderView() { public JScrollPane getRenderView() {
// TODO JPanel panel = new JPanel();
return null; // Bouchon 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;
}
} }
+19 -5
View File
@@ -1,6 +1,6 @@
/* /*
* PageTest.java, 17/11/2021 * PageTest.java, 22/11/2021
* IUT Rodez 2021-2021, INFO2 * IUT Rodez 2021-2022, INFO 2
* pas de copyright, aucun droits * pas de copyright, aucun droits
*/ */
@@ -11,15 +11,13 @@ import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
/** /**
* TODO class comment * Tests de la classe {@link Page}
* *
* @author Léo FRANCH * @author Léo FRANCH
* @author Tristan NOGARET * @author Tristan NOGARET
* @author Lucàs VABRE * @author Lucàs VABRE
* @author Noé VILLENEUVE * @author Noé VILLENEUVE
* @version 1.0
*/ */
class PageTest { class PageTest {
@Test @Test
@@ -29,4 +27,20 @@ class PageTest {
@Test @Test
void getImage() { void getImage() {
} }
@Test
void testSetPosition() {
}
@Test
void testGetImage() {
}
@Test
void getHauteur() {
}
@Test
void getLargeur() {
}
} }
+17 -3
View File
@@ -11,15 +11,13 @@ import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
/** /**
* TODO class comment * Tests de la classe {@link Pdf}
* *
* @author Léo FRANCH * @author Léo FRANCH
* @author Tristan NOGARET * @author Tristan NOGARET
* @author Lucàs VABRE * @author Lucàs VABRE
* @author Noé VILLENEUVE * @author Noé VILLENEUVE
* @version 1.0
*/ */
class PdfTest { class PdfTest {
@Test @Test
@@ -29,4 +27,20 @@ class PdfTest {
@Test @Test
void getRenderView() { void getRenderView() {
} }
@Test
void testGetRenderView() {
}
@Test
void testGetNbPages() {
}
@Test
void testGetRenderView1() {
}
@Test
void testGetNbPages1() {
}
} }