# import streamlit as st # import pandas as pd # import tempfile # import os # from PDFSectionExtractor import PDFSectionExtractor, convert_pdf_to_excel # def main(): # st.title("PDF Section and Table Extractor") # st.write("Upload a PDF file to extract sections and tables into an Excel workbook.") # # File uploader # uploaded_file = st.file_uploader("Choose a PDF file", type=['pdf']) # if uploaded_file is not None: # # Create a temporary directory to store the files # with tempfile.TemporaryDirectory() as temp_dir: # # Save the uploaded PDF # pdf_path = os.path.join(temp_dir, uploaded_file.name) # with open(pdf_path, "wb") as f: # f.write(uploaded_file.getvalue()) # # Create the Excel output path # excel_filename = os.path.splitext(uploaded_file.name)[0] + "_extracted.xlsx" # excel_path = os.path.join(temp_dir, excel_filename) # try: # with st.spinner("Processing PDF..."): # # Create extractor instance # extractor = PDFSectionExtractor(pdf_path) # # Get document info # doc_name, doc_id = extractor.get_document_info() # st.write(f"Document Name: {doc_name}") # st.write(f"Document ID: {doc_id}") # # Extract tables and sections # tables = extractor.extract_tables() # sections = extractor.extract_sections() # # Create Excel file # convert_pdf_to_excel(pdf_path, excel_path) # # Show summary # st.success(f"Successfully processed PDF!") # st.write(f"Found {len(tables)} tables and {len(sections)} sections.") # # Preview sections # if sections: # st.subheader("Sections Preview") # df_sections = pd.DataFrame(sections) # st.dataframe(df_sections) # # Preview tables # if tables: # st.subheader("Tables Preview") # for i, table in enumerate(tables, 1): # with st.expander(f"Table {i}"): # st.dataframe(table) # # Provide download button for Excel file # with open(excel_path, "rb") as f: # excel_data = f.read() # st.download_button( # label="Download Excel File", # data=excel_data, # file_name=excel_filename, # mime="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" # ) # except Exception as e: # st.error(f"An error occurred: {str(e)}") # if __name__ == "__main__": # main() import streamlit as st import pandas as pd import tempfile import os from PDFSectionExtractor import PDFSectionExtractor, convert_pdf_to_excel # Add page config st.set_page_config( page_title="PDF Section and Table Extractor", page_icon=":page_facing_up:", layout="wide" ) # Add custom CSS to improve the interface st.markdown(""" """, unsafe_allow_html=True) def main(): st.title(":page_facing_up: PDF Section and Table Extractor") st.write("Upload a PDF file to extract sections and tables into an Excel workbook.") # Add some usage instructions with st.expander(":information_source: How to use"): st.write(""" 1. Upload a PDF file using the file uploader below 2. Wait for the processing to complete 3. Preview the extracted sections 4. Download the results as an Excel file """) # File uploader with additional information uploaded_file = st.file_uploader( "Choose a PDF file", type=['pdf'], help="Upload a PDF file containing sections and tables to extract" ) if uploaded_file is not None: # Create a temporary directory to store the files with tempfile.TemporaryDirectory() as temp_dir: # Save the uploaded PDF pdf_path = os.path.join(temp_dir, uploaded_file.name) with open(pdf_path, "wb") as f: f.write(uploaded_file.getvalue()) # Create the Excel output path excel_filename = os.path.splitext(uploaded_file.name)[0] + "_extracted.xlsx" excel_path = os.path.join(temp_dir, excel_filename) try: with st.spinner(":arrows_counterclockwise: Processing PDF... This may take a moment."): # Create extractor instance extractor = PDFSectionExtractor(pdf_path) # Get document info doc_name, doc_id = extractor.get_document_info() # Display document info in a nice format col1, col2 = st.columns(2) with col1: st.info(f":memo: Document Name: {doc_name}") with col2: st.info(f":key: Document ID: {doc_id}") # Extract tables and sections tables = extractor.extract_tables() sections = extractor.extract_sections() # Create Excel file convert_pdf_to_excel(pdf_path, excel_path) # Show summary st.success(":white_check_mark: Successfully processed PDF!") st.write(f":bar_chart: Found {len(tables)} tables and :bookmark_tabs: {len(sections)} sections.") # Display sections preview if sections: st.subheader("Sections Preview") df_sections = pd.DataFrame(sections) st.dataframe(df_sections, use_container_width=True) else: st.warning("No sections found in the document.") # Provide download button for Excel file with open(excel_path, "rb") as f: excel_data = f.read() st.download_button( label=":inbox_tray: Download Excel File", data=excel_data, file_name=excel_filename, mime="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", key="download-excel" ) except Exception as e: st.error(f":x: An error occurred: {str(e)}") st.write("Please make sure your PDF file is valid and try again.") if __name__ == "__main__": main()