Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -682,27 +682,108 @@ def processar_boletim(file):
|
|
682 |
)
|
683 |
|
684 |
grafico_medias = plotar_graficos_destacados(disciplinas_dados, temp_dir)
|
685 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
686 |
|
687 |
# Gerar PDF
|
688 |
print("Gerando relatório PDF...")
|
689 |
pdf_path = gerar_relatorio_pdf(df, disciplinas_dados, grafico_basica, grafico_diversificada, grafico_medias)
|
690 |
-
print("Relatório PDF gerado
|
691 |
|
692 |
# Criar arquivo de retorno
|
693 |
output_file = tempfile.NamedTemporaryFile(delete=False, suffix='.pdf')
|
694 |
output_path = output_file.name
|
695 |
shutil.copy2(pdf_path, output_path)
|
696 |
-
print("Arquivo de saída criado com sucesso")
|
697 |
|
698 |
return output_path, "Relatório gerado com sucesso!"
|
699 |
|
700 |
except Exception as e:
|
701 |
-
print(f"Erro durante o processamento: {str(e)}")
|
702 |
return None, f"Erro ao processar os dados: {str(e)}"
|
703 |
|
704 |
except Exception as e:
|
705 |
-
print(f"Erro
|
706 |
return None, f"Erro ao processar o boletim: {str(e)}"
|
707 |
|
708 |
finally:
|
|
|
682 |
)
|
683 |
|
684 |
grafico_medias = plotar_graficos_destacados(disciplinas_dados, temp_dir)
|
685 |
+
def processar_boletim(file):
|
686 |
+
"""Função principal que processa o boletim e gera o relatório."""
|
687 |
+
temp_dir = None
|
688 |
+
try:
|
689 |
+
print("Iniciando processamento do arquivo...")
|
690 |
+
|
691 |
+
if file is None:
|
692 |
+
return None, "Nenhum arquivo foi fornecido."
|
693 |
+
|
694 |
+
# Criar diretório temporário
|
695 |
+
temp_dir = tempfile.mkdtemp()
|
696 |
+
print(f"Diretório temporário criado: {temp_dir}")
|
697 |
+
|
698 |
+
# Salvar o conteúdo bytes em um arquivo temporário
|
699 |
+
temp_pdf = os.path.join(temp_dir, 'boletim.pdf')
|
700 |
+
try:
|
701 |
+
with open(temp_pdf, 'wb') as f:
|
702 |
+
# Se o arquivo já é bytes, escrever diretamente
|
703 |
+
if isinstance(file, bytes):
|
704 |
+
f.write(file)
|
705 |
+
# Se é um arquivo do Gradio, ler o conteúdo primeiro
|
706 |
+
else:
|
707 |
+
f.write(file.read())
|
708 |
+
print(f"Arquivo temporário criado: {temp_pdf}")
|
709 |
+
except Exception as e:
|
710 |
+
print(f"Erro ao salvar arquivo temporário: {str(e)}")
|
711 |
+
return None, f"Erro ao processar arquivo: {str(e)}"
|
712 |
+
|
713 |
+
# Verificar se o arquivo foi criado corretamente
|
714 |
+
if not os.path.exists(temp_pdf) or os.path.getsize(temp_pdf) == 0:
|
715 |
+
return None, "Erro ao salvar o arquivo."
|
716 |
+
|
717 |
+
# Validar o PDF
|
718 |
+
try:
|
719 |
+
import PyPDF2
|
720 |
+
with open(temp_pdf, 'rb') as pdf_file:
|
721 |
+
pdf_reader = PyPDF2.PdfReader(pdf_file)
|
722 |
+
if len(pdf_reader.pages) == 0:
|
723 |
+
return None, "O PDF está vazio ou corrompido."
|
724 |
+
print(f"PDF válido com {len(pdf_reader.pages)} páginas")
|
725 |
+
except Exception as e:
|
726 |
+
print(f"Erro ao validar PDF: {str(e)}")
|
727 |
+
return None, "O arquivo não é um PDF válido."
|
728 |
+
|
729 |
+
print("Iniciando extração das tabelas...")
|
730 |
+
try:
|
731 |
+
df = extrair_tabelas_pdf(temp_pdf)
|
732 |
+
print("Tabelas extraídas com sucesso")
|
733 |
+
except Exception as e:
|
734 |
+
print(f"Erro na extração das tabelas: {str(e)}")
|
735 |
+
return None, f"Erro ao extrair dados do PDF: {str(e)}"
|
736 |
+
|
737 |
+
if df is None or df.empty:
|
738 |
+
return None, "Não foi possível extrair dados do PDF."
|
739 |
+
|
740 |
+
try:
|
741 |
+
# Processar disciplinas
|
742 |
+
disciplinas_dados = obter_disciplinas_validas(df)
|
743 |
+
if not disciplinas_dados:
|
744 |
+
return None, "Nenhuma disciplina válida encontrada no boletim."
|
745 |
+
|
746 |
+
# Separar disciplinas por categoria
|
747 |
+
categorias = separar_disciplinas_por_categoria(disciplinas_dados)
|
748 |
+
nivel = categorias['nivel']
|
749 |
+
nivel_texto = "Ensino Médio" if nivel == "medio" else "Ensino Fundamental"
|
750 |
+
|
751 |
+
# Gerar gráficos
|
752 |
+
print("Gerando gráficos...")
|
753 |
+
grafico_basica = plotar_evolucao_bimestres(
|
754 |
+
categorias['formacao_basica'],
|
755 |
+
temp_dir,
|
756 |
+
titulo=f"Evolução das Médias - Formação Geral Básica ({nivel_texto})",
|
757 |
+
nome_arquivo='evolucao_basica.png'
|
758 |
+
)
|
759 |
+
|
760 |
+
grafico_diversificada = plotar_evolucao_bimestres(
|
761 |
+
categorias['diversificada'],
|
762 |
+
temp_dir,
|
763 |
+
titulo=f"Evolução das Médias - Parte Diversificada ({nivel_texto})",
|
764 |
+
nome_arquivo='evolucao_diversificada.png'
|
765 |
+
)
|
766 |
+
|
767 |
+
grafico_medias = plotar_graficos_destacados(disciplinas_dados, temp_dir)
|
768 |
+
print("Gráficos gerados")
|
769 |
|
770 |
# Gerar PDF
|
771 |
print("Gerando relatório PDF...")
|
772 |
pdf_path = gerar_relatorio_pdf(df, disciplinas_dados, grafico_basica, grafico_diversificada, grafico_medias)
|
773 |
+
print("Relatório PDF gerado")
|
774 |
|
775 |
# Criar arquivo de retorno
|
776 |
output_file = tempfile.NamedTemporaryFile(delete=False, suffix='.pdf')
|
777 |
output_path = output_file.name
|
778 |
shutil.copy2(pdf_path, output_path)
|
|
|
779 |
|
780 |
return output_path, "Relatório gerado com sucesso!"
|
781 |
|
782 |
except Exception as e:
|
|
|
783 |
return None, f"Erro ao processar os dados: {str(e)}"
|
784 |
|
785 |
except Exception as e:
|
786 |
+
print(f"Erro durante o processamento: {str(e)}")
|
787 |
return None, f"Erro ao processar o boletim: {str(e)}"
|
788 |
|
789 |
finally:
|