我使用reportlab输入PDF文档,以便在标签纸上打印,这样我的列的高度和宽度是固定的。 我使用这行代码来修复标签的高度和狂野
Table(data, colWidths=(6.3 * cm, 0.3 * cm, 6.3 * cm, 0.3 * cm, 6.3 * cm),rowHeights=[3.8 * cm] * (len(data)))
我可以生成我想要的内容,但有时文本比标签的高度高。例如,在第一个标签上,您可以看到上面有文字“Acide Gadoterique Ser pre 10ml”
我的问题
我已经搜索过像我这样的stackoverflow问题,但是所有问题都可以通过修改表格的高度和宽度来回答,在这种情况下,这是不可能的,因为这两个值需要保持不变。
我知道我将使用 fontsize 属性,但我不知道如何设置条件以及什么值来更改字体大小。
你可以看到我用来生成pdf的所有行代码
def impression_etiquette(self):
# permet de generer le nom du document
nom_service = self.frame_impression.encodage_donne()['Service']
# on va recupere le type de dotation
type_dotation = self.frame_impression.encodage_donne()['Type de dotation']
if type_dotation == "Besoins urgents":
table = 'Liens_dotation'
elif type_dotation == "Plein vide":
table = 'Liens_pv'
elif type_dotation == "Dotation medicament":
table = 'Liens_dot_medoc'
else:
return
ligne = 0
colonne = 0
data = []
compteur_ligne_vide =0
hauteur_ligne = [6.3 * cm]
# la variable ligne permet de changer de ligne a chaque fois que 3 etiquettes sont pleines
# la variable colonne permet de sélectionner les etiquettes pleines et non pas les espaces entre
# les datas vont contenir les information à afficher dans les étiquettes
# A c haque boucle on va creer un contenu cellule , on ajoute les informations au fur et à mesure et on fait un retour
# à la ligne
style_tableau_etiquette = TableStyle(
[
('ALIGN', (0, 0), (-1, -1), 'CENTER'),
('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
('GRID', (0, 0), (-1, -1), 0.5, colors.white)
]
)
styleTitre = ParagraphStyle('styleTitre',
alignment=enums.TA_CENTER,
)
#on va regarder pour ajouter le nom du service
reponse = messagebox.askyesno(title="Vous êtes surs ?",
message="Souhaitez vous faire apparaitre le nom du service sur l'etiquette ?",
parent=self.top_level)
apparaitre_nom_service = 0
if reponse is True:
apparaitre_nom_service = 1
else:
apparaitre_nom_service = 0
# on va regader pour afficher les quantites X/X
reponse_division = messagebox.askyesno(title="Vous êtes surs ?",
message="Souhaitez vous afficher la dotation sur le mode X/X",
parent=self.top_level)
affichage_fraction = 0
if reponse_division is True:
affichage_fraction = 1
else:
affichage_fraction = 0
# on va regader dans quel sens on va imprimer
reponse_sens = messagebox.askyesno(title="Vous êtes surs ?",
message="Souhaitez vous imprimer en format portrait ?",
parent=self.top_level)
sens_impression = 0
if reponse_sens is True:
sens_impression = 1
else:
sens_impression = 0
###################" on va imprimer les etiquettes
for i in range(len(self.liste_etiquette_imprimer)):
contenu_cellule = ""
if self.liste_etiquette_imprimer[i][0] == 1:
contenu_cellule = contenu_cellule + "<font color='#ff0000'> MEDICAMENT A RISQUE </font> <br/>"
contenu_cellule = contenu_cellule + "<b>" + self.liste_etiquette_imprimer[i][1] + "</b> <br/>"
contenu_cellule = contenu_cellule + "CP : " + str(self.liste_etiquette_imprimer[i][2]) + "<br/>"
if self.liste_etiquette_imprimer[i][5] != "":
contenu_cellule = contenu_cellule + "Référence : " + str(self.liste_etiquette_imprimer[i][5]) + "<br/>"
# on va diviser la quantite par deux si besoins
try:
quantite_dotation=int(self.liste_etiquette_imprimer[i][3])
except:
quantite_dotation = self.liste_etiquette_imprimer[i][3]
if affichage_fraction==1 and quantite_dotation !="":
quantite_diviser=int(quantite_dotation/2)
if quantite_diviser==0:
quantite_diviser=1
contenu_cellule = contenu_cellule + "Dotation : " + str(quantite_diviser) + "/" + str(quantite_diviser) + "<br/><br/>"
else:
contenu_cellule = contenu_cellule + "Dotation : " + str(quantite_dotation) + "<br/><br/>"
# on va ajouter le service si besoins
if apparaitre_nom_service == 1:
contenu_cellule = contenu_cellule + nom_service.upper() + "<br/><br/>"
# on va faire un double contour avec une grosse ligne en couleur et une ligne plus fine en blanc
if self.liste_etiquette_imprimer[i][4] == "Liste I":
contenu_cellule = contenu_cellule + "<font color='#ff0000'>LISTE 1 - RESPECTER LES DOSES PRESCRITES</font>"
style_tableau_etiquette.add('BOX', (colonne, ligne), (colonne, ligne), 6, colors.red)
style_tableau_etiquette.add('BOX', (colonne, ligne), (colonne, ligne), 2, colors.white)
elif self.liste_etiquette_imprimer[i][4] == "Liste II":
contenu_cellule = contenu_cellule + "<font color='#00ff40'>LISTE 2 - RESPECTER LES DOSES PRESCRITES</font>"
style_tableau_etiquette.add('BOX', (colonne, ligne), (colonne, ligne), 6, colors.green)
style_tableau_etiquette.add('BOX', (colonne, ligne), (colonne, ligne), 2, colors.white)
if sens_impression==1:
# on va regarder comment on ajoute les contenu de cellules , on doit avoir un format data suivant
# [["1", "", "2", "", "3"], ["4", "", "5", "", "6"]] , on doit donc savoir si data est plein ou pas
# on commence par regarder combien de liste il y a dans le data avec la longeur du data
# puis on regarde si il y a une liste, a quel point est elle remplie
styleTitre = ParagraphStyle('styleTitre',
alignment=enums.TA_CENTER,
)
longeur_data = len(data)
longeur_table_data = 0
if longeur_data == 0:
pass
else:
longeur_table_data = len(data[longeur_data - 1])
# on regarde si qu'on on ajoute on depasse les 5 elements par sous array
if colonne + 2 > 5:
ligne = ligne + 1
colonne = 0
else:
colonne = colonne + 2
if longeur_data == 0:
data.append([Paragraph(contenu_cellule, styleTitre), ""])
else:
if longeur_table_data < 4:
data[longeur_data - 1].append(Paragraph(contenu_cellule, styleTitre))
data[longeur_data - 1].append("")
elif longeur_table_data == 4:
data[longeur_data - 1].append(Paragraph(contenu_cellule, styleTitre))
else:
data.append([Paragraph(contenu_cellule, styleTitre), ""])
else:
# on va regarder comment on ajoute les contenu de cellules , on doit avoir un format data suivant
# [["1", "2", "3","4","5","6","7"], ["", "", "", "", "","","",]] , on doit donc savoir si data est plein ou pas
# on commence par regarder combien de iste il y a dans le data avec la longeur du data
# puis on regarde si il y a une liste, a quel point est elle remplie. Longeur_table_data est la longeur de
# l'array en cours de remplisage
styleTitre = ParagraphStyle('styleTitre',
alignment=enums.TA_CENTER,
fontSize=9)
longeur_data = len(data)
longeur_table_data = 0
if longeur_data == 0:
pass
else:
longeur_table_data = len(data[longeur_data - 1])
# on regarde su quel colonne nous sommes, on ne doit pas dépasser 7, on va utiliser la longeur du dernier
# array remplie pour savoir ce qu'on fait soit il est vide et on ajoute le contenue de la cellule
# soit on depasse les 7 etiquettes sans depasser les 5 lignes par feuille et on ajoute un ligne vide
# mais aussi le contennue de la premiere cellule de la nouvelle ligne de la meme feuille et la hauteur des deux lignes ,
# soit on a depasser les 5 ligne par feuille et les 7 elements par lignesdonc on ajoute uniquement
# le contenue de la nouvelle cellule sans ajouter de ligne vide et une seule hauteur
# soit aucun des cas et on ajoute le contenue de la cellule à la suite de la precedente
if longeur_table_data==0:
data.append([Paragraph(contenu_cellule, styleTitre)])
colonne = colonne + 1
elif ((longeur_table_data+1)>7 and compteur_ligne_vide!=3) :
data.append(["", "", "", "", "", "", ""])
data.append([Paragraph(contenu_cellule, styleTitre)])
ligne = ligne + 2
colonne =1
compteur_ligne_vide=compteur_ligne_vide+1
hauteur_ligne = hauteur_ligne + [0.3* cm,6.3*cm]
elif ((longeur_table_data+1)>7 and compteur_ligne_vide==3) :
data.append([Paragraph(contenu_cellule, styleTitre)])
ligne = ligne + 1
compteur_ligne_vide=0
colonne =1
hauteur_ligne= hauteur_ligne + [6.3* cm]
else:
data[longeur_data - 1].append(Paragraph(contenu_cellule, styleTitre))
colonne = colonne + 1
# on va regarder combien il y a d'etiquette si pas assez oon rajoute des donnes vide pour avoir au moins
# une ligne complete
if sens_impression==1:
# on va regarder combien il y a d'etiquette si pas assez oon rajoute des donnes vide pour avoir au moins
# une ligne complete
if len(data) == 1 and len(data[longeur_data - 1]) == 2:
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
elif len(data) == 1 and len(data[longeur_data - 1]) == 4:
data[longeur_data - 1].append('')
# on va creer le tableau, attention car si on met plus de ligne en taille que ce qu'il y en vrai ça plante , donc
# on va multiplier la hauteur des ligne par le nombre de ligne
try:
tableau_frequence = Table(data, colWidths=(6.3 * cm, 0.3 * cm, 6.3 * cm, 0.3 * cm, 6.3 * cm),
rowHeights=[3.8 * cm] * (len(data)))
except:
tableau_frequence = Table(data, colWidths=(6.3 * cm, 0.3 * cm, 6.3 * cm, 0.3 * cm, 6.3 * cm),
rowHeights=[3.8 * cm] * (ligne + 1))
tableau_frequence.setStyle(style_tableau_etiquette)
parts = []
parts.append(tableau_frequence)
nom_fichier = "Etiquette_test_" + table + "_" + str(nom_service) + ".pdf"
pdf = SimpleDocTemplate(nom_fichier, pagesize=A4,
topMargin=1.36 * cm,
leftMargin=0.54 * cm,
rightMargin=0.7 * cm,
bottomMargin=0.5 * cm)
pdf.build(parts)
messagebox.showinfo(title="Felicitation", message="L'impression des étiquettes c'est bien déroulée")
id_service = Service.recherche_id(nom_service)
Historique.impression_etiquette(objet_utilisateur.utilisateur_en_cours.id, table, id_service)
else:
if len(data) == 1 and len(data[longeur_data - 1]) == 1:
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
elif len(data) == 1 and len(data[longeur_data - 1]) == 2:
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
elif len(data) == 1 and len(data[longeur_data - 1]) == 3:
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
elif len(data) == 1 and len(data[longeur_data - 1]) == 4:
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
elif len(data) == 1 and len(data[longeur_data - 1]) == 5:
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
elif len(data) == 1 and len(data[longeur_data - 1]) == 6:
data[longeur_data - 1].append('')
# on va creer le tableau, attention car si on met plus de ligne en taille que ce qu'il y en vrai ça plante , donc
# on va multiplier la hauteur des ligne par le nombre de ligne
tableau_frequence = Table(data, colWidths=(3.8 * cm, 3.8 * cm, 3.8 * cm, 3.8 * cm, 3.8 * cm,3.8 * cm,3.8 * cm),
rowHeights=hauteur_ligne)
tableau_frequence.setStyle(style_tableau_etiquette)
parts = []
parts.append(tableau_frequence)
nom_fichier = "Etiquette_test_" + table + "_" + str(nom_service) + ".pdf"
pdf = SimpleDocTemplate(nom_fichier, pagesize=(A4[1],A4[0]),
topMargin=0.4 * cm,
leftMargin=0.36 * cm,
rightMargin=0.5 * cm,
bottomMargin=0.54 * cm)
pdf.build(parts)
messagebox.showinfo(title="Felicitation", message="L'impression des étiquettes c'est bien déroulée")
id_service = Service.recherche_id(nom_service)
Historique.impression_etiquette(objet_utilisateur.utilisateur_en_cours.id,table,id_service)
我找到了解决办法。我做了 2 个函数:
当我完成生成单元格文本时,我使用函数 adjustment_font_size_to_fit 给出完美的字体大小。当我有了完美的字体大小时,我使用
<font size='x'></font>
来更改文本单元格的字体大小。
def impression_etiquette(self):
# permet de generer le nom du document
nom_service = self.frame_impression.encodage_donne()['Service']
# on va recupere le type de dotation
type_dotation = self.frame_impression.encodage_donne()['Type de dotation']
if type_dotation == "Besoins urgents":
table = 'Liens_dotation'
elif type_dotation == "Plein vide":
table = 'Liens_pv'
elif type_dotation == "Dotation medicament":
table = 'Liens_dot_medoc'
else:
return
ligne = 0
colonne = 0
data = []
compteur_ligne_vide =0
hauteur_ligne = [6.3 * cm]
# la variable ligne permet de changer de ligne a chaque fois que 3 etiquettes sont pleines
# la variable colonne permet de sélectionner les etiquettes pleines et non pas les espaces entre
# les datas vont contenir les information à afficher dans les étiquettes
# A c haque boucle on va creer un contenu cellule , on ajoute les informations au fur et à mesure et on fait un retour
# à la ligne
style_tableau_etiquette = TableStyle(
[
('ALIGN', (0, 0), (-1, -1), 'CENTER'),
('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
('GRID', (0, 0), (-1, -1), 0.5, colors.white)
]
)
styleTitre = ParagraphStyle('styleTitre',
alignment=enums.TA_CENTER,
)
#on va regarder pour ajouter le nom du service
reponse = messagebox.askyesno(title="Vous êtes surs ?",
message="Souhaitez vous faire apparaitre le nom du service sur l'etiquette ?",
parent=self.top_level)
apparaitre_nom_service = 0
if reponse is True:
apparaitre_nom_service = 1
else:
apparaitre_nom_service = 0
# on va regader pour afficher les quantites X/X
reponse_division = messagebox.askyesno(title="Vous êtes surs ?",
message="Souhaitez vous afficher la dotation sur le mode X/X",
parent=self.top_level)
affichage_fraction = 0
if reponse_division is True:
affichage_fraction = 1
else:
affichage_fraction = 0
# on va regader dans quel sens on va imprimer
reponse_sens = messagebox.askyesno(title="Vous êtes surs ?",
message="Souhaitez vous imprimer en format portrait ?",
parent=self.top_level)
sens_impression = 0
if reponse_sens is True:
sens_impression = 1
else:
sens_impression = 0
###################" on va imprimer les etiquettes
for i in range(len(self.liste_etiquette_imprimer)):
contenu_cellule = ""
if self.liste_etiquette_imprimer[i][0] == 1:
contenu_cellule = contenu_cellule + "<font color='#ff0000'> MEDICAMENT A RISQUE </font> <br/>"
contenu_cellule = contenu_cellule + "<b>" + self.liste_etiquette_imprimer[i][1] + "</b> <br/>"
contenu_cellule = contenu_cellule + "CP : " + str(self.liste_etiquette_imprimer[i][2]) + "<br/>"
if self.liste_etiquette_imprimer[i][5] != "":
contenu_cellule = contenu_cellule + "Référence : " + str(self.liste_etiquette_imprimer[i][5]) + "<br/>"
# on va diviser la quantite par deux si besoins
try:
quantite_dotation=int(self.liste_etiquette_imprimer[i][3])
except:
quantite_dotation = self.liste_etiquette_imprimer[i][3]
if affichage_fraction==1 and quantite_dotation !="":
quantite_diviser=int(quantite_dotation/2)
if quantite_diviser==0:
quantite_diviser=1
contenu_cellule = contenu_cellule + "Dotation : " + str(quantite_diviser) + "/" + str(quantite_diviser) + "<br/><br/>"
else:
contenu_cellule = contenu_cellule + "Dotation : " + str(quantite_dotation) + "<br/><br/>"
# on va ajouter le service si besoins
if apparaitre_nom_service == 1:
contenu_cellule = contenu_cellule + nom_service.upper() + "<br/>"
# on va faire un double contour avec une grosse ligne en couleur et une ligne plus fine en blanc
if self.liste_etiquette_imprimer[i][4] == "Liste I":
contenu_cellule = contenu_cellule + "<font color='#ff0000'>LISTE 1 - RESPECTER LES DOSES PRESCRITES</font>"
style_tableau_etiquette.add('BOX', (colonne, ligne), (colonne, ligne), 6, colors.red)
style_tableau_etiquette.add('BOX', (colonne, ligne), (colonne, ligne), 2, colors.white)
elif self.liste_etiquette_imprimer[i][4] == "Liste II":
contenu_cellule = contenu_cellule + "<font color='#00ff40'>LISTE 2 - RESPECTER LES DOSES PRESCRITES</font>"
style_tableau_etiquette.add('BOX', (colonne, ligne), (colonne, ligne), 6, colors.green)
style_tableau_etiquette.add('BOX', (colonne, ligne), (colonne, ligne), 2, colors.white)
# on va dapter la taille du texte à l'etiquette
if sens_impression==1:
#on va calculer la taille de police
taille_police = int(self.adjust_font_size_to_fit(contenu_cellule, 6.3 * cm, 3.8 * cm))
contenu_cellule_finale = "<font size='" + str(taille_police) + "'>" + contenu_cellule + "</font>"
# on va regarder comment on ajoute les contenu de cellules , on doit avoir un format data suivant
# [["1", "", "2", "", "3"], ["4", "", "5", "", "6"]] , on doit donc savoir si data est plein ou pas
# on commence par regarder combien de liste il y a dans le data avec la longeur du data
# puis on regarde si il y a une liste, a quel point est elle remplie
styleTitre = ParagraphStyle('styleTitre',
alignment=enums.TA_CENTER,
)
longeur_data = len(data)
longeur_table_data = 0
if longeur_data == 0:
pass
else:
longeur_table_data = len(data[longeur_data - 1])
# on regarde si qu'on on ajoute on depasse les 5 elements par sous array
if colonne + 2 > 5:
ligne = ligne + 1
colonne = 0
else:
colonne = colonne + 2
if longeur_data == 0:
data.append([Paragraph(contenu_cellule_finale, styleTitre), ""])
else:
if longeur_table_data < 4:
data[longeur_data - 1].append(Paragraph(contenu_cellule_finale, styleTitre))
data[longeur_data - 1].append("")
elif longeur_table_data == 4:
data[longeur_data - 1].append(Paragraph(contenu_cellule_finale, styleTitre))
else:
data.append([Paragraph(contenu_cellule_finale, styleTitre), ""])
else:
# on va calculer la taille de police
taille_police = int(self.adjust_font_size_to_fit(contenu_cellule, 3.8 * cm, 6.3 * cm))
contenu_cellule_finale = "<font size='" + str(taille_police) + "'>" + contenu_cellule + "</font>"
# on va regarder comment on ajoute les contenu de cellules , on doit avoir un format data suivant
# [["1", "2", "3","4","5","6","7"], ["", "", "", "", "","","",]] , on doit donc savoir si data est plein ou pas
# on commence par regarder combien de iste il y a dans le data avec la longeur du data
# puis on regarde si il y a une liste, a quel point est elle remplie. Longeur_table_data est la longeur de
# l'array en cours de remplisage
styleTitre = ParagraphStyle('styleTitre',
alignment=enums.TA_CENTER,
)
longeur_data = len(data)
longeur_table_data = 0
if longeur_data == 0:
pass
else:
longeur_table_data = len(data[longeur_data - 1])
# on regarde su quel colonne nous sommes, on ne doit pas dépasser 7, on va utiliser la longeur du dernier
# array remplie pour savoir ce qu'on fait soit il est vide et on ajoute le contenue de la cellule
# soit on depasse les 7 etiquettes sans depasser les 5 lignes par feuille et on ajoute un ligne vide
# mais aussi le contennue de la premiere cellule de la nouvelle ligne de la meme feuille et la hauteur des deux lignes ,
# soit on a depasser les 5 ligne par feuille et les 7 elements par lignesdonc on ajoute uniquement
# le contenue de la nouvelle cellule sans ajouter de ligne vide et une seule hauteur
# soit aucun des cas et on ajoute le contenue de la cellule à la suite de la precedente
if longeur_table_data==0:
data.append([Paragraph(contenu_cellule_finale, styleTitre)])
colonne = colonne + 1
elif ((longeur_table_data+1)>7 and compteur_ligne_vide!=3) :
data.append(["", "", "", "", "", "", ""])
data.append([Paragraph(contenu_cellule_finale, styleTitre)])
ligne = ligne + 2
colonne =1
compteur_ligne_vide=compteur_ligne_vide+1
hauteur_ligne = hauteur_ligne + [0.3* cm,6.3*cm]
elif ((longeur_table_data+1)>7 and compteur_ligne_vide==3) :
data.append([Paragraph(contenu_cellule_finale, styleTitre)])
ligne = ligne + 1
compteur_ligne_vide=0
colonne =1
hauteur_ligne= hauteur_ligne + [6.3* cm]
else:
data[longeur_data - 1].append(Paragraph(contenu_cellule_finale, styleTitre))
colonne = colonne + 1
# on va regarder combien il y a d'etiquette si pas assez oon rajoute des donnes vide pour avoir au moins
# une ligne complete
if sens_impression==1:
# on va regarder combien il y a d'etiquette si pas assez oon rajoute des donnes vide pour avoir au moins
# une ligne complete
if len(data) == 1 and len(data[longeur_data - 1]) == 2:
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
elif len(data) == 1 and len(data[longeur_data - 1]) == 4:
data[longeur_data - 1].append('')
# on va creer le tableau, attention car si on met plus de ligne en taille que ce qu'il y en vrai ça plante , donc
# on va multiplier la hauteur des ligne par le nombre de ligne
try:
tableau_frequence = Table(data, colWidths=(6.3 * cm, 0.3 * cm, 6.3 * cm, 0.3 * cm, 6.3 * cm),
rowHeights=[3.8 * cm] * (len(data)))
except:
tableau_frequence = Table(data, colWidths=(6.3 * cm, 0.3 * cm, 6.3 * cm, 0.3 * cm, 6.3 * cm),
rowHeights=[3.8 * cm] * (ligne + 1))
tableau_frequence.setStyle(style_tableau_etiquette)
parts = []
parts.append(tableau_frequence)
nom_fichier = "Etiquette_test_" + table + "_" + str(nom_service) + ".pdf"
pdf = SimpleDocTemplate(nom_fichier, pagesize=A4,
topMargin=1.36 * cm,
leftMargin=0.54 * cm,
rightMargin=0.7 * cm,
bottomMargin=0.5 * cm)
pdf.build(parts)
messagebox.showinfo(title="Felicitation", message="L'impression des étiquettes c'est bien déroulée")
id_service = Service.recherche_id(nom_service)
Historique.impression_etiquette(objet_utilisateur.utilisateur_en_cours.id, table, id_service)
else:
if len(data) == 1 and len(data[longeur_data - 1]) == 1:
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
elif len(data) == 1 and len(data[longeur_data - 1]) == 2:
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
elif len(data) == 1 and len(data[longeur_data - 1]) == 3:
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
elif len(data) == 1 and len(data[longeur_data - 1]) == 4:
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
elif len(data) == 1 and len(data[longeur_data - 1]) == 5:
data[longeur_data - 1].append('')
data[longeur_data - 1].append('')
elif len(data) == 1 and len(data[longeur_data - 1]) == 6:
data[longeur_data - 1].append('')
# on va creer le tableau, attention car si on met plus de ligne en taille que ce qu'il y en vrai ça plante , donc
# on va multiplier la hauteur des ligne par le nombre de ligne
tableau_frequence = Table(data, colWidths=(3.8 * cm, 3.8 * cm, 3.8 * cm, 3.8 * cm, 3.8 * cm,3.8 * cm,3.8 * cm),
rowHeights=hauteur_ligne)
tableau_frequence.setStyle(style_tableau_etiquette)
parts = []
parts.append(tableau_frequence)
nom_fichier = "Etiquette_test_" + table + "_" + str(nom_service) + ".pdf"
pdf = SimpleDocTemplate(nom_fichier, pagesize=(A4[1],A4[0]),
topMargin=0.4 * cm,
leftMargin=0.36 * cm,
rightMargin=0.5 * cm,
bottomMargin=0.54 * cm)
pdf.build(parts)
messagebox.showinfo(title="Felicitation", message="L'impression des étiquettes c'est bien déroulée")
id_service = Service.recherche_id(nom_service)
Historique.impression_etiquette(objet_utilisateur.utilisateur_en_cours.id,table,id_service)
def adjust_font_size_to_fit(self,text, column_width, cell_height, max_font_size=9, min_font_size=6):
# Commence avec la taille maximale de police
font_size = max_font_size
while font_size >= min_font_size:
# Calculer la hauteur du texte pour la taille actuelle de la police
text_height = self.get_text_height(text, column_width, font_size)
# Si la hauteur du texte tient dans la hauteur de la cellule, on garde cette taille
if text_height <= cell_height:
return font_size
# Réduire la taille de la police et réessayer
font_size -= 1
def get_text_height(self,text, column_width, font_size):
style = getSampleStyleSheet()['Normal']
style.fontSize = font_size
p = Paragraph(text, style)
# Mesurer la largeur et la hauteur du texte
_, height = p.wrap(column_width, 0) # On fixe la largeur et calcule la hauteur
return height