Alejo760 commited on
Commit
5efbb29
·
verified ·
1 Parent(s): b26f9ae

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +47 -61
app.py CHANGED
@@ -68,14 +68,16 @@ def mejorar_texto_con_IA(var_name, var_value, vectordb_list, nombre_curso):
68
 
69
 
70
  # Función para generar el documento
 
 
 
 
 
 
 
71
  def crear_documento(nombre_curso, variables):
72
- doc = Document()
73
-
74
- # Insertar la imagen con estilo centrado
75
- imagen = doc.add_paragraph()
76
- imagen.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
77
- run_imagen = imagen.add_run()
78
- run_imagen.add_picture("UdeA+simplificado-01.png", width=Inches(1.5))
79
 
80
  # Título Principal
81
  titulo = doc.add_paragraph()
@@ -83,12 +85,18 @@ def crear_documento(nombre_curso, variables):
83
  titulo_run = titulo.add_run("PROGRAMA OFICIAL DE CURSO\n(Pregrado y Posgrado)\nUNIVERSIDAD DE ANTIOQUIA")
84
  titulo_run.bold = True
85
  titulo_run.font.size = Pt(16)
86
- titulo_run.font.color.rgb = RGBColor(34, 85, 85) # Cambiar el color azul oscuro a un verde azulado más acorde
 
 
 
 
 
 
 
87
 
88
  # Información General - Tabla
89
- doc.add_paragraph("\nINFORMACIÓN GENERAL", style='Heading 1')
90
  info_table = doc.add_table(rows=0, cols=2)
91
- info_table.style = 'Table Grid'
92
 
