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
+3 -1
View File
@@ -1,5 +1,7 @@
# Meta données de IntelliJ Idea
.idea/*
LecteurPdfDoubleAffichage.iml
# Dossiers des fichiers compilés
out/
out/
*.class
+2
View File
@@ -35,5 +35,7 @@
<SOURCES />
</library>
</orderEntry>
<orderEntry type="library" name="pdfbox-2.0" level="project" />
<orderEntry type="library" name="fontbox-2.0.24" level="project" />
</component>
</module>
+2 -2
View File
@@ -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 dimages
*/
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 lon veut ouvrir
* @throws IllegalArgumentException si le fichier nexiste 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 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) {
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();
}
}
+10 -56
View File
@@ -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 limage 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 lafficher 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 dimage
* @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);
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 limage de la page
*/
public JLabel getImage() {
return image;
return imageIcon;
}
/**
-1
View File
@@ -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
+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;
import org.junit.jupiter.api.Test;
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 {
@Test
void setPosition() {
}
@Test
void getImage() {
}
@Test
void testSetPosition() {
}
@Test
void testGetImage() {
}
@Test
void getHauteur() {
//TODO
}
@Test
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() {
}
}