From 431d8eb5c935ee8e02ecc52fc21a14bbf8c4dbec Mon Sep 17 00:00:00 2001 From: NicolasLACROIX Date: Wed, 30 Oct 2019 20:36:34 +0100 Subject: [PATCH] =?UTF-8?q?#27=20Ajout=20des=20cases=20=C3=A0=20griser=20p?= =?UTF-8?q?our=20chaque=20questions.=20Prise=20en=20compte=20de=20certains?= =?UTF-8?q?=20parametres=20fournis=20dans=20le=20fichier=20config.txt=20(m?= =?UTF-8?q?=C3=A9lange=20des=20questions=20et=20des=20r=C3=A9ponses)=20(?= =?UTF-8?q?=C3=A0=20compl=C3=A9ter)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/GenerateurPdf/SubjectGenerator.java | 73 ++++++++++++++++++------- 1 file changed, 54 insertions(+), 19 deletions(-) diff --git a/src/GenerateurPdf/SubjectGenerator.java b/src/GenerateurPdf/SubjectGenerator.java index 1225811..10dbbed 100644 --- a/src/GenerateurPdf/SubjectGenerator.java +++ b/src/GenerateurPdf/SubjectGenerator.java @@ -3,6 +3,7 @@ package GenerateurPdf; import java.awt.Color; import java.io.IOException; import java.util.ArrayList; +import java.util.Collections; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; @@ -13,6 +14,7 @@ import org.apache.pdfbox.pdmodel.font.PDType1Font; import config.Config; import config.Question; +import config.Reponse; // infos concernant strok, fill, ... : https://stackoverflow.com/a/27959484 @@ -329,6 +331,7 @@ public class SubjectGenerator { } public void generateHeader() { + // TODO: change text considering config data try { PDPage page = this.pdDocument.getPage(0); @@ -405,7 +408,7 @@ public class SubjectGenerator { } } - public void generateBody() { + public void generateBody(boolean isCorrected) { try { PDPageContentStream pdPageContentStream = new PDPageContentStream(this.pdDocument, this.pdDocument.getPage(0), PDPageContentStream.AppendMode.APPEND, true); @@ -416,20 +419,25 @@ public class SubjectGenerator { int heightOffset = 265; int pageIndex = 0; // System.out.println(this.config.getQuestions()); - for (Question q : this.config.getQuestions()) { + // pour chaque question + ArrayList questions = this.config.getQuestions(); + // si les questions doivent etre melangees + if (this.config.getParam().get("ShuffleQuestions") == "1") { + Collections.shuffle(questions); + } + for (Question q : questions) { q.setTitre(q.getTitre().replace("\n", "")); // /\ TODO: must be done in Config /\ - int height = (int) this.pdDocument.getPage(0).getMediaBox().getHeight(); PDPage page = this.pdDocument.getPage(pageIndex); - this.generateQ(q, qIndex, this.pdDocument, page, 25, heightOffset); + this.generateQCM(q, qIndex, this.pdDocument, page, 25, heightOffset, isCorrected); qIndex++; heightOffset += 100; - if (heightOffset > (height - 10)) { - heightOffset = 265; - pageIndex++; + // si on depasse la longeur de la page + if (heightOffset > (this.height - 10)) { + pageIndex++; // on va a la page suivante + heightOffset = 55; // on se place en haut de la page } } - pdPageContentStream.close(); } @@ -438,8 +446,11 @@ public class SubjectGenerator { } } - public void generateQ(Question q, int qIndex, PDDocument pdDocument, PDPage curPage, int widthOffset, - int heightOffset) { + public void generateQCM(Question q, int qIndex, PDDocument pdDocument, PDPage curPage, int widthOffset, + int heightOffset, boolean isCorrected) { + // TODO: calculer automatiquement widthOffset + // TODO: regler probleme de debordement de page (verifiee pour chaque question + // mais pas pour chaque reponse) try { // Il faut rendre plus générale la génération des Q (en fonction du nombre de // réponses, recycler le heightOffset) @@ -457,6 +468,7 @@ public class SubjectGenerator { // Titre // Si titre plus long que largeur page -> mise sur plusieurs lignes + // TODO: revoir structure (factorisation possible) if (titleLength > (this.width - 20)) { pdPageContentStream.beginText(); pdPageContentStream.newLineAtOffset(widthOffset, this.height - heightOffset); @@ -478,17 +490,35 @@ public class SubjectGenerator { pdPageContentStream.endText(); } - // Reponses (QCM) - /// Rectangle - // pdPageContentStream.addRect(widthOffset + 20, height - heightOffset - 15, - // 100, 100); - - /// Texte - for (int i = 0; i < q.getReponses().size(); i++) { + ArrayList reponses = q.getReponses(); + // si les reponses doivent etre melangees + if (this.config.getParam().get("ShuffleAnswers") == "1") { + Collections.shuffle(reponses); + } + // pour chaque reponse + for (Reponse r : reponses) { + /** + * if (heightOffset > (this.height - 10)) { pageIndex++; // on va a la page + * suivante heightOffset = 55; // on se place en haut de la page } + */ + // on ecrit la reponse pdPageContentStream.beginText(); pdPageContentStream.newLineAtOffset(widthOffset + 40, this.height - heightOffset - 15); - pdPageContentStream.showText(q.getReponses().get(i).getIntitule()); + pdPageContentStream.showText(r.getIntitule()); pdPageContentStream.endText(); + // on ajoute une zone pour cocher (carre) + pdPageContentStream.addRect(widthOffset + 20, this.height - heightOffset - 16, 10, 10); + // si l'on souhait generer le corrige + if (isCorrected) { + // si c'est une bonne reponse + if (r.isJuste()) { + pdPageContentStream.fillAndStroke(); // carre noirci + } else { + pdPageContentStream.stroke(); // carre vide + } + } else { + pdPageContentStream.stroke(); // carre vide + } heightOffset += 17.5; } @@ -509,6 +539,10 @@ public class SubjectGenerator { } } + public void generateOpenQ() { + + } + public static ArrayList setTextOnMultLines(String text, int widthOffset, PDDocument pdDocument, PDFont font, int fontSize) { // TODO: voir si l'on laisse en static ou non @@ -584,6 +618,7 @@ public class SubjectGenerator { // instanciate a new SubjectGenerator // TODO: change PDRectangle.A4 to the format specified in the config + // TODO: number of page = automatic SubjectGenerator subjectGenerator = new SubjectGenerator(c, 5, PDRectangle.A4); subjectGenerator.generateHeader(); @@ -591,7 +626,7 @@ public class SubjectGenerator { // subjectGenerator.generateNumEtudAreaBis(); // subjectGenerator.generateNameArea(); subjectGenerator.generateFooter(); - subjectGenerator.generateBody(); + subjectGenerator.generateBody(false); // false = on genere le sujet, pas le corrige subjectGenerator.save("E:\\testPDFMarks.pdf");