93
  info_general = [
94
  ("Nombre del curso", nombre_curso),
@@ -111,11 +119,19 @@ def crear_documento(nombre_curso, variables):
111
 
112
  for key, value in info_general:
113
  row = info_table.add_row().cells
 
114
  row[0].text = key
115
- row[0].paragraphs[0].runs[0].font.bold = True
 
 
 
 
 
 
 
116
  row[1].text = value
117
 
118
- # Secciones con Títulos
119
  secciones = [
120
  ("RELACIONES CON EL PERFIL", str(variables.get('relaciones_perfil', ''))),
121
  ("INTENCIONALIDADES FORMATIVAS", str(variables.get('intencionalidades', ''))),
@@ -129,28 +145,28 @@ def crear_documento(nombre_curso, variables):
129
  ]
130
 
131
  for titulo, contenido in secciones:
132
- # Añadir título de sección con color personalizado
133
- parrafo_titulo = doc.add_paragraph(f"\n{titulo}")
134
- run_titulo = parrafo_titulo.runs[0]
135
- run_titulo.font.size = Pt(14)
136
- run_titulo.bold = True
137
- run_titulo.font.color.rgb = RGBColor(34, 85, 85) # Cambiar el color azul oscuro a un verde azulado más acorde
138
 
139
- # Añadir contenido con viñetas si es necesario
140
  if '\n' in contenido:
141
  for linea in contenido.split('\n'):
142
- parrafo = doc.add_paragraph(linea, style='List Bullet')
 
143
  parrafo.paragraph_format.left_indent = Inches(0.5)
144
  else:
145
- doc.add_paragraph(contenido)
 
146
 
147
  # Aprobación del Consejo de Unidad Académica
148
- aprobacion_titulo = doc.add_paragraph("\nAPROBACIÓN DEL CONSEJO DE UNIDAD ACADÉMICA")
149
- aprobacion_titulo_run = aprobacion_titulo.runs[0]
150
- aprobacion_titulo_run.bold = True
151
- aprobacion_titulo_run.font.size = Pt(14)
152
- aprobacion_titulo_run.font.color.rgb = RGBColor(34, 85, 85) # Cambiar el color azul oscuro a un verde azulado más acorde
153
-
154
  aprobacion_parrafo = doc.add_paragraph()
155
  aprobacion_parrafo.add_run("Aprobado en Acta número ").bold = False
156
  aprobacion_parrafo.add_run("_______________").underline = True
@@ -167,40 +183,9 @@ def crear_documento(nombre_curso, variables):
167
  for label, line in secretario_info:
168
  parrafo_label = doc.add_paragraph(label)
169
  parrafo_label.runs[0].font.bold = True
170
- parrafo_label.runs[0].font.color.rgb = RGBColor(34, 85, 85) # Cambiar el color azul oscuro a un verde azulado más acorde
171
- doc.add_paragraph(line).underline = True
172
-
173
- # Encabezado y pie de página
174
- section = doc.sections[0]
175
- header = section.header
176
- header_paragraph = header.paragraphs[0]
177
- header_paragraph.text = "Universidad de Antioquia - Programa Oficial de Curso"
178
- header_paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
179
- header_run = header_paragraph.runs[0]
180
- header_run.font.size = Pt(10)
181
- header_run.font.color.rgb = RGBColor(255, 255, 255) # Color de letra blanco
182
- header_run.font.name = 'Arial' # Fuente Arial
183
-
184
- # Fondo naranja del encabezado
185
- p = header_paragraph._p
186
- pPr = p.get_or_add_pPr()
187
- shading_elm = parse_xml(r'<w:shd {} w:fill="FFA500"/>'.format(nsdecls('w')))
188
- pPr.append(shading_elm)
189
-
190
- footer = section.footer
191
- footer_paragraph = footer.paragraphs[0]
192
- footer_paragraph.text = "Página – Universidad de Antioquia"
193
- footer_paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
194
- footer_run = footer_paragraph.runs[0]
195
- footer_run.font.size = Pt(10)
196
- footer_run.font.color.rgb = RGBColor(255, 255, 255) # Color de letra blanco
197
- footer_run.font.name = 'Arial' # Fuente Arial
198
-
199
- # Fondo naranja del pie de página
200
- p = footer_paragraph._p
201
- pPr = p.get_or_add_pPr()
202
- shading_elm = parse_xml(r'<w:shd {} w:fill="FFA500"/>'.format(nsdecls('w')))
203
- pPr.append(shading_elm)
204
 
205
  # Guardar el documento en un objeto de bytes
206
  doc_buffer = BytesIO()
@@ -210,6 +195,7 @@ def crear_documento(nombre_curso, variables):
210
  return doc_buffer
211
 
212
 
 
213
  with st.expander("INFORMACIÓN GENERAL"):
214
  nombre_curso = st.text_input("Nombre del curso:", value=st.session_state.get('nombre_curso', ''), key='nombre_curso')
215
  programa_academico = st.text_input("Programa académico al que pertenece:", value=st.session_state.get('programa_academico', ''), key='programa_academico')
 
68
 
69
 
70
  # Función para generar el documento
71
+ from docx import Document
72
+ from docx.shared import Inches, Pt, RGBColor
73
+ from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
74
+ from docx.oxml import parse_xml
75
+ from docx.oxml.ns import nsdecls
76
+ from io import BytesIO
77
+
78
  def crear_documento(nombre_curso, variables):
79
+ # Cargar la plantilla existente
80
+ doc = Document('plantilla_micro.dotx')
 
 
 
 
 
81
 
82
  # Título Principal
83
  titulo = doc.add_paragraph()
 
85
  titulo_run = titulo.add_run("PROGRAMA OFICIAL DE CURSO\n(Pregrado y Posgrado)\nUNIVERSIDAD DE ANTIOQUIA")
86
  titulo_run.bold = True
87
  titulo_run.font.size = Pt(16)
88
+ titulo_run.font.color.rgb = RGBColor(34, 85, 85) # Ajustar el color del título
89
+
90
+ # Información General - Título de sección
91
+ titulo_info_general = doc.add_paragraph("INFORMACIÓN GENERAL")
92
+ titulo_info_general.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT
93
+ titulo_info_general.style = 'Heading 1' # Asumiendo que este estilo existe en la plantilla
94
+ for run in titulo_info_general.runs:
95
+ run.font.color.rgb = RGBColor(34, 85, 85)
96
 
97
  # Información General - Tabla
 
98
  info_table = doc.add_table(rows=0, cols=2)
99
+ info_table.style = 'Table Grid' # Puedes ajustar el estilo según tus preferencias
100
 
101
  info_general = [
102
  ("Nombre del curso", nombre_curso),
 
119
 
120
  for key, value in info_general:
121
  row = info_table.add_row().cells
122
+ # Primera celda (clave)
123
  row[0].text = key
124
+ paragraph = row[0].paragraphs[0]
125
+ for run in paragraph.runs:
126
+ run.font.bold = True
127
+ run.font.color.rgb = RGBColor(34, 85, 85)
128
+ # Aplicar fondo a la primera celda
129
+ shading_elm_1 = parse_xml(r'<w:shd {} w:fill="D9D9D9"/>'.format(nsdecls('w')))
130
+ row[0]._tc.get_or_add_tcPr().append(shading_elm_1)
131
+ # Segunda celda (valor)
132
  row[1].text = value
133
 
134
+ # Secciones con Títulos y Contenido
135
  secciones = [
136
  ("RELACIONES CON EL PERFIL", str(variables.get('relaciones_perfil', ''))),
137
  ("INTENCIONALIDADES FORMATIVAS", str(variables.get('intencionalidades', ''))),
 
145
  ]
146
 
147
  for titulo, contenido in secciones:
148
+ # Añadir título de sección
149
+ parrafo_titulo = doc.add_paragraph(titulo)
150
+ parrafo_titulo.style = 'Heading 1' # Asegúrate de que este estilo está en tu plantilla
151
+ for run in parrafo_titulo.runs:
152
+ run.font.color.rgb = RGBColor(34, 85, 85)
 
153
 
154
+ # Añadir contenido
155
  if '\n' in contenido:
156
  for linea in contenido.split('\n'):
157
+ parrafo = doc.add_paragraph(linea)
158
+ parrafo.style = 'List Bullet' # O el estilo que prefieras
159
  parrafo.paragraph_format.left_indent = Inches(0.5)
160
  else:
161
+ parrafo = doc.add_paragraph(contenido)
162
+ # Puedes aplicar un estilo específico si lo deseas
163
 
164
  # Aprobación del Consejo de Unidad Académica
165
+ aprobacion_titulo = doc.add_paragraph("APROBACIÓN DEL CONSEJO DE UNIDAD ACADÉMICA")
166
+ aprobacion_titulo.style = 'Heading 1'
167
+ for run in aprobacion_titulo.runs:
168
+ run.font.color.rgb = RGBColor(34, 85, 85)
169
+
 
170
  aprobacion_parrafo = doc.add_paragraph()
171
  aprobacion_parrafo.add_run("Aprobado en Acta número ").bold = False
172
  aprobacion_parrafo.add_run("_______________").underline = True
 
183
  for label, line in secretario_info:
184
  parrafo_label = doc.add_paragraph(label)
185
  parrafo_label.runs[0].font.bold = True
186
+ parrafo_label.runs[0].font.color.rgb = RGBColor(34, 85, 85)
187
+ parrafo_linea = doc.add_paragraph(line)
188
+ parrafo_linea.runs[0].font.underline = True
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
189
 
190
  # Guardar el documento en un objeto de bytes
191
  doc_buffer = BytesIO()
 
195
  return doc_buffer
196
 
197
 
198
+
199
  with st.expander("INFORMACIÓN GENERAL"):
200
  nombre_curso = st.text_input("Nombre del curso:", value=st.session_state.get('nombre_curso', ''), key='nombre_curso')
201
  programa_academico = st.text_input("Programa académico al que pertenece:", value=st.session_state.get('programa_academico', ''), key='programa_academico')