Update pdf_generator.py
Browse files- pdf_generator.py +16 -9
pdf_generator.py
CHANGED
@@ -1,6 +1,7 @@
|
|
1 |
"""
|
2 |
Module pour la génération des contrats en format PDF.
|
3 |
Module optimisé pour une génération plus rapide et efficace.
|
|
|
4 |
"""
|
5 |
import io
|
6 |
from reportlab.pdfgen import canvas
|
@@ -11,6 +12,8 @@ from reportlab.pdfbase import pdfform
|
|
11 |
from reportlab.lib.colors import black
|
12 |
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
|
13 |
from reportlab.lib.enums import TA_CENTER, TA_JUSTIFY
|
|
|
|
|
14 |
import time
|
15 |
|
16 |
from config import PDF_CONFIG
|
@@ -18,6 +21,12 @@ from contract_builder import ContractBuilder
|
|
18 |
from utils import create_temp_file, ensure_default_supports
|
19 |
|
20 |
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
def generate_pdf(contract_type, is_free, author_type, author_info,
|
22 |
work_description, image_description, supports,
|
23 |
additional_rights, remuneration, is_exclusive):
|
@@ -57,7 +66,7 @@ def generate_pdf(contract_type, is_free, author_type, author_info,
|
|
57 |
additional_rights, remuneration, is_exclusive_bool
|
58 |
)
|
59 |
|
60 |
-
# Créer un document PDF avec
|
61 |
buffer = io.BytesIO()
|
62 |
|
63 |
# Utiliser des marges plus petites et des réglages plus simples
|
@@ -67,7 +76,8 @@ def generate_pdf(contract_type, is_free, author_type, author_info,
|
|
67 |
rightMargin=15*mm,
|
68 |
leftMargin=15*mm,
|
69 |
topMargin=15*mm,
|
70 |
-
bottomMargin=15*mm
|
|
|
71 |
)
|
72 |
|
73 |
# Construire le document en une seule passe
|
@@ -76,6 +86,10 @@ def generate_pdf(contract_type, is_free, author_type, author_info,
|
|
76 |
# Ajouter des champs interactifs pour les signatures
|
77 |
buffer.seek(0)
|
78 |
|
|
|
|
|
|
|
|
|
79 |
# Version simplifiée des champs interactifs dans un second fichier
|
80 |
p = canvas.Canvas(output_filename, pagesize=A4)
|
81 |
form = p.acroForm
|
@@ -113,16 +127,9 @@ def generate_pdf(contract_type, is_free, author_type, author_info,
|
|
113 |
x=350, y=60, width=150, height=30,
|
114 |
borderWidth=0, forceBorder=True)
|
115 |
|
116 |
-
# Ne pas essayer d'ajouter des champs de paraphe sur chaque page
|
117 |
-
# Cela causait une erreur car SimpleDocTemplate n'a pas d'attribut page_count
|
118 |
-
|
119 |
# Finaliser et sauvegarder le PDF
|
120 |
p.save()
|
121 |
|
122 |
-
# Sauvegarder le PDF dans un fichier
|
123 |
-
with open(output_filename, 'wb') as f:
|
124 |
-
f.write(buffer.getvalue())
|
125 |
-
|
126 |
return output_filename
|
127 |
|
128 |
|
|
|
1 |
"""
|
2 |
Module pour la génération des contrats en format PDF.
|
3 |
Module optimisé pour une génération plus rapide et efficace.
|
4 |
+
Version corrigée pour l'encodage des caractères accentués et UTF-8.
|
5 |
"""
|
6 |
import io
|
7 |
from reportlab.pdfgen import canvas
|
|
|
12 |
from reportlab.lib.colors import black
|
13 |
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
|
14 |
from reportlab.lib.enums import TA_CENTER, TA_JUSTIFY
|
15 |
+
from reportlab.pdfbase import pdfmetrics
|
16 |
+
from reportlab.pdfbase.ttfonts import TTFont
|
17 |
import time
|
18 |
|
19 |
from config import PDF_CONFIG
|
|
|
21 |
from utils import create_temp_file, ensure_default_supports
|
22 |
|
23 |
|
24 |
+
# Enregistrement des polices pour les caractères accentués
|
25 |
+
# Utiliser les polices standard de ReportLab qui supportent les caractères UTF-8
|
26 |
+
pdfmetrics.registerFont(TTFont('Helvetica', 'Helvetica'))
|
27 |
+
pdfmetrics.registerFont(TTFont('Helvetica-Bold', 'Helvetica-Bold'))
|
28 |
+
|
29 |
+
|
30 |
def generate_pdf(contract_type, is_free, author_type, author_info,
|
31 |
work_description, image_description, supports,
|
32 |
additional_rights, remuneration, is_exclusive):
|
|
|
66 |
additional_rights, remuneration, is_exclusive_bool
|
67 |
)
|
68 |
|
69 |
+
# Créer un document PDF avec encodage UTF-8
|
70 |
buffer = io.BytesIO()
|
71 |
|
72 |
# Utiliser des marges plus petites et des réglages plus simples
|
|
|
76 |
rightMargin=15*mm,
|
77 |
leftMargin=15*mm,
|
78 |
topMargin=15*mm,
|
79 |
+
bottomMargin=15*mm,
|
80 |
+
encoding='UTF-8' # Spécifier l'encodage UTF-8 pour les caractères accentués
|
81 |
)
|
82 |
|
83 |
# Construire le document en une seule passe
|
|
|
86 |
# Ajouter des champs interactifs pour les signatures
|
87 |
buffer.seek(0)
|
88 |
|
89 |
+
# Réduire la complexité des champs interactifs
|
90 |
+
with open(output_filename, 'wb') as f:
|
91 |
+
f.write(buffer.getvalue())
|
92 |
+
|
93 |
# Version simplifiée des champs interactifs dans un second fichier
|
94 |
p = canvas.Canvas(output_filename, pagesize=A4)
|
95 |
form = p.acroForm
|
|
|
127 |
x=350, y=60, width=150, height=30,
|
128 |
borderWidth=0, forceBorder=True)
|
129 |
|
|
|
|
|
|
|
130 |
# Finaliser et sauvegarder le PDF
|
131 |
p.save()
|
132 |
|
|
|
|
|
|
|
|
|
133 |
return output_filename
|
134 |
|
135 |
|