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 |
|