Woziii commited on
Commit
db82878
·
verified ·
1 Parent(s): 9a47779

Update pdf_generator.py

Browse files
Files changed (1) hide show
  1. 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 moins d'options pour accélérer la génération
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