import gradio as gr from pdf2docx import Converter from docx import Document from fpdf import FPDF import os def pdf_para_word(arquivo_pdf): nome_docx = arquivo_pdf.name.replace('.pdf', '.docx') cv = Converter(arquivo_pdf.name) cv.convert(nome_docx, multi_processing=True, start=0, end=None) cv.close() return nome_docx def word_para_pdf(arquivo_docx): nome_pdf = "output.pdf" doc = Document(arquivo_docx) pdf = FPDF(format='A4') pdf.set_auto_page_break(auto=True, margin=15) pdf.add_page() pdf.add_font('Arial', '', 'Arial.ttf', uni=True) pdf.set_font('Arial', size=12) for para in doc.paragraphs: texto = para.text.strip() if not texto: # Ignorar linhas vazias continue # Quebrar o texto em várias linhas se necessário palavras = texto.split() linha = '' for palavra in palavras: if pdf.get_string_width(linha + palavra) < (pdf.w - 2 * pdf.l_margin): linha += palavra + ' ' else: pdf.cell(0, 10, linha, ln=True) linha = palavra + ' ' if linha: pdf.cell(0, 10, linha, ln=True) pdf.output(nome_pdf) return nome_pdf with gr.Blocks() as app: with gr.Row(): with gr.Column(): with gr.Accordion("PDF para Word"): entrada_pdf = gr.File(label="Enviar PDF") converter_pdf_para_word = gr.Button("Converter para Word") saida_word = gr.File(label="Baixar arquivo Word", type="filepath") converter_pdf_para_word.click(pdf_para_word, inputs=[entrada_pdf], outputs=[saida_word]) with gr.Column(): with gr.Accordion("Word para PDF"): entrada_word = gr.File(label="Enviar Word") converter_word_para_pdf = gr.Button("Converter para PDF") saida_pdf = gr.File(label="Baixar arquivo PDF", type="filepath") converter_word_para_pdf.click(word_para_pdf, inputs=[entrada_word], outputs=[saida_pdf]) app.launch()