Test d'affichage PDF

-> Fonctionnel (voir PDFTest.java)
This commit is contained in:
LucasV-IUT
2021-11-28 00:33:17 +01:00
parent c77b21a384
commit e86d3f41b3
18 changed files with 74 additions and 188 deletions
+2
View File
@@ -1,5 +1,7 @@
# Meta données de IntelliJ Idea # Meta données de IntelliJ Idea
.idea/* .idea/*
LecteurPdfDoubleAffichage.iml
# Dossiers des fichiers compilés # Dossiers des fichiers compilés
out/ out/
*.class
+2
View File
@@ -35,5 +35,7 @@
<SOURCES /> <SOURCES />
</library> </library>
</orderEntry> </orderEntry>
<orderEntry type="library" name="pdfbox-2.0" level="project" />
<orderEntry type="library" name="fontbox-2.0.24" level="project" />
</component> </component>
</module> </module>
+2 -2
View File
@@ -6,7 +6,7 @@
package lecteur_pdf.affichage; package lecteur_pdf.affichage;
import lecteur_pdf.document.Pdf; import lecteur_pdf.document.PDF;
import lecteur_pdf.menu.Menu; import lecteur_pdf.menu.Menu;
import javax.swing.*; import javax.swing.*;
@@ -24,7 +24,7 @@ public class Fenetre {
private JFrame frame; private JFrame frame;
private String titre ; private String titre ;
private Menu menu = new Menu(); private Menu menu = new Menu();
private Pdf pdf ; private PDF pdf ;
@@ -6,14 +6,8 @@
package lecteur_pdf.affichage; package lecteur_pdf.affichage;
import lecteur_pdf.document.Pdf;
import lecteur_pdf.menu.Menu;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import static lecteur_pdf.menu.SelectionnerFichier.ouvrirFichier;
/** /**
* classe de gestion des fenêtres * classe de gestion des fenêtres
* *
@@ -1,5 +1,5 @@
/* /*
* Pdf, 17/11/2021 * PDF, 17/11/2021
* IUT Rodez 2021, INFO2 * IUT Rodez 2021, INFO2
* pas de copyright, aucun droits * pas de copyright, aucun droits
*/ */
@@ -11,7 +11,6 @@ import org.apache.pdfbox.pdmodel.PDDocument;
import javax.swing.*; import javax.swing.*;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList;
/** /**
* Définis virtuellement un fichier PDF * Définis virtuellement un fichier PDF
@@ -21,7 +20,7 @@ import java.util.ArrayList;
* @author Lucàs VABRE * @author Lucàs VABRE
* @author Noé VILLENEUVE * @author Noé VILLENEUVE
*/ */
public class Pdf { public class PDF extends JPanel {
/** /**
* Espacement entre chaque page * Espacement entre chaque page
@@ -34,16 +33,9 @@ public class Pdf {
private final PDDocument document; 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; private final Page[] pages;
/**
* 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
@@ -51,62 +43,46 @@ public class Pdf {
* @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) throws IOException { public PDF(File fichier) throws IOException {
if (!fichier.exists()) { if (!fichier.exists()) {
throw new IllegalArgumentException(); throw new IllegalArgumentException();
} }
this.pages = new ArrayList<>(); // this.container = new JPanel();
this.document = PDDocument.load(fichier);
this.nbPages = 0;
this.currentPositionY = 0; this.document = PDDocument.load(fichier);
this.pages = new Page[document.getNumberOfPages()];
this.loadPages(); 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() { private void loadPages() {
for (nbPages = 0; nbPages < document.getNumberOfPages(); nbPages++) { int currentPositionY = 0;
for (int i = 0; i < pages.length; i++) {
try { 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 lajoute 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) { } catch (IOException e) {
e.printStackTrace(); 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 * @return Le nombre de pages chargées
*/ */
public int getNbPages() { public int getNbPages() {
return nbPages; return document.getNumberOfPages();
} }
} }
+10 -56
View File
@@ -23,17 +23,7 @@ import java.io.IOException;
* @author Lucàs VABRE * @author Lucàs VABRE
* @author Noé VILLENEUVE * @author Noé VILLENEUVE
*/ */
public class Page { public class Page extends JLabel {
/**
* Indice de la page
*/
private final int index;
/**
* Label contenant limage de la page
*/
private final JLabel image;
/** /**
* Hauteur de la page * Hauteur de la page
@@ -45,16 +35,6 @@ public class Page {
*/ */
private int largeur; 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 lafficher avec java swing * Crée une page virtuellement pour lafficher avec java swing
* *
@@ -70,11 +50,7 @@ public class Page {
throw new IllegalArgumentException(); throw new IllegalArgumentException();
} }
this.index = index; this.setIcon(generateImage(document, index));
this.image = generateImage(document);
positionX = 0;
positionY = 0;
} }
/** /**
@@ -98,44 +74,22 @@ public class Page {
* @return JLabel contenant la page sous forme dimage * @return JLabel contenant la page sous forme dimage
* @throws IOException En cas derreur de lecture * @throws IOException En cas derreur de lecture
*/ */
private JLabel generateImage(PDDocument document) throws IOException { private ImageIcon generateImage(PDDocument document, int index) throws IOException {
PDFRenderer pdfRenderer = new PDFRenderer(document); PDFRenderer pdfRenderer = new PDFRenderer(document);
BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(this.index, BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(index,
300, 300,
ImageType.RGB); ImageType.RGB);
this.largeur = bufferedImage.getWidth(); this.largeur = bufferedImage.getWidth() / 2;
this.hauteur = bufferedImage.getHeight(); this.hauteur = bufferedImage.getHeight() / 2;
ImageIcon icon = new ImageIcon( System.out.println(largeur + "x" + hauteur);
final ImageIcon imageIcon = new ImageIcon(
bufferedImage.getScaledInstance(largeur, hauteur, bufferedImage.getScaledInstance(largeur, hauteur,
Image.SCALE_SMOOTH)); Image.SCALE_SMOOTH));
return imageIcon;
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 limage de la page
*/
public JLabel getImage() {
return image;
} }
/** /**
-1
View File
@@ -10,7 +10,6 @@ import javax.swing.*;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.io.File; import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import lecteur_pdf.document.Pdf;
/** /**
* Classe pour afficher le Menu "Fichier" avec ses options * Classe pour afficher le Menu "Fichier" avec ses options
+33
View File
@@ -0,0 +1,33 @@
package lecteur_pdf.document;
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.io.IOException;
class PDFTest {
/**
* TODO comment main
*
* @param args
*/
public static void main(String[] args) throws IOException {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setSize(300,300);
frame.setBackground(Color.gray);
frame.setVisible(true);
PDF doc = new PDF(new File("F:/test_pdf1.pdf"));
JScrollPane scrollPane = new JScrollPane(doc);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
frame.getContentPane().add(scrollPane);
}
}
+2 -30
View File
@@ -1,46 +1,18 @@
/*
* PageTest.java, 22/11/2021
* IUT Rodez 2021-2022, INFO 2
* pas de copyright, aucun droits
*/
package lecteur_pdf.document; package lecteur_pdf.document;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
/**
* Tests de la classe {@link Page}
*
* @author Léo FRANCH
* @author Tristan NOGARET
* @author Lucàs VABRE
* @author Noé VILLENEUVE
*/
class PageTest { class PageTest {
@Test
void setPosition() {
}
@Test
void getImage() {
}
@Test
void testSetPosition() {
}
@Test
void testGetImage() {
}
@Test @Test
void getHauteur() { void getHauteur() {
//TODO
} }
@Test @Test
void getLargeur() { void getLargeur() {
// TODO
} }
} }
-46
View File
@@ -1,46 +0,0 @@
/*
* PdfTest.java, 17/11/2021
* IUT Rodez 2021-2021, INFO2
* pas de copyright, aucun droits
*/
package lecteur_pdf.document;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
/**
* Tests de la classe {@link Pdf}
*
* @author Léo FRANCH
* @author Tristan NOGARET
* @author Lucàs VABRE
* @author Noé VILLENEUVE
*/
class PdfTest {
@Test
void getNbPages() {
}
@Test
void getRenderView() {
}
@Test
void testGetRenderView() {
}
@Test
void testGetNbPages() {
}
@Test
void testGetRenderView1() {
}
@Test
void testGetNbPages1() {
}
}