Woziii commited on
Commit
df975e7
·
verified ·
1 Parent(s): b6f710a

Update pdf_generator.py

Browse files
Files changed (1) hide show
  1. pdf_generator.py +49 -139
pdf_generator.py CHANGED
@@ -1,6 +1,6 @@
1
  """
2
  Module pour la génération des contrats en format PDF.
3
- Module optimisé pour une génération plus complète et détaillée.
4
  """
5
  import io
6
  import reportlab
@@ -26,7 +26,7 @@ pdfmetrics.registerFont(TTFont('VeraBd', 'VeraBd.ttf'))
26
 
27
  def get_simplified_styles():
28
  """
29
- Retourne des styles simplifiés pour la génération du PDF.
30
 
31
  Returns:
32
  dict: Dictionnaire des styles simplifiés
@@ -54,7 +54,7 @@ def generate_pdf(contract_type, is_free, author_type, author_info,
54
  additional_rights, remuneration, is_exclusive):
55
  """
56
  Génère un PDF du contrat avec des champs interactifs.
57
- Version optimisée pour une génération plus rapide et détaillée.
58
 
59
  Args:
60
  contract_type (list): Liste des types de contrats sélectionnés
@@ -81,13 +81,17 @@ def generate_pdf(contract_type, is_free, author_type, author_info,
81
  # Créer un nom de fichier temporaire pour le PDF
82
  output_filename = create_temp_file(prefix="contrat_cession_", suffix=".pdf")
83
 
84
- # Préparer les styles
85
- styles = get_simplified_styles()
 
 
 
 
86
 
87
- # Créer un buffer pour le PDF
88
  buffer = io.BytesIO()
89
 
90
- # Créer le document PDF avec des marges adaptées
91
  doc = SimpleDocTemplate(
92
  buffer,
93
  pagesize=A4,
@@ -97,135 +101,8 @@ def generate_pdf(contract_type, is_free, author_type, author_info,
97
  bottomMargin=15*mm
98
  )
99
 
100
- # Liste pour stocker les éléments du document
101
- elements = []
102
-
103
- # Titre du contrat
104
- elements.append(Paragraph(ContractTemplates.get_title(contract_type), styles['ContractTitle']))
105
-
106
- # Préambule
107
- elements.append(Paragraph("ENTRE LES SOUSSIGNÉS :", styles['ContractArticle']))
108
-
109
- # Informations sur l'auteur/modèle (Section inspirée du fichier preview)
110
- if author_type == "Personne physique":
111
- gentille = author_info.get("gentille", "M.")
112
- nom = author_info.get("nom", "")
113
- prenom = author_info.get("prenom", "")
114
- date_naissance = author_info.get("date_naissance", "")
115
- nationalite = author_info.get("nationalite", "")
116
- adresse = author_info.get("adresse", "")
117
- contact = author_info.get("contact", "")
118
-
119
- author_description = f"{gentille} {prenom} {nom}"
120
- if date_naissance:
121
- author_description += f", né(e) le {date_naissance}"
122
- if nationalite:
123
- author_description += f", de nationalité {nationalite}"
124
- author_description += f", domicilié(e) au {adresse}"
125
- if contact:
126
- author_description += f", joignable à {contact}"
127
-
128
- elements.append(Paragraph(author_description, styles['ContractText']))
129
- else:
130
- # Personne morale
131
- nom_societe = author_info.get("nom_societe", "")
132
- statut = author_info.get("statut", "")
133
- rcs = author_info.get("rcs", "")
134
- siege = author_info.get("siege", "")
135
- contact = author_info.get("contact", "")
136
-
137
- entity_description = f"La société {nom_societe}, {statut}, immatriculée sous le numéro {rcs} au Registre du Commerce et des Sociétés, dont le siège social est situé {siege}"
138
- if contact:
139
- entity_description += f", joignable à {contact}"
140
-
141
- elements.append(Paragraph(entity_description, styles['ContractText']))
142
-
143
- # Dénomination de l'auteur
144
- if "Auteur (droits d'auteur)" in contract_type and "Image (droit à l'image)" in contract_type:
145
- denomination = "ci-après dénommé(e) \"l'Auteur et le Modèle\","
146
- elif "Auteur (droits d'auteur)" in contract_type:
147
- denomination = "ci-après dénommé(e) \"l'Auteur\","
148
- else:
149
- denomination = "ci-après dénommé(e) \"le Modèle\","
150
-
151
- elements.append(Paragraph(denomination, styles['ContractText']))
152
-
153
- # Informations sur Tellers
154
- elements.append(Paragraph("Tellers, société par actions simplifiée unipersonnelle au capital de 1000 €, " +
155
- "immatriculée sous le numéro 932 553 266 R.C.S. Lyon, et dont le siège social est situé au : " +
156
- "12 RUE DE LA PART-DIEU, 69003 LYON, représentée par son Président en exercice dûment habilité à l'effet des présentes, " +
157
- "ci-après dénommée \"le Cessionnaire\",", styles['ContractText']))
158
-
159
- # Introduction
160
- elements.append(Paragraph("Ci-après dénommées ensemble \"les Parties\" ou individuellement \"la Partie\",", styles['ContractText']))
161
- elements.append(Paragraph("CECI EXPOSÉ, IL A ÉTÉ CONVENU CE QUI SUIT :", styles['ContractArticle']))
162
-
163
- # ARTICLE 1 - OBJET DU CONTRAT
164
- elements.append(Paragraph("ARTICLE 1 – OBJET DU CONTRAT", styles['ContractArticle']))
165
-
166
- # Œuvre concernée si droits d'auteur
167
- if "Auteur (droits d'auteur)" in contract_type:
168
- elements.append(Paragraph("1.1 Œuvre concernée", styles['ContractText']))
169
- elements.append(Paragraph("L'Auteur déclare être le créateur et titulaire exclusif des droits d'auteur sur l'œuvre suivante :",
170
- styles['ContractText']))
171
- elements.append(Paragraph(work_description, styles['ContractText']))
172
-
173
- # Image concernée si droit à l'image
174
- if "Image (droit à l'image)" in contract_type:
175
- elements.append(Paragraph("1.2 Images concernées", styles['ContractText']))
176
- elements.append(Paragraph("Le Modèle autorise l'utilisation de son image telle qu'elle apparaît dans :",
177
- styles['ContractText']))
178
- elements.append(Paragraph(image_description, styles['ContractText']))
179
-
180
- # ARTICLE 2 - DROITS CÉDÉS
181
- elements.append(Paragraph("ARTICLE 2 – ÉTENDUE DES DROITS CÉDÉS", styles['ContractArticle']))
182
-
183
- # Détails de la cession
184
- cession_details = "L'Auteur cède au Cessionnaire, "
185
- cession_details += "à titre exclusif, " if is_exclusive_bool else "à titre non exclusif, "
186
- cession_details += "gratuitement et pour la durée précisée à l'article 4, les droits patrimoniaux suivants :" if is_free_bool else "pour la durée précisée à l'article 4 et moyennant rémunération, les droits suivants :"
187
-
188
- elements.append(Paragraph(cession_details, styles['ContractText']))
189
-
190
- # Droits patrimoniaux
191
- elements.append(Paragraph("- Droit de reproduction", styles['ContractText']))
192
- elements.append(Paragraph("- Droit de représentation", styles['ContractText']))
193
-
194
- # Droits supplémentaires
195
- if not is_free_bool and additional_rights:
196
- elements.append(Paragraph("Droits supplémentaires inclus :", styles['ContractText']))
197
- for right in additional_rights:
198
- short_name = right.split(" - ")[0] if " - " in right else right
199
- elements.append(Paragraph(f"- {short_name}", styles['ContractText']))
200
-
201
- # Générer le reste du document avec les articles standards
202
- # (durée, territoire, supports, rémunération, etc.)
203
- remaining_articles = [
204
- ("Durée et Territoire", "La cession est consentie pour une durée d'un (1) an, renouvelable par tacite reconduction. Elle est valable pour le monde entier."),
205
- ("Supports d'Exploitation", "Les supports sont : " + ", ".join(final_supports)),
206
- ("Rémunération", remuneration if not is_free_bool else "La cession est consentie à titre gratuit.")
207
- ]
208
-
209
- for i, (title, content) in enumerate(remaining_articles, start=3):
210
- elements.append(Paragraph(f"ARTICLE {i} – {title.upper()}", styles['ContractArticle']))
211
- elements.append(Paragraph(content, styles['ContractText']))
212
-
213
- # Signature
214
- elements.append(Paragraph("Fait à ________________, le ________________", styles['ContractText']))
215
- elements.append(Paragraph("En deux exemplaires originaux.", styles['ContractText']))
216
-
217
- # Lignes de signature
218
- if "Auteur (droits d'auteur)" in contract_type and "Image (droit à l'image)" in contract_type:
219
- signature_text = "Pour l'Auteur et Modèle : Pour le Cessionnaire :"
220
- elif "Auteur (droits d'auteur)" in contract_type:
221
- signature_text = "Pour l'Auteur : Pour le Cessionnaire :"
222
- else:
223
- signature_text = "Pour le Modèle : Pour le Cessionnaire :"
224
-
225
- elements.append(Paragraph(signature_text, styles['ContractText']))
226
-
227
- # Construire le document
228
- doc.build(elements)
229
 
230
  # Sauvegarder le PDF
231
  with open(output_filename, 'wb') as f:
@@ -235,7 +112,15 @@ def generate_pdf(contract_type, is_free, author_type, author_info,
235
  p = canvas.Canvas(output_filename, pagesize=A4)
236
  form = p.acroForm
237
 
238
- # Champs de signature interactifs
 
 
 
 
 
 
 
 
239
  form.textfield(name='lieu', tooltip='Lieu de signature',
240
  x=80, y=120, width=100, height=15,
241
  borderWidth=0, forceBorder=True)
@@ -252,7 +137,32 @@ def generate_pdf(contract_type, is_free, author_type, author_info,
252
  x=350, y=95, width=150, height=15,
253
  borderWidth=0, forceBorder=True)
254
 
255
- # Sauvegarder les modifications
256
  p.save()
257
 
258
- return output_filename
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
  import reportlab
 
26
 
27
  def get_simplified_styles():
28
  """
29
+ Retourne des styles simplifiés pour une génération plus rapide.
30
 
31
  Returns:
32
  dict: Dictionnaire des styles simplifiés
 
54
  additional_rights, remuneration, is_exclusive):
55
  """
56
  Génère un PDF du contrat avec des champs interactifs.
57
+ Version optimisée pour une génération plus rapide.
58
 
59
  Args:
60
  contract_type (list): Liste des types de contrats sélectionnés
 
81
  # Créer un nom de fichier temporaire pour le PDF
82
  output_filename = create_temp_file(prefix="contrat_cession_", suffix=".pdf")
83
 
84
+ # Générer le contenu du contrat - version simplifiée pour plus de rapidité
85
+ contract_elements = ContractBuilder.build_contract_elements(
86
+ contract_type, is_free_bool, author_type, author_info,
87
+ work_description, image_description, final_supports,
88
+ additional_rights, remuneration, is_exclusive_bool
89
+ )
90
 
91
+ # Créer un document PDF avec moins d'options pour accélérer la génération
92
  buffer = io.BytesIO()
93
 
94
+ # Utiliser des marges plus petites et des réglages plus simples
95
  doc = SimpleDocTemplate(
96
  buffer,
97
  pagesize=A4,
 
101
  bottomMargin=15*mm
102
  )
103
 
104
+ # Construire le document en une seule passe
105
+ doc.build(contract_elements)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
106
 
107
  # Sauvegarder le PDF
108
  with open(output_filename, 'wb') as f:
 
112
  p = canvas.Canvas(output_filename, pagesize=A4)
113
  form = p.acroForm
114
 
115
+ # Déterminer le nom du cédant en fonction du type de contrat
116
+ if "Auteur (droits d'auteur)" in contract_type and "Image (droit à l'image)" in contract_type:
117
+ cedant_label = "l'Auteur et Modèle"
118
+ elif "Auteur (droits d'auteur)" in contract_type:
119
+ cedant_label = "l'Auteur"
120
+ else:
121
+ cedant_label = "le Modèle"
122
+
123
+ # Ajouter seulement les champs essentiels
124
  form.textfield(name='lieu', tooltip='Lieu de signature',
125
  x=80, y=120, width=100, height=15,
126
  borderWidth=0, forceBorder=True)
 
137
  x=350, y=95, width=150, height=15,
138
  borderWidth=0, forceBorder=True)
139
 
140
+ # Finaliser et sauvegarder le PDF
141
  p.save()
142
 
143
+ return output_filename
144
+
145
+ def get_simplified_styles():
146
+ """
147
+ Retourne des styles simplifiés pour une génération plus rapide.
148
+
149
+ Returns:
150
+ dict: Dictionnaire des styles simplifiés
151
+ """
152
+ styles = getSampleStyleSheet()
153
+ # Utiliser des styles plus simples avec moins d'options
154
+ styles.add(ParagraphStyle(name='ContractTitle',
155
+ fontName='VeraBd',
156
+ fontSize=14,
157
+ alignment=TA_CENTER,
158
+ spaceAfter=10))
159
+ styles.add(ParagraphStyle(name='ContractText',
160
+ fontName='Vera',
161
+ fontSize=10,
162
+ alignment=TA_JUSTIFY,
163
+ spaceAfter=5))
164
+ styles.add(ParagraphStyle(name='ContractArticle',
165
+ fontName='VeraBd',
166
+ fontSize=11,
167
+ spaceAfter=5))
168
+ return styles