File size: 4,427 Bytes
9cc81b1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42b3ac3
9cc81b1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49320cd
 
 
 
 
 
 
 
 
 
 
9cc81b1
 
 
 
 
 
 
 
 
 
 
 
 
dab7f1e
9cc81b1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9880eea
 
9cc81b1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import streamlit as st
import google.generativeai as genai
from PIL import Image
import markdown
from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.shared import Pt
from io import BytesIO
import os

os.environ["GOOGLE_API_KEY"] = os.getenv("GOOGLE_API_KEY")
genai.configure(api_key=os.environ["GOOGLE_API_KEY"])
model = genai.GenerativeModel('gemini-1.5-flash-latest')

def response(image):
    prompt = """You are an intelligent document creator. Could you please extract the words from the given screenshot and provide me document text that matches exact screenshot font and look
    important note: if the screenshot not contain any text means you must say 'please upload a valid screenshot.'"""
    img = Image.open(image)
    response = model.generate_content([prompt, img]) 
    return response.text

def markdown_to_word(markdown_text):
    # Create a new Word document
    doc = Document()

    for line in markdown_text.split('\n'):
        if line.startswith('# '):
            heading = line[2:]
            p = doc.add_heading(heading, level=1)
        elif line.startswith('## '):
            heading = line[3:]
            p = doc.add_heading(heading, level=2)
        elif line.startswith('### '):
            heading = line[4:]
            p = doc.add_heading(heading, level=3)
        elif line.startswith('- '):
            item = line[2:]
            p = doc.add_paragraph(item, style='ListBullet')
        else:
            p = doc.add_paragraph()
            words = line.split(' ')
            for word in words:
                word = word.strip()
                if word.startswith('**') and word.endswith('**'):
                    run = p.add_run(word[2:-2])
                    run.bold = True
                elif '**' in word:
                    # Handle case where bold spans multiple words
                    start_index = word.find('**')
                    end_index = word.rfind('**')
                    if start_index != -1 and end_index != -1:
                        run = p.add_run(word[start_index + 2:end_index])
                        run.bold = True
                        p.add_run(' ')
                        # Add the remaining part of the word after bold formatting
                        p.add_run(word[end_index + 2:])
                        continue  # Move to the next word
                elif word.startswith('*') and word.endswith('*'):
                    run = p.add_run(word[1:-1])
                    run.italic = True
                else:
                    p.add_run(word)
                p.add_run(' ')

    # Save the document to a BytesIO object
    buffer = BytesIO()
    doc.save(buffer)
    buffer.seek(0)
    return buffer

st.title("Image🖼️ - DOCUMENT📃")
st.markdown("""
    <style>
    .justified-text {
        text-align: justify;
    }
    </style>
    """, unsafe_allow_html=True)
with st.sidebar:
    st.header("ABOUT:")
    
    st.caption("""
        <div class="justified-text">
            Screenshot to Document file Creator is an AI powered app that allows users to effortlessly convert their screenshots into Word documents. Simply upload a screenshot, and the app will generate a Word document based on the image provided, ensuring a seamless and efficient conversion process. Ideal for anyone looking to quickly turn visual content into editable text documents.
        </div>
        """, unsafe_allow_html=True)
    
    for _ in range(17):
        st.write("") 
    st.subheader("Build By:")
    st.write("[Suriya S❤️](https://github.com/theSuriya)")
    st.write("contact: [Email](mailto:[email protected])")
    
fake_image_text = 'please upload a valid screenshot.'
st.text("Upload your screenshot to convert it into a Word document")
uploaded_file = st.file_uploader("", type=["png", "jpg", "jpeg"])
if uploaded_file:
    st.image(uploaded_file)
    button = st.button("Generate Document")
    if button:
        with st.spinner("Generating a Document..."):
            text = response(uploaded_file)
        st.write(text)
        
        if text.lower().strip() != fake_image_text:
            doc_buffer = markdown_to_word(text)
            st.download_button(
            label="Download",
            data=doc_buffer,
            file_name="output.docx",
            mime="application/vnd.openxmlformats-officedocument.wordprocessingml.document"
            )