File size: 2,531 Bytes
55a515e
9e7436f
5d9624d
cf73656
9e7436f
 
d9652e8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9e7436f
 
 
 
775af4c
9e7436f
 
 
 
 
478120c
cf73656
478120c
9e7436f
2512841
 
 
 
 
85623b9
478120c
cf73656
478120c
 
2512841
 
 
 
 
478120c
 
9e7436f
 
 
478120c
9e7436f
d9652e8
 
9e7436f
 
cf73656
 
 
 
9e7436f
 
 
 
cf73656
 
 
 
9e7436f
 
 
cf73656
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import gradio as gr
from pdf2docx import Converter
from docx import Document
from fpdf import FPDF
import os

title_and_description = """
# PDF to Word and Word to PDF converter
Created by [@artificialguybr](https://artificialguy.com)

Upload a PDF file to convert to Word or a Word file to convert to PDF.

## Features
- **Easy to use**: Simple interface to upload PDF or Word files and convert to the desired format.
- **High quality**: Converts while maintaining the best possible quality.
- **Efficient processing**: Uses `pdf2docx`, `fpdf` and `docx` for fast and reliable conversions.
- **Unlimited Use**: No file limit. Use unlimited!

Feel free to use in your own documents!
"""

def pdf_to_word(pdf_file):
    docx_filename = pdf_file.name.replace('.pdf', '.docx')
    
    cv = Converter(pdf_file.name)
    cv.convert(docx_filename, multi_processing=True, start=0, end=None)
    cv.close()
    
    return docx_filename

def word_to_pdf(docx_file):
    pdf_filename = "output.pdf"
    
    doc = Document(docx_file)
    pdf = FPDF()

    # Add Arial font
    pdf.add_font('Arial', '', 'Arial.ttf', uni=True)
    pdf.set_font('Arial', size=12)

    pdf.add_page()

    for para in doc.paragraphs:
        lines = para.text.split('\n')
        for line in lines:
            # Check if the line is too long and adjust
            if len(line) > 90:  # Adjust this number based on your needs
                pdf.set_font('Arial', size=10)  # Adjust font size
            else:
                pdf.set_font('Arial', size=12)
            pdf.multi_cell(0, 10, line)

    pdf.output(pdf_filename)
    return pdf_filename


with gr.Blocks() as app:
    gr.Markdown(title_and_description)
    
    with gr.Row():
        with gr.Column():
            with gr.Accordion("PDF to Word"):
                pdf_input = gr.File(label="Upload PDF")
                convert_pdf_to_word = gr.Button("Convert to Word")
                word_output = gr.File(label="Download Word file", type="filepath")
                
                convert_pdf_to_word.click(pdf_to_word, inputs=[pdf_input], outputs=[word_output])
                
        with gr.Column():
            with gr.Accordion("Word to PDF"):
                word_input = gr.File(label="Upload Word")
                convert_word_to_pdf = gr.Button("Convert to PDF")
                pdf_output = gr.File(label="Download PDF file", type="filepath")
                
                convert_word_to_pdf.click(word_to_pdf, inputs=[word_input], outputs=[pdf_output])

app.launch()