HybaaAI3's picture
Update app.py
9dd1d3f verified
Raw
History Blame Contribute Delete
2.15 kB
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()