alexandraroze's picture
check
7dbfc18
import streamlit as st
from PIL import Image
import os
from uuid import uuid4
import fitz
from invoice_generator import generate_invoice
st.set_page_config(page_title="Invoice generator", layout="wide")
output_folder = "output"
template = "template.tex"
def get_image_from_pdf(pdf_path):
doc = fitz.open(pdf_path)
page = doc[0]
mat = fitz.Matrix(2, 2)
pix = page.get_pixmap(matrix=mat)
img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
return img
def display_invoice(image_path):
output_pdf = "invoice_" + os.path.basename(image_path).split(".")[0] + ".pdf"
path_to_output_pdf = f"{output_folder}/{output_pdf}"
try:
status = generate_invoice(image_path, output_pdf, template, output_folder)
if status == 0:
st.write("Image is irrelevant, upload another one")
return
print(f"Generated invoice: {path_to_output_pdf}")
st.query_params["generated_pdf"] = path_to_output_pdf
return get_image_from_pdf(path_to_output_pdf)
except Exception as e:
st.write("Could not generate invoice, please try again")
print(e)
return None
st.title("Upload FNOL photo")
col1, col2, col3 = st.columns([4, 1, 4])
with col1:
uploaded_image = st.file_uploader("Upload photo", type=["jpg", "jpeg", "png"])
if uploaded_image:
try:
image = Image.open(uploaded_image)
image_path = f"{output_folder}/{str(uuid4())[:5]}.png"
image.save(image_path)
print(f"Image: {image_path}")
st.image(image, caption="Uploaded photo", width=300)
st.query_params["image"] = image_path
except Exception as e:
st.write(f"Coudn't load image: {e}")
with col2:
if st.query_params.get("image"):
if st.button("Generate invoice"):
with st.spinner("Generating..."):
st.session_state["invoice"] = display_invoice(st.query_params["image"])
if st.session_state["invoice"]:
st.query_params["status"] = "loaded"
else:
st.button("Generate invoice", disabled=True)
if st.query_params.get("generated_pdf"):
with open(st.query_params["generated_pdf"], "rb") as f:
file_data = f.read()
st.download_button(
label="Download invoice",
data=file_data,
file_name="generated_invoice.pdf",
mime="application/pdf"
)
with col3:
if st.query_params.get("status") == "loaded":
st.image(st.session_state["invoice"], caption="Generated invoice", use_column_width=True)