From 5faa0c5f87b7b6815b98cf4625c6738af6e8a4ba Mon Sep 17 00:00:00 2001 From: LucasV-IUT Date: Sat, 13 Nov 2021 21:54:46 +0100 Subject: [PATCH] Add FichierPDF.java Todo : Terminer les Tests unitaires --- LecteurPDFDoubleAffichage.iml | 2 - .../lecteurpdfdoubleaffichage/FichierPDF.java | 131 ++++++++++++++++++ .../test/TestFichierPDF.java | 91 ++++++++++++ src/main/java/fichierTest/test_pdf.pdf | 90 ++++++++++++ src/main/java/module-info.java | 1 + 5 files changed, 313 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/lecteurpdfdoubleaffichage/lecteurpdfdoubleaffichage/FichierPDF.java create mode 100644 src/main/java/com/lecteurpdfdoubleaffichage/lecteurpdfdoubleaffichage/test/TestFichierPDF.java create mode 100644 src/main/java/fichierTest/test_pdf.pdf diff --git a/LecteurPDFDoubleAffichage.iml b/LecteurPDFDoubleAffichage.iml index 7cbbd69..a8c685b 100644 --- a/LecteurPDFDoubleAffichage.iml +++ b/LecteurPDFDoubleAffichage.iml @@ -10,8 +10,6 @@ - - diff --git a/src/main/java/com/lecteurpdfdoubleaffichage/lecteurpdfdoubleaffichage/FichierPDF.java b/src/main/java/com/lecteurpdfdoubleaffichage/lecteurpdfdoubleaffichage/FichierPDF.java new file mode 100644 index 0000000..ee778ed --- /dev/null +++ b/src/main/java/com/lecteurpdfdoubleaffichage/lecteurpdfdoubleaffichage/FichierPDF.java @@ -0,0 +1,131 @@ +/* + * FichierPDF, 13/11/2021 + * IUT Rodez 2021, INFO2 + * pas de copyright, aucun droits + */ + +package com.lecteurpdfdoubleaffichage.lecteurpdfdoubleaffichage; + +import javafx.scene.image.Image; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.rendering.PDFRenderer; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; + +import java.io.*; +import java.util.ArrayList; + +/** + * Classe permettant la manipulation de fichier PDF et son affichage. + * + * @author Lucas + */ +public class FichierPDF { + + /** + * Fichier à charger + */ + private final File fichier; + + /** + * Document pdf chargé à partir du fichier + */ + private final PDDocument pdDocument; + + /** + * Outils de rendu pour l’affichage des pages + */ + private final PDFRenderer render; + + /** + * Liste des pages du PDF sous forme d’images + */ + private final ArrayList documentPages = new ArrayList<>(); + + /** + * @param file Le fichier que l’on veut charger + */ + public FichierPDF(File file) { + if (file == null || !file.isFile()) { + throw new IllegalArgumentException(); + } + + try { + this.pdDocument = PDDocument.load(file); + } catch (IOException e) { + throw new IllegalArgumentException(e.getMessage()); + } + + this.fichier = file; + this.render = new PDFRenderer(pdDocument); + + /* Remplis le tableau documentPages */ + for (int i = 0; i < pdDocument.getNumberOfPages(); i++) { + documentPages.add(pageToImage(i)); + } + } + + /** + * @return La liste des pages du PDF sous forme d’images + */ + public ArrayList getDocumentPages() { + return documentPages; + } + + /** + * @return Le document pdf chargé + */ + public PDDocument getPdDocument() { + return pdDocument; + } + + /** + * @return Le Fichier chargé + */ + public File getFichier() { + return fichier; + } + + /** + * Convertis une page PdfBox en image JavaFX + * @param pageNumber Le numéro de la page que l’on veut convertir + * @return L’image compatible avec JavaFX + */ + public Image pageToImage(int pageNumber) { + if (pageNumber <= pdDocument.getNumberOfPages()) { + return null; + } + + BufferedImage pageImage = null; + try { + pageImage = render.renderImage(pageNumber); + } catch (IOException e) { + e.printStackTrace(); + } + + return bufferedImageToFxImage(pageImage); + } + + /** + * Methode qui convertis une image dans le buffer en image compatible + * avec JavaFX + * @param bufferedImg Image dans le buffer à convertir + * @return Image compatible avec JavaFX + */ + private static Image bufferedImageToFxImage(BufferedImage bufferedImg) { + + ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream(); + + try { + ImageIO.write(bufferedImg, "jpg", arrayOutputStream); + } catch (IOException e) { + e.printStackTrace(); + } + + InputStream inStream = new ByteArrayInputStream( + arrayOutputStream.toByteArray()); + + return new Image(inStream); + } +} diff --git a/src/main/java/com/lecteurpdfdoubleaffichage/lecteurpdfdoubleaffichage/test/TestFichierPDF.java b/src/main/java/com/lecteurpdfdoubleaffichage/lecteurpdfdoubleaffichage/test/TestFichierPDF.java new file mode 100644 index 0000000..705874b --- /dev/null +++ b/src/main/java/com/lecteurpdfdoubleaffichage/lecteurpdfdoubleaffichage/test/TestFichierPDF.java @@ -0,0 +1,91 @@ +/* + * TestChargerFichier, 13/11/2021 + * IUT Rodez 2021, INFO2 + * pas de copyright, aucun droits + */ + +package com.lecteurpdfdoubleaffichage.lecteurpdfdoubleaffichage.test; + +import com.lecteurpdfdoubleaffichage.lecteurpdfdoubleaffichage.FichierPDF; + +import java.io.File; + +/** + * Classe de test de {@link FichierPDF} + * + * @author Lucas Vabre + */ +public class TestFichierPDF { + + public FichierPDF FIXTURE = new FichierPDF( + new File("fichierTest/test_pdf.pdf")); + + /** + * Tests unitaires de {@link FichierPDF#FichierPDF(File)} + */ + public static void testFichierPdfFile() { + System.out.print("Test unitaire de FichierPDF#FichierPDF(File)"); + + File[] INVALIDES = { + /* Chemin inconnu */ + new File(" "), + new File("\n"), + new File("aaa.pdf"), + new File("iii.png") + }; + + for (int i = 0; i < INVALIDES.length; i++) { + try { + new FichierPDF(INVALIDES[i]); + throw new AssertionError("Erreur au test n°" + i); + } catch (IllegalArgumentException ignored) {} + } + + System.out.println(" => OK"); + } + + /** + * Tests unitaires de {@link FichierPDF#getDocumentPages()} + */ + public static void testGetDocumentPages() { + System.out.println("Test unitaire de FichierPDF#getDocumentPages():"); + // TODO + } + + /** + * Tests unitaires de {@link FichierPDF#getPdDocument()} + */ + public static void testGetPdDocument() { + System.out.println("Test unitaire de FichierPDF#getPdDocument():"); + // TODO + } + + /** + * Tests unitaires de {@link FichierPDF#getFichier()} + */ + public static void testGetFichier() { + System.out.println("Test unitaire de FichierPDF#getFichier():"); + // TODO + } + + /** + * Tests unitaires de {@link FichierPDF#pageToImage(int)} + */ + public static void testPageToImage() { + System.out.println("Test unitaire de FichierPDF#pageToImage(int):"); + // TODO + } + + /** + * Lance les tests de la classe {@link FichierPDF} + * + * @param args non utilisé + */ + public static void main(String[] args) { + testFichierPdfFile(); + // testGetDocumentPages(); + // testGetPdDocument(); + // testGetFichier(); + // testPageToImage(); + } +} diff --git a/src/main/java/fichierTest/test_pdf.pdf b/src/main/java/fichierTest/test_pdf.pdf new file mode 100644 index 0000000..0c3a03b --- /dev/null +++ b/src/main/java/fichierTest/test_pdf.pdf @@ -0,0 +1,90 @@ +%PDF-1.4 +%쏢 +5 0 obj +<> +stream +xMN0 > +/Contents 5 0 R +>> +endobj +3 0 obj +<< /Type /Pages /Kids [ +4 0 R +] /Count 1 +>> +endobj +1 0 obj +<> +endobj +8 0 obj +<> +endobj +7 0 obj +<> +endobj +9 0 obj +<>stream + + + + +GPL Ghostscript 9.06 +() + +2014-12-22T00:49:20+01:00 +2014-12-22T00:49:20+01:00 +PDFCreator Version 1.6.0 + +test_wordSeb() + + + + + +endstream +endobj +2 0 obj +<>endobj +xref +0 10 +0000000000 65535 f +0000000484 00000 n +0000002268 00000 n +0000000425 00000 n +0000000284 00000 n +0000000015 00000 n +0000000265 00000 n +0000000577 00000 n +0000000548 00000 n +0000000643 00000 n +trailer +<< /Size 10 /Root 1 0 R /Info 2 0 R +/ID [<0CB231047435B33BCE0B1C6881DCF011><0CB231047435B33BCE0B1C6881DCF011>] +>> +startxref +2648 +%%EOF diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index b385f5d..ffbe5e4 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -2,6 +2,7 @@ module com.lecteurpdfdoubleaffichage.lecteurpdfdoubleaffichage { requires javafx.controls; requires javafx.fxml; requires org.apache.pdfbox; + requires java.desktop; opens com.lecteurpdfdoubleaffichage.lecteurpdfdoubleaffichage to javafx.fxml;