import streamlit as st from PyPDF2 import PdfReader from concurrent.futures import ThreadPoolExecutor from base64 import b64encode from fpdf import FPDF import io, string, re, math from io import StringIO from streamlit_pdf_viewer import pdf_viewer # Importing the Fastify Class from fast_reader import Fastify_Reader def pdf_extract_text(pdf_docs): ''' Basic function for extracting text from the PDFs ''' text = "" for pdf in pdf_docs: pdf_reader = PdfReader(pdf) for page in pdf_reader.pages: text += page.extract_text() return text def text_to_pdf_fastify(text): ''' Basic function to apply fastification on the input text and convert it to bytes for PDF rendering ''' # Applying the Fastify Logic bold_text = Fastify_Reader(text).fastify() bold_text = bold_text.encode('latin-1', 'ignore').decode('latin-1') #since fpdf works with latin-1 encoding # Creating the PDF pdf = FPDF() pdf.add_page() pdf.set_font("Arial", size = 12) pdf.multi_cell(0, 10, txt = bold_text, markdown=True) return bytes(pdf.output()) def text_to_pdf(text): ''' Basic function on the input text and convert it to bytes for PDF rendering ''' text = text.encode('latin-1', 'ignore').decode('latin-1') #since fpdf works with latin-1 encoding # Creating the PDF pdf = FPDF() pdf.add_page() pdf.set_font("Arial", size = 12) pdf.multi_cell(0, 10, txt = text, markdown=True) return bytes(pdf.output()) #Setting the page config st.set_page_config(page_title="Fastify Reader", page_icon=":books:", layout="wide") # Due to browser cache and streamlit issue, sometimes the PDFs are not rendered properly. note_text = """ If the PDF is not being rendered by your browser,
 1. Try this link - (https://akarshrajsingh7-fastify-reader.hf.space/)
 2. Download the PDF and open it in a PDF viewer. """ # Sidebar with st.sidebar: st.image("Logo.jpg") st.markdown("
How fast can you read?
", unsafe_allow_html=True) # Main Page tab1, tab2= st.tabs(["Input Text", "PDF file"]) # First tab where Text is input with tab1: user_input = st.text_input("Enter some text") # Compare Check Box compare = st.checkbox('Compare with Fastified Text', value=False, key='compare') # Submit Button if st.button("Submit", key="input-text"): #Progess Bar for the processing with st.spinner("Processing"): text = user_input # Generating base64 encoded text bytes for PDF rendering original_pdf = b64encode(text_to_pdf(text)).decode("utf-8") base64_pdf = b64encode(text_to_pdf_fastify(text)).decode("utf-8") # Embedding the PDFs in the HTML original_display = f'' pdf_display = f'' # original_display = f"""""" # pdf_display = f"""""" # original_display = f'' # pdf_display = f'' # original_display = f""" #
# #
# """ # pdf_display = f""" #
# #
# """ # Compare Logic implementation if compare: col1, col2, col3 = st.columns(3) with col3: st.download_button(label="Download Fastified PDF", data=text_to_pdf_fastify(text), file_name='output.pdf', mime='application/pdf') # Side by Side comparison col1, col2 = st.columns([1, 1], gap="small") with col1: with st.container(border = True): st.markdown("
Original PDF viewer
", unsafe_allow_html=True) st.markdown(original_display, unsafe_allow_html=True) with col2: with st.container(border = True): st.markdown("
Fastified PDF viewer
", unsafe_allow_html=True) st.markdown(pdf_display, unsafe_allow_html=True) # Browser Cache Note st.markdown(f"""

Note - {note_text}

""", unsafe_allow_html=True) else: # No Comparisons col1, col2, col3 = st.columns(3) with col2: st.download_button(label="Download Fastified PDF", data=text_to_pdf_fastify(text), file_name='output.pdf', mime='application/pdf') with st.container(border = True): st.markdown("
Fastified PDF viewer
", unsafe_allow_html=True) st.markdown(pdf_display, unsafe_allow_html=True) # Browser Cache Note st.markdown(f"""

Note - {note_text}

""", unsafe_allow_html=True) # Added support for PDFs having text with tab2: uploaded_file = st.file_uploader("Upload a PDF file", type="pdf", accept_multiple_files=True) # Compare Check Box compare = st.checkbox('Compare with Fastified Text', value=False, key='compare_pdf') # Submit Button if st.button("Submit", key="pdf"): #Progess Bar for the processing with st.spinner("Processing"): text = pdf_extract_text(uploaded_file) # Generating base64 encoded text bytes for PDF rendering original_pdf = b64encode(text_to_pdf(text)).decode("utf-8") base64_pdf = b64encode(text_to_pdf_fastify(text)).decode("utf-8") # Embedding the PDFs in the HTML original_display = f'' pdf_display = f'' # original_display = f"""""" # pdf_display = f"""""" # original_display = f'' # pdf_display = f'' # original_display = f""" #
# #
# """ # pdf_display = f""" #
# #
# """ # Compare Logic implementation if compare: col1, col2, col3 = st.columns(3) with col3: st.download_button(label="Download Fastified PDF", data=text_to_pdf_fastify(text), file_name='output.pdf', mime='application/pdf') # Side by Side comparison col1, col2 = st.columns([1, 1], gap="small") with col1: with st.container(border = True): st.markdown("
Original PDF viewer
", unsafe_allow_html=True) st.markdown(original_display, unsafe_allow_html=True) with col2: with st.container(border = True): st.markdown("
Fastified PDF viewer
", unsafe_allow_html=True) st.markdown(pdf_display, unsafe_allow_html=True) # Browser Cache Note st.markdown(f"""

Note - {note_text}

""", unsafe_allow_html=True) else: # No Comparison col1, col2, col3 = st.columns(3) with col2: st.download_button(label="Download Fastified PDF", data=text_to_pdf_fastify(text), file_name='output.pdf', mime='application/pdf') with st.container(border = True): st.markdown("
Fastified PDF viewer
", unsafe_allow_html=True) st.markdown(pdf_display, unsafe_allow_html=True) # Browser Cache Note st.markdown(f"""

Note - {note_text}

""", unsafe_allow_html=True)