1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
| #!/usr/bin/python
#-*- coding: utf-8 -*-
from __future__ import division
import sys, os
from PyQt4.QtCore import *
from PyQt4.QtGui import *
#from PyQt4.QtWebKit import *
class Html_vers_pdf_fiche_eleve(QPrinter):
def __init__(self, niv_de_classe, nbre_seances, titre_prog, num_seq, incitation, demande, vocabulaire, questions, texte_ref_art_1, texte_ref_art_2, texte_ref_art_3, vignette_img_src_1, vignette_img_src_2, vignette_img_src_3, liste_comp_et_pts_chiffres, marge_gauche, marge_droite, marge_haute, marge_basse, police_normaux_caracteres, police_petits_caracteres):
super(Html_vers_pdf_fiche_eleve, self).__init__(QPrinter.HighResolution)
# Rubriques ...
variable_001 = "Classe :"
variable_002 = "Date :"
variable_003 = "Durée :"
variable_004 = "Nom :"
variable_005 = "Prénom :"
variable_006 = "Titre de la progression :"
variable_007 = "Séquence n° :"
variable_008 = "Incitation :"
variable_009 = "Demande :"
variable_010 = "Vocabulaire :"
variable_011 = "Questions (répondre derrière cette feuille) EVENTUELLEMENT ECRIRE UN COMMENTAIRE :"
variable_012 = ''
variable_014 = "Travaux d'artistes (références) :"
variable_015 = "Les élèves, évaluez vontre travail en utilisant les smileys juste en dessous de Eval Elève"
variable_016 = "Eval Elève"
variable_017 = "Evaluation Professeur"
variable_018 = "Ci-dessous se trouvent les critères d'évaluation des compétences travaillées en arts plastiques"
# HTML ; écriture de l'entête
html_entete = '''<html><head><title></title>'''+'''\n'''+'''<style type="text/css">'''+'''\n'''+'''table { border-style:solid;border-width:1.2px;border-color:#6e6e6e;font-size:'''+str(police_normaux_caracteres)+'''pt;font-family: "DejaVu Sans, sans-serif" }'''+'''\n'''+'''</style>'''+'''\n'''+'''</head>'''+'''\n'''+'''<body>'''+'''\n'''
html_entete = html_entete.decode('utf-8')
# HTML ; écriture du niveau de classe, de la date et de la durée
html_tab_ligne_0 = '''<table width="100%" cellpadding="3"
cellspacing="0.5">'''+'''\n'''+'''<tr>'''+'''\n'''+'''<td width="22%"><p><b>'''+str(variable_001)+''' '''+str(niv_de_classe)+'''ème</b></p></td>'''+'''\n'''+'''<td width="35%"><p><b>'''+str(variable_002)+'''</b></p></td>'''+'''\n'''+'''<td width="43%"><p><b>'''+str(variable_003)+''' '''+nbre_seances+'''</b></p></td>'''+'''\n'''+'''</tr>'''+'''\n'''+'''</table>'''+'''\n'''
html_tab_ligne_0 = html_tab_ligne_0.decode('utf-8')
# HTML ; écriture du nom et du prénom
html_tab_ligne_1 = '''<table width="100%" cellpadding="3"
cellspacing="0.5">'''+'''\n'''+'''<tr>'''+'''\n'''+'''<td width="50%"><p><b>'''+str(variable_004)+'''</b></p></td>'''+'''\n'''+'''<td width="50%"><p><b>'''+str(variable_005)+'''</b></p></td>'''+'''\n'''+'''</tr>'''+'''\n'''+'''</table>'''+'''\n'''
html_tab_ligne_1 = html_tab_ligne_1.decode('utf-8')
# HTML ; écriture du titre de la progression et du numéro de la séquence
html_tab_ligne_2 = '''<table width="100%" cellpadding="3"
cellspacing="0.6">'''+'''\n'''+'''<tr>'''+'''\n'''+'''<td width="83%"><p><b><u>'''+str(variable_006)+'''</u>'''+''' '''+titre_prog+'''</b></p></td>'''+'''\n'''+'''<td width="17%"><p><u><b>'''+str(variable_007)+'''</u>'''+''' <b>'''+str(num_seq)+'''</b></p></td>'''+'''\n'''+'''</tr>'''+'''\n'''+'''</table>'''+'''\n'''
html_tab_ligne_2 = html_tab_ligne_2.decode('utf-8')
# HTML ; écriture de l'incitation
html_tab_ligne_3 = '''<table width="100%" cellpadding="3"
cellspacing="0.5">'''+'''\n'''+'''<tr>'''+'''\n'''+'''<td width="100%" bgcolor="#e1dede"><p><b><u>'''+str(variable_008)+'''</u>'''+''' '''+incitation+'''</b></p></td>'''+'''\n'''+'''</tr>'''+'''\n'''+'''</table>'''+'''\n'''
html_tab_ligne_3 = html_tab_ligne_3.decode('utf-8')
# HTML ; écriture de la demande
html_tab_ligne_4 = '''<table width="100%" cellpadding="3"
cellspacing="0.6">'''+'''\n'''+'''<tr>'''+'''\n'''+'''<td width="100%" bgcolor="#e1dede"><p><b><u>'''+str(variable_009)+'''</u></b>'''+''' '''+demande+'''</p></td>'''+'''\n'''+'''</tr>'''+'''\n'''+'''</table>'''+'''\n'''
html_tab_ligne_4 = html_tab_ligne_4.decode('utf-8')
# HTML ; écriture de l'entête de la liste des mots de vocabulaire
html_tab_ligne_5 = '''<table width="100%" cellpadding="3"
cellspacing="0.5" bgcolor="#cccccc">'''+'''\n'''+'''<tr>'''+'''\n'''+'''<td width="100%"><p><b><u>'''+str(variable_010)+'''</u></b></p></td>'''+'''\n'''+'''</tr>'''+'''\n'''+'''</table>'''+'''\n'''
html_tab_ligne_5 = html_tab_ligne_5.decode('utf-8')
# HTML ; écriture de la liste des mots de vocabulaire
html_tab_ligne_6 = '''<table width="100%" cellpadding="3"
cellspacing="0.5">'''+'''\n'''+'''<tr>'''+'''\n'''+'''<td width="100%"><p>'''+vocabulaire+'''</p></td>'''+'''\n'''+'''</tr>'''+'''\n'''+'''</table>'''+'''\n'''
html_tab_ligne_6 = html_tab_ligne_6.decode('utf-8')
# HTML ; écriture de l'entête des questions posées aux élèves
html_tab_ligne_7 = '''<table width="100%" cellpadding="3"
cellspacing="0.5" bgcolor="#cccccc">'''+'''\n'''+'''<tr>'''+'''\n'''+'''<td width="100%"><p><u><b>'''+str(variable_011)+'''</b></u></p></td>'''+'''\n'''+'''</tr>'''+'''\n'''+'''</table>'''+'''\n'''
html_tab_ligne_7 = html_tab_ligne_7.decode('utf-8')
# HTML ; écriture des questions posées aux élèves
html_tab_ligne_8 = '''<table width="100%" cellpadding="3"
cellspacing="0.5">'''+'''\n'''+'''<tr>'''+'''\n'''+'''<td width="100%"><p><b>'''+questions+'''</b></p></td>'''+'''\n'''+'''</tr>'''+'''\n'''+'''</table>'''+'''\n'''
html_tab_ligne_8 = html_tab_ligne_8.decode('utf-8')
# HTML ; écriture de l'entête Travaux d'artistes (références)
html_tab_ligne_9 = '''<table width="100%" cellpadding="3"
cellspacing="0.5" bgcolor="#cccccc">'''+'''\n'''+'''<tr>'''+'''\n'''+'''<td width="100%"><p><u><b>'''+str(variable_014)+'''</b></u></p></td>'''+'''\n'''+'''</tr>'''+'''\n'''+'''</table>'''+'''\n'''
html_tab_ligne_9 = html_tab_ligne_9.decode('utf-8')
# HTML ; écriture du nom de l'artiste, de l'oeuvre, d'un résumé et des vignettes correspondantes
html_tab_ligne_10 = '''<table width="100%" cellpadding="3"
cellspacing="0.5">'''+'''\n'''+'''<tr>'''+'''\n'''+'''<td width="33%"><font color="#000000" size="'''+str(police_petits_caracteres)+'''pt" family="DejaVu Sans, sans-serif"><b>'''+texte_ref_art_1+'''</b></font><br />'''+'''<div align="center">'''+vignette_img_src_1+'''</div><p />'''+'''</td>'''+'''\n'''+'''<td width="33%"><font color="#000000" size="'''+str(police_petits_caracteres)+'''pt" family="DejaVu Sans, sans-serif"><b>'''+texte_ref_art_2+'''</b></font><br />'''+'''<div align="center">'''+vignette_img_src_2+'''</div><p />'''+'''</td>'''+'''\n'''+'''<td width="34%"><font color="#000000" size="'''+str(police_petits_caracteres)+'''pt" family="DejaVu Sans, sans-serif"><b>'''+texte_ref_art_3+'''</b></font><br />'''+'''<div align="center">'''+vignette_img_src_3+'''</div><p />'''+'''</td>'''+'''\n'''+'''</tr>'''+'''\n'''+'''</table>'''+'''\n'''
html_tab_ligne_10 = html_tab_ligne_10.decode('utf-8')
# HTML ; écriture de l'entête de l'évaluation
# élève et de l'évaluation professeur
html_tab_ligne_11 = '''<table width="100%" cellpadding="3"
cellspacing="0.5">'''+'''\n'''+'''<tr>'''+'''\n'''+'''<td width="69.8%" bgcolor="#696969"><font color="#E5E4E2" size="'''+str(police_petits_caracteres)+'''pt" family="DejaVu Sans, sans-serif"><p><b>'''+str(variable_015)+'''</b></p></font></td>'''+'''\n'''+'''<td width="11.2%" bgcolor="#acabab"><font color="#000000" size="'''+str(police_petits_caracteres)+'''pt"><p><b>'''+str(variable_016)+'''</b></p></font></td>'''+'''\n'''+'''<td width="19%" bgcolor="#696969"><font color="#E5E4E2" size="'''+str(police_petits_caracteres)+'''pt" family="DejaVu Sans, sans-serif"><p><b>'''+str(variable_017)+'''</b></p></font></td>'''+'''\n'''+'''</tr>'''+'''\n'''+'''</table>'''+'''\n'''
html_tab_ligne_11 = html_tab_ligne_11.decode('utf-8')
# HTML ; écriture de l'entête de l'évaluation des compétences
# travaillées en arts plastiques + les points chiffrés associés
html_tab_ligne_12 = '''<table width="100%" cellpadding="3"
cellspacing="0.5">'''+'''\n'''+'''<tr>'''+'''\n'''+'''<td width="70.2%" bgcolor="#979290"><font color="#ffffff" size="'''+str(police_petits_caracteres)+'''pt" family="DejaVu Sans, sans-serif"><p><b>'''+str(variable_018)+'''</b></p></font></td>'''+'''\n'''+'''<td width="3%">'''+'''\n'''+'''<img src="'''+os.getcwd()+'''/smileys_evaluation/smiley_pas_content_orange_18x18.png" width="18" height="18">'''+'''\n'''+'''<td width="3%">'''+'''\n'''+'''<img src="'''+os.getcwd()+'''/smileys_evaluation/smiley_neutre_jaune_18x18.png" width="18" height="18">'''+'''\n'''+'''<td width="3%">'''+'''\n'''+'''<img src="'''+os.getcwd()+'''/smileys_evaluation/smiley_content_vert_18x18.png" width="18" height="18">'''+'''\n'''+'''</td>'''+'''\n'''+'''<td width="2%" bgcolor="#ff9900"><font color="#000000" size="'''+str(police_petits_caracteres)+'''pt" family="DejaVu Sans, sans-serif"><p><b>I</b></p></font></td>'''+'''\n'''+'''<td width="2%" bgcolor="#ffff00"><font color="#000000" size="'''+str(police_petits_caracteres)+'''pt"><p><b>F</b></p></font></td>'''+'''\n'''+'''<td width="2%" bgcolor="#99ff33"><font color="#000000" size="'''+str(police_petits_caracteres)+'''pt" family="DejaVu Sans, sans-serif"><p><b>S</b></p></font></td>'''+'''\n'''+'''<td width="2%" bgcolor="#66ff00"><font color="#000000" size="'''+str(police_petits_caracteres)+'''pt" family="DejaVu Sans, sans-serif"><p><b>TB</b></p></font></td>'''+'''\n'''+'''<td width="11%" bgcolor="#99ffcc"><font color="#000000" size="'''+str(police_petits_caracteres)+'''pt" family="DejaVu Sans, sans-serif"><p><b>Pts Chiffrés</b></p></font></td>'''+'''\n'''+'''</tr>'''+'''\n'''+'''</table>'''+'''\n'''
html_tab_ligne_12 = html_tab_ligne_12.decode('utf-8')
# HTML ; écriture des critères d'évaluation
# -----------------------------------------
# Liste des critères d'évaluation
html_tab_ligne_13 = []
# Boucle qui remplit la liste des critères d'évaluation
for comp_pts in enumerate(liste_comp_et_pts_chiffres) :
competence = liste_comp_et_pts_chiffres[comp_pts[0]][0]
points = liste_comp_et_pts_chiffres[comp_pts[0]][1]
html_tab_ligne_13.append('''<table width="100%" cellpadding="3"
cellspacing="0.5">'''+'''\n'''+'''<tr>'''+'''\n'''+'''<td width="70.2%" bgcolor="#ffffff"><font color="#000000" size="'''+str(police_petits_caracteres)+'''pt" family="DejaVu Sans, sans-serif"><p><b>'''+competence+'''</b></p></font></td>'''+'''\n'''+'''<td width="3.73%">'''+'''\n'''+''' '''+'''\n'''+'''<td width="3.73%">'''+'''\n'''+''' '''+'''\n'''+'''<td width="3.66%">'''+'''\n'''+''' '''+'''\n'''+'''</td>'''+'''\n'''+'''<td width="1.95%" bgcolor="#ff9900"><font color="#000000" size="'''+str(police_petits_caracteres)+'''pt" family="DejaVu Sans, sans-serif"><p><b> </b></p></font></td>'''+'''\n'''+'''<td width="2%" bgcolor="#ffff00"><font color="#000000" size="'''+str(police_petits_caracteres)+'''pt"><p><b> </b></p></font></td>'''+'''\n'''+'''<td width="2.1%" bgcolor="#99ff33"><font color="#000000" size="'''+str(police_petits_caracteres)+'''pt" family="DejaVu Sans, sans-serif"><p><b> </b></p></font></td>'''+'''\n'''+'''<td width="2.6%" bgcolor="#66ff00"><font color="#000000" size="'''+str(police_petits_caracteres)+'''pt" family="DejaVu Sans, sans-serif"><p><b> </b></p></font></td>'''+'''\n'''+'''<td width="11%" bgcolor="#99ffcc"><font color="#000000" size="'''+str(police_petits_caracteres)+'''pt" family="DejaVu Sans, sans-serif"><p><b><div align="right"> /'''+points+'''</div></b></p></font></td>'''+'''\n'''+'''</tr>'''+'''\n'''+'''</table>'''+'''\n''')
html_tab_ligne_13 = ''.join(html_tab_ligne_13).decode('utf-8')
# # HTML ; écriture de la fin de la page
html_body_html_final = '''</body></html>'''
html_body_html_final = html_body_html_final.decode('utf-8')
#
self.doc = QTextDocument()
# Ecriture de la syntaxe HTML finale
self.doc.setHtml(html_entete + html_tab_ligne_0 + html_tab_ligne_1 + html_tab_ligne_2 + html_tab_ligne_3 + html_tab_ligne_4 + html_tab_ligne_5 + html_tab_ligne_6 + html_tab_ligne_7 + html_tab_ligne_8 + html_tab_ligne_9 + html_tab_ligne_10 + html_tab_ligne_11 + html_tab_ligne_12 + html_tab_ligne_13 + html_body_html_final)
# Ecriture du fichier PDF par QPrinter
self.printer = QPrinter(QPrinter.HighResolution)
self.printer.setOutputFormat(QPrinter.PdfFormat)
self.printer.setOrientation(QPrinter.Portrait)
self.printer.setPaperSize(QPrinter.A4)
# La taille des marges est convertie en millimètres
self.printer.setPageMargins(int(marge_gauche*10), int(marge_droite*10), int(marge_haute*10), int(marge_basse*10), QPrinter.Millimeter)
#self.printer.setResolution(72)
print u"Le fichier pdf a été crée !"
self.printer.setOutputFileName("essaiPDF.pdf")
"""
###################### ESSAI pied de page ... je ne comprend pas tout !
print 'self.printer.resolution()', self.printer.resolution()
mm = 25.4 * self.printer.resolution()
print 'mm', mm
# ---------------------------------------
# --> https://pl.python.org/forum/index.php?action=profile;u=1626;sa=showPosts;start=75
innerRect = self.printer.pageRect() ################
innerRect.setBottom(innerRect.bottom() - 300) ##############
contentRect = QRectF(0, 0, self.printer.width(), self.doc.size().height()) ##########
currentRect = QRectF(0, 0, innerRect.width(), innerRect.height()) ################
self.doc.setTextWidth(currentRect.width() - 20) ###################
print "self.doc.size().height()", self.doc.size().height() ############
print "currentRect.width()", currentRect.width() #############
print "currentRect", currentRect ###############
# -----------------------------------------
self.painter = QPainter()
#self.painter = QPainter(self.printer)
#self.painter.save()
self.painter.begin(self.printer)
# configurer la police de caractères
self.painter.setFont(QFont("DejaVu Sans, sans-serif", 12))
self.painter.setPen(QColor(0, 0, 0))
# rectangle d'impression du texte (coordonnées du papier)
self.rect = self.printer.pageRect()
print "self.rect", self.rect
# mettre pour le doc le même rectangle d'impression que printer
self.doc.setPageSize(QSizeF(QSize(self.rect.size().width(), self.rect.size().height())))
dimension_page = self.printer.paperSize(QPrinter.Millimeter)
hauteur = dimension_page.height()
largeur = dimension_page.width()
print "Dimension de la page : ", str(hauteur)+"x"+str(largeur)
#
texte_pied_de_page = '''"'''+titre_prog[7:-7]+'''" ['''+str(niv_de_classe)+'ème] '+''' '''+'SEQ '+str(num_seq)
self.painter.drawText(QRectF(0, 0, 9000, 13500), Qt.AlignCenter|Qt.AlignBottom, texte_pied_de_page.decode('utf-8'))
#self.painter.drawText(currentRect, Qt.AlignCenter|Qt.AlignBottom, texte_pied_de_page.decode('utf-8'))
#self.painter.drawText(self.rect_b, QtCore.Qt.AlignVCenter | QtCore.Qt.AlignHCenter, "Bas de page")
#self.painter.save()
self.painter.end()
###################### ESSAI pied de page ... je ne comprend pas tout !
"""
self.doc.print_(self.printer)
if __name__ == '__main__':
app = QApplication(sys.argv)
#############################################
# Juste pour l'exemple ici, assignation des données
#
# (Réglages) Valeurs des marges
marge_gauche = 0.90 # marge en cm
marge_droite = 0.90 # marge en cm
marge_haute = 0.90 # marge en cm
marge_basse = 0.90 # marge en cm
#
# (Réglages) Taille de la police
# ------------------------------------------
# Texte partie générale (taille de la police)
taille_police_texte_general = 9
# Texte travaux d'artistes et évaluation (taille de la police)
taille_police_trav_artist_et_eval = 7
#
liste_vocab = ['<b><u>Mot de vocabulaire 1 :</u></b> La définition du mot de vocabulaire 1 ... '+'bla bla blablablabla '*10+'<br />', '<b><u>Mot de vocabulaire 2 :</u></b> La définition du mot de vocabulaire 2.<br />', '<b><u>Mot de vocabulaire 3 :</u></b> La définition du mot de vocabulaire 3 ...'+'bla bla blablablabla '*14+'<br />', '<b><u>Mot de vocabulaire 4 :</u></b> La définition du mot de vocabulaire 4 ...'+'bla bla blablablabla '*17+'<br />', '<b><u>Mot de vocabulaire 5 :</u></b> La définition du mot de vocabulaire 5.<br />', '<b><u>Mot de vocabulaire 6 :</u></b> La définition du mot de vocabulaire 6.<br />', '<b><u>Mot de vocabulaire 7 :</u></b> La définition du mot de vocabulaire 7 ...'+'bla bla blablablabla '*5+'<br />', '<b><u>Mot de vocabulaire 8 :</u></b> La définition du mot de vocabulaire 8.']
#
liste_questions = ["1) Est-ce que QPrinter est intéressant ?, ... oui en fait.<br />", "2) Est-ce que c'est facile à manipuler ?, ... oui quand on a compris comment ça fonctionne.<br />", "3) Est-ce que QPrinter est pratique ?, ... oui oui !, dans mon cas pour faire quelque chose en full Python, sans devoir appeler (et embarquer) un programme tiers."]
#
liste_textes_art = ['''* Tom Wesselmann, "Still Life 20" (1962). Résumé du contexte de l'oeuvre ... '''+"bla bla blablablabla "*16, '''* Georges Meliès, "Le voyage dans la lune" (1902). Résumé du contexte de l'oeuvre ...'''+"bla bla blablablabla "*18, '''* Louise Nevelson, "Sky cathedral" (1958) ... bois peint en noir ...'''+"bla bla blablablabla "*10]
#
liste_img_src_ref_art = ['''<img src="'''+os.getcwd()+'''/z_img_essai_pour_qprinter/tom_wesselmann_still_life_20_vue_01.jpg"'''+''' width="200" height="196" />''', '''<img src="'''+os.getcwd()+'''/z_img_essai_pour_qprinter/georges_melies_le_voyage_ds_la_lune_1902.png"'''+''' width="200" height="150" />''', '''<img src="'''+os.getcwd()+'''/z_img_essai_pour_qprinter/louise_nevelson_sky_cathedral_bois_peint_en_noir_1958.png"'''+''' width="200" height="159" />''']
#
liste_criteres_eval = ["Critère d'évaluation 1"+" Blabla bla"*10, "Critère d'évaluation 2"+" Blabla bla"*8, "Critère d'évaluation 3"+" Blabla bla"*5]
liste_points_chiffres = ['8', '4', '8']
#
liste_pts_et_comp = zip(liste_criteres_eval, liste_points_chiffres)
#############################################
# Appel de la classe
Html_vers_pdf_fiche_eleve(3, "2 à 3 séances", "" Une progression avec un titre "", 1, "" Une incitation qui n'en dit pas trop ! "", "La demande est faite pour faire en sorte que l'élève comprenne un peu plus ce qu'il y a à faire mais en même temps cette demande ne lui donne pas trop de pistes de travail afin que la situation problème (énoncée par l'incitation) soit tout de même présente."+" Blabla blablabla "+"blablabla blabla"*32, ''.join(liste_vocab), ''.join(liste_questions), liste_textes_art[0], liste_textes_art[1], liste_textes_art[2], liste_img_src_ref_art[0], liste_img_src_ref_art[1], liste_img_src_ref_art[2], liste_pts_et_comp, marge_gauche, marge_droite, marge_haute, marge_basse, taille_police_texte_general, taille_police_trav_artist_et_eval) |
Partager