mirror of
https://github.com/LucasVbr/LecteurPdfDoubleAffichage.git
synced 2026-07-09 12:47:45 +00:00
Merge remote-tracking branch 'origin/main'
This commit is contained in:
@@ -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 l’affichage 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 l’image 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 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
|
* Prédicat qui vérifie si une page est valide
|
||||||
* @param document
|
* Le document ne doit pas être null et l’index 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 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) {
|
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 l’image 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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 d’images */
|
/**
|
||||||
private ArrayList<Page> page;
|
* Les pages du PDF sous forme d’images
|
||||||
|
*/
|
||||||
|
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 l’on veut ouvrir
|
* @param fichier Le fichier PDF que l’on veut ouvrir
|
||||||
* @throws IllegalArgumentException si le fichier n’existe pas
|
* @throws IllegalArgumentException si le fichier n’existe pas
|
||||||
*/
|
*/
|
||||||
public Pdf(File fichier) {
|
public Pdf(File fichier) throws IOException {
|
||||||
// TODO
|
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
|
* @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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -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() {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user