Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -303,85 +303,4 @@ with gr.Blocks(theme=theme) as interface:
|
|
| 303 |
|
| 304 |
generate_btn.click(fn=wrapper, inputs=[html_file, excel_files], outputs=[output_html, download_html_btn, download_pdf_btn])
|
| 305 |
|
| 306 |
-
interface.launch()
|
| 307 |
-
|
| 308 |
-
para solucionar, recebi as dicas a seguir, o que me diz?
|
| 309 |
-
|
| 310 |
-
Para resolver os problemas de formatação da tabela e ajustar a largura da coluna "Nome do Aluno" no PDF, juntamente com a quebra automática de linha para nomes longos, podemos fazer as seguintes modificações no seu código:
|
| 311 |
-
|
| 312 |
-
Largura Dinâmica das Colunas:
|
| 313 |
-
|
| 314 |
-
Calcule a largura de cada coluna com base no conteúdo da tabela e na largura da página.
|
| 315 |
-
Utilize a biblioteca fpdf.FPDF.get_string_width para obter a largura do texto em cada célula.
|
| 316 |
-
Quebra de Linha Automática:
|
| 317 |
-
|
| 318 |
-
Use o método fpdf.FPDF.multi_cell para as células da coluna "Nome do Aluno".
|
| 319 |
-
Defina a largura da coluna "Nome do Aluno" e deixe a altura ser calculada automaticamente (h=0).
|
| 320 |
-
Remover botões de download: Remova os componentes de download download_html_btn e download_pdf_btn , pois não há necessidade de usar JavaScript para baixar arquivos com gr.File().
|
| 321 |
-
|
| 322 |
-
Código Modificado:
|
| 323 |
-
|
| 324 |
-
Python
|
| 325 |
-
import gradio as gr
|
| 326 |
-
# ... (restante do seu código)
|
| 327 |
-
|
| 328 |
-
def generate_pdf_report(dataframe, media_tempo_medio_turma, output_pdf_path):
|
| 329 |
-
class PDF(FPDF):
|
| 330 |
-
# ... (header e footer permanecem iguais)
|
| 331 |
-
|
| 332 |
-
def add_table(self, dataframe):
|
| 333 |
-
self.set_font("Arial", "B", 10)
|
| 334 |
-
|
| 335 |
-
# Calcular larguras dinâmicas das colunas
|
| 336 |
-
col_widths = []
|
| 337 |
-
for col in dataframe.columns:
|
| 338 |
-
max_width = max(self.get_string_width(str(cell)) for cell in dataframe[col])
|
| 339 |
-
col_widths.append(max_width + 4) # Adicionar um pequeno espaçamento
|
| 340 |
-
|
| 341 |
-
row_height = self.font_size * 2
|
| 342 |
-
|
| 343 |
-
# Adiciona os cabeçalhos
|
| 344 |
-
for i, col in enumerate(dataframe.columns):
|
| 345 |
-
self.cell(col_widths[i], row_height, col, border=1, align="C")
|
| 346 |
-
self.ln(row_height)
|
| 347 |
-
|
| 348 |
-
# Adiciona os dados com quebra de linha na coluna "Nome do Aluno"
|
| 349 |
-
self.set_font("Arial", "", 10)
|
| 350 |
-
for row in dataframe.itertuples(index=False):
|
| 351 |
-
for i, item in enumerate(row):
|
| 352 |
-
if i == 0: # Coluna "Nome do Aluno"
|
| 353 |
-
self.multi_cell(col_widths[i], row_height, str(item), border=1, align="C", ln=3, max_line_height=row_height)
|
| 354 |
-
else:
|
| 355 |
-
self.cell(col_widths[i], row_height, str(item), border=1, align="C")
|
| 356 |
-
self.ln(row_height)
|
| 357 |
-
|
| 358 |
-
# ... (add_image permanece igual)
|
| 359 |
-
|
| 360 |
-
# ... (restante do seu código)
|
| 361 |
-
|
| 362 |
-
# --- Interface Gradio ---
|
| 363 |
-
with gr.Blocks(theme=theme) as interface:
|
| 364 |
-
gr.Markdown("# Processamento de Relatórios de Tarefas")
|
| 365 |
-
with gr.Row():
|
| 366 |
-
with gr.Column():
|
| 367 |
-
gr.Markdown("## Arquivo HTML (alunos.htm)")
|
| 368 |
-
html_file = gr.File(label="Arraste o arquivo .htm aqui", type="binary")
|
| 369 |
-
with gr.Column():
|
| 370 |
-
gr.Markdown("## Arquivos Excel (Relatórios de Tarefas)")
|
| 371 |
-
excel_files = gr.Files(label="Arraste os arquivos .xlsx aqui", type="binary", file_count="multiple")
|
| 372 |
-
|
| 373 |
-
generate_btn = gr.Button("Gerar Relatório", variant="primary")
|
| 374 |
-
output_html = gr.HTML(elem_id="html_output")
|
| 375 |
-
pdf_output = gr.File(label="Download PDF Report", elem_id="pdf_output")
|
| 376 |
-
|
| 377 |
-
def wrapper(html_file, excel_files):
|
| 378 |
-
html_content, html_path, pdf_path = processar_relatorio(html_file, excel_files)
|
| 379 |
-
return {output_html: html_content, pdf_output: pdf_path} # Retorna o conteúdo HTML e o arquivo PDF
|
| 380 |
-
|
| 381 |
-
generate_btn.click(
|
| 382 |
-
fn=wrapper,
|
| 383 |
-
inputs=[html_file, excel_files],
|
| 384 |
-
outputs=[output_html, pdf_output]
|
| 385 |
-
)
|
| 386 |
-
|
| 387 |
interface.launch()
|
|
|
|
| 303 |
|
| 304 |
generate_btn.click(fn=wrapper, inputs=[html_file, excel_files], outputs=[output_html, download_html_btn, download_pdf_btn])
|
| 305 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 306 |
interface.launch()
|