Há algumas semanas, meu supervisor me desafiou para ver se eu conseguiria criar um fluxo de trabalho para um problema específico que estávamos enfrentando. Queríamos receber cartas Pré/ACT em nosso SMS (Student Management System), que no nosso caso era o Skyward. O problema que encontramos é que as cartas Pré/ACT estão em um PDF em massa ou em PDF individual e, para entrar no Skyward, precisaríamos ter um PDF para o nome de cada aluno como seu número de identificação. Para conseguir isso decidi escrever um programa em Python, usando Streamlit para a UI.
Vejamos os problemas que precisamos resolver, começando com o PDF. Fazia mais sentido apenas capturar a exportação em massa de PDF único das cartas, isso significava que precisávamos dividir a exportação em massa em PDFs individuais. Embora cada letra tenha normalmente 2 páginas, isso nem sempre é o caso, portanto, uma simples quebra em todas as outras páginas provavelmente estará sujeita a erros.
A segunda questão foi ler o PDF de cada aluno e renomeá-lo com o número de identificação correspondente. Isso dependia principalmente de um padrão Regex que extraía o que eu precisava.Como esse também era um desafio de tempo, trabalhei com IA para ajudar a gerar o código. NOTA: Isso não substitui o conhecimento da lógica e da linguagem que você está usando. Ao escrever isso com AI/LLM, usei a abordagem de cadeia de pensamento, fornecendo pedaços pequenos do que eu queria e, em seguida, depurando e testando cada pedaço antes de adicionar mais. O código abaixo é o código final que foi usado. Vou dividir cada seção por seção. Se você deseja implementar isso como uma solução em seu distrito, consulte o TLDR no final desta postagem.
Requisitos e importações
streamlit pypdf2 fitz pymupdfAs importações app.py
streamlit pypdf2 fitz pymupdfEncontrando IDs
streamlit pypdf2 fitz pymupdfDividindo os PDFs
streamlit pypdf2 fitz pymupdfQuase lá
def split_pdf(input_pdf, output_folder, progress_callback): input_path = Path(input_pdf) output_folder = Path(output_folder) output_folder.mkdir(parents=True, exist_ok=True) # Find pages with IDs id_pages = find_id_pages(input_pdf) if not id_pages: st.error("No ID pages found in the PDF.") return pdf_reader = PyPDF2.PdfReader(str(input_path)) total_pages = len(pdf_reader.pages) temp_pdfs = [] for i in range(len(id_pages)): start_page = id_pages[i] end_page = id_pages[i 1] if i 1 def clean_up(pasta_de_saída, nome_zip): shutil.rmtree(pasta_de_saída) os.remove(f"{zip_name}.zip")streamlit pypdf2 fitz pymupdfConstruindo a IUO último pedaço de código é para a IU. Streamlit é uma WebUI versátil (sim, você pode executá-lo sozinho). Depois de algumas tentativas e considerando a usabilidade. Mantendo a simplicidade, reduzi-o a um botão de upload, um botão de ação (ou seja, divisão) e um botão de download para obter os PDFs compactados.
# Parte do aplicativo Streamlit st.title("Divisor e renomeador de PDF") uploaded_file = st.file_uploader("Escolha um arquivo PDF", type="pdf") pasta_saída = "pasta_saída" if st.button("Dividir e renomear PDF"): se upload_file e output_folder: tentar: # Salva o arquivo enviado temporariamente com open("temp_input.pdf", "wb") como f: f.write(uploaded_file.getbuffer()) barra_progresso = st.progress(0) def update_progress(progresso): progress_bar.progress(progresso) split_pdf("temp_input.pdf", pasta_de_saída, update_progress) zip_name = "saída_pdfs" zip_output_folder(pasta_de_saída, zip_name) st.success("PDF dividido e renomeado com sucesso!") com open(f"{zip_name}.zip", "rb") como f: st.download_button( label="Baixar ZIP", dados=f, nome_do_arquivo=f"{nome_zip}.zip", mime="aplicativo/zip" ) #Remove arquivo temporário Caminho("temp_input.pdf").unlink() clean_up(pasta_de_saída, nome_zip) exceto Exceção como e: st.error(f"Ocorreu um erro: {e}") outro: st.error("Por favor, carregue um arquivo PDF e especifique uma pasta de saída.")
streamlit pypdf2 fitz pymupdfTLDR para começar a funcionarPara colocar tudo em funcionamento, basta usar os seguintes comandos (isso pressupõe Linux, WSL e MacOS). e você poderá acessar o aplicativo acessando http://localhost:8501.
clone do git https://github.com/Blacknight318/act-to-sms.git cd ato-para-sms python3 -m venv venv origem venv/bin/ativar pip instalar -r requisitos.txt streamlit execute app.py
streamlit pypdf2 fitz pymupdfNo encerramentoSe você estiver em uma escola de ensino fundamental e médio, espero que isso seja útil. Se sim, bata palmas ou considere me pagar um café. Até a próxima, ventos favoráveis e mar agitado.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3