#27 Ajout des cases à griser pour chaque questions. Prise en compte de certains parametres fournis dans le fichier config.txt (mélange des questions et des réponses) (à compléter)
This commit is contained in:
parent
ff5c223161
commit
431d8eb5c9
@ -3,6 +3,7 @@ package GenerateurPdf;
|
|||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
|
||||||
import org.apache.pdfbox.pdmodel.PDDocument;
|
import org.apache.pdfbox.pdmodel.PDDocument;
|
||||||
import org.apache.pdfbox.pdmodel.PDPage;
|
import org.apache.pdfbox.pdmodel.PDPage;
|
||||||
@ -13,6 +14,7 @@ import org.apache.pdfbox.pdmodel.font.PDType1Font;
|
|||||||
|
|
||||||
import config.Config;
|
import config.Config;
|
||||||
import config.Question;
|
import config.Question;
|
||||||
|
import config.Reponse;
|
||||||
|
|
||||||
// infos concernant strok, fill, ... : https://stackoverflow.com/a/27959484
|
// infos concernant strok, fill, ... : https://stackoverflow.com/a/27959484
|
||||||
|
|
||||||
@ -329,6 +331,7 @@ public class SubjectGenerator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void generateHeader() {
|
public void generateHeader() {
|
||||||
|
// TODO: change text considering config data
|
||||||
try {
|
try {
|
||||||
|
|
||||||
PDPage page = this.pdDocument.getPage(0);
|
PDPage page = this.pdDocument.getPage(0);
|
||||||
@ -405,7 +408,7 @@ public class SubjectGenerator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void generateBody() {
|
public void generateBody(boolean isCorrected) {
|
||||||
try {
|
try {
|
||||||
PDPageContentStream pdPageContentStream = new PDPageContentStream(this.pdDocument,
|
PDPageContentStream pdPageContentStream = new PDPageContentStream(this.pdDocument,
|
||||||
this.pdDocument.getPage(0), PDPageContentStream.AppendMode.APPEND, true);
|
this.pdDocument.getPage(0), PDPageContentStream.AppendMode.APPEND, true);
|
||||||
@ -416,20 +419,25 @@ public class SubjectGenerator {
|
|||||||
int heightOffset = 265;
|
int heightOffset = 265;
|
||||||
int pageIndex = 0;
|
int pageIndex = 0;
|
||||||
// System.out.println(this.config.getQuestions());
|
// System.out.println(this.config.getQuestions());
|
||||||
for (Question q : this.config.getQuestions()) {
|
// pour chaque question
|
||||||
|
ArrayList<Question> 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 /\
|
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);
|
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++;
|
qIndex++;
|
||||||
heightOffset += 100;
|
heightOffset += 100;
|
||||||
|
|
||||||
if (heightOffset > (height - 10)) {
|
// si on depasse la longeur de la page
|
||||||
heightOffset = 265;
|
if (heightOffset > (this.height - 10)) {
|
||||||
pageIndex++;
|
pageIndex++; // on va a la page suivante
|
||||||
|
heightOffset = 55; // on se place en haut de la page
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pdPageContentStream.close();
|
pdPageContentStream.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -438,8 +446,11 @@ public class SubjectGenerator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void generateQ(Question q, int qIndex, PDDocument pdDocument, PDPage curPage, int widthOffset,
|
public void generateQCM(Question q, int qIndex, PDDocument pdDocument, PDPage curPage, int widthOffset,
|
||||||
int heightOffset) {
|
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 {
|
try {
|
||||||
// Il faut rendre plus générale la génération des Q (en fonction du nombre de
|
// Il faut rendre plus générale la génération des Q (en fonction du nombre de
|
||||||
// réponses, recycler le heightOffset)
|
// réponses, recycler le heightOffset)
|
||||||
@ -457,6 +468,7 @@ public class SubjectGenerator {
|
|||||||
|
|
||||||
// Titre
|
// Titre
|
||||||
// Si titre plus long que largeur page -> mise sur plusieurs lignes
|
// Si titre plus long que largeur page -> mise sur plusieurs lignes
|
||||||
|
// TODO: revoir structure (factorisation possible)
|
||||||
if (titleLength > (this.width - 20)) {
|
if (titleLength > (this.width - 20)) {
|
||||||
pdPageContentStream.beginText();
|
pdPageContentStream.beginText();
|
||||||
pdPageContentStream.newLineAtOffset(widthOffset, this.height - heightOffset);
|
pdPageContentStream.newLineAtOffset(widthOffset, this.height - heightOffset);
|
||||||
@ -478,17 +490,35 @@ public class SubjectGenerator {
|
|||||||
pdPageContentStream.endText();
|
pdPageContentStream.endText();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reponses (QCM)
|
ArrayList<Reponse> reponses = q.getReponses();
|
||||||
/// Rectangle
|
// si les reponses doivent etre melangees
|
||||||
// pdPageContentStream.addRect(widthOffset + 20, height - heightOffset - 15,
|
if (this.config.getParam().get("ShuffleAnswers") == "1") {
|
||||||
// 100, 100);
|
Collections.shuffle(reponses);
|
||||||
|
}
|
||||||
/// Texte
|
// pour chaque reponse
|
||||||
for (int i = 0; i < q.getReponses().size(); i++) {
|
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.beginText();
|
||||||
pdPageContentStream.newLineAtOffset(widthOffset + 40, this.height - heightOffset - 15);
|
pdPageContentStream.newLineAtOffset(widthOffset + 40, this.height - heightOffset - 15);
|
||||||
pdPageContentStream.showText(q.getReponses().get(i).getIntitule());
|
pdPageContentStream.showText(r.getIntitule());
|
||||||
pdPageContentStream.endText();
|
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;
|
heightOffset += 17.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -509,6 +539,10 @@ public class SubjectGenerator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void generateOpenQ() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public static ArrayList<String> setTextOnMultLines(String text, int widthOffset, PDDocument pdDocument, PDFont font,
|
public static ArrayList<String> setTextOnMultLines(String text, int widthOffset, PDDocument pdDocument, PDFont font,
|
||||||
int fontSize) {
|
int fontSize) {
|
||||||
// TODO: voir si l'on laisse en static ou non
|
// TODO: voir si l'on laisse en static ou non
|
||||||
@ -584,6 +618,7 @@ public class SubjectGenerator {
|
|||||||
|
|
||||||
// instanciate a new SubjectGenerator
|
// instanciate a new SubjectGenerator
|
||||||
// TODO: change PDRectangle.A4 to the format specified in the config
|
// 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 subjectGenerator = new SubjectGenerator(c, 5, PDRectangle.A4);
|
||||||
|
|
||||||
subjectGenerator.generateHeader();
|
subjectGenerator.generateHeader();
|
||||||
@ -591,7 +626,7 @@ public class SubjectGenerator {
|
|||||||
// subjectGenerator.generateNumEtudAreaBis();
|
// subjectGenerator.generateNumEtudAreaBis();
|
||||||
// subjectGenerator.generateNameArea();
|
// subjectGenerator.generateNameArea();
|
||||||
subjectGenerator.generateFooter();
|
subjectGenerator.generateFooter();
|
||||||
subjectGenerator.generateBody();
|
subjectGenerator.generateBody(false); // false = on genere le sujet, pas le corrige
|
||||||
|
|
||||||
subjectGenerator.save("E:\\testPDFMarks.pdf");
|
subjectGenerator.save("E:\\testPDFMarks.pdf");
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user