eia / app.py
EngrNarmeen's picture
Update app.py
3b4fe45 verified
import gradio as gr
import pandas as pd
from fpdf import FPDF
import os
# Function to generate the EIA report
def generate_eia_report(file):
try:
# Check the file extension and load the file with the appropriate engine
file_extension = os.path.splitext(file.name)[1].lower()
if file_extension == '.xlsx':
# Attempt to read the file with the openpyxl engine
try:
df = pd.read_excel(file, engine='openpyxl')
except Exception as e:
return f"Error reading .xlsx file: {str(e)}", None
elif file_extension == '.xls':
# Attempt to read the file with the xlrd engine
try:
df = pd.read_excel(file, engine='xlrd')
except Exception as e:
return f"Error reading .xls file: {str(e)}", None
else:
return "Unsupported file format. Please upload a valid Excel file (.xlsx or .xls).", None
# Prepare a PDF report
pdf = FPDF()
pdf.set_auto_page_break(auto=True, margin=15)
pdf.add_page()
pdf.set_font("Arial", size=12)
# Add title
pdf.set_font("Arial", style="B", size=16)
pdf.cell(0, 10, "ENVIRONMENT IMPACT ASSESSMENT REPORT", ln=True, align="C")
pdf.ln(10)
# Add table of contents
pdf.set_font("Arial", style="B", size=14)
pdf.cell(0, 10, "TABLE OF CONTENTS", ln=True)
pdf.set_font("Arial", size=12)
table_of_contents = [
"EXECUTIVE SUMMARY",
"PROJECT TITLE AND LOCATION",
"PROJECT PROPONENT",
"THE EIA STUDY CONSULTANT",
"BRIEF DESCRIPTION OF THE PROJECT",
"ENVIRONMENTAL CONDITIONS OF THE SITE",
"MAJOR IMPACTS & PROPOSED MITIGATION",
"PROPOSED ENVIRONMENTAL MONITORING",
"CHAPTER # 1: INTRODUCTION",
"CHAPTER # 2: DESCRIPTION OF PROJECT",
"CHAPTER # 3: ENVIRONMENTAL & SOCIAL BASELINE CONDITIONS",
"CHAPTER # 4: POTENTIAL ENVIRONMENTAL IMPACTS & MITIGATION MEASURES",
"CHAPTER # 5: ENVIRONMENTAL MANAGEMENT AND MONITORING PROGRAM",
"CHAPTER # 6: STAKEHOLDERS AND PUBLIC CONSULTATION",
"CHAPTER # 7: CONCLUSION & RECOMMENDATIONS",
"REFERENCES",
"GLOSSARY",
]
for idx, item in enumerate(table_of_contents, 1):
pdf.cell(0, 10, f"{idx}. {item}", ln=True)
pdf.ln(10)
# Add content dynamically from the Excel file
pdf.set_font("Arial", style="B", size=14)
pdf.cell(0, 10, "EXECUTIVE SUMMARY", ln=True)
pdf.set_font("Arial", size=12)
summary = df.get("Executive Summary", "No data provided.")
if isinstance(summary, pd.Series):
summary = summary.iloc[0] # Take the first entry if it's a series
pdf.multi_cell(0, 10, str(summary))
# Example: Add more sections from the Excel data
sections = ["Project Title", "Project Proponent", "Environmental Conditions"]
for section in sections:
pdf.add_page()
pdf.set_font("Arial", style="B", size=14)
pdf.cell(0, 10, section, ln=True)
pdf.set_font("Arial", size=12)
content = df.get(section, "No data provided.")
if isinstance(content, pd.Series):
content = content.iloc[0] # Take the first entry if it's a series
pdf.multi_cell(0, 10, str(content))
# Save the PDF to a local path that Gradio can access
output_file = "EIA_Report.pdf" # Save in the current working directory
pdf.output(output_file)
return "Report generated successfully!", output_file
except Exception as e:
return f"Error occurred: {str(e)}", None
# Gradio interface
def process_file(file):
status, pdf_path = generate_eia_report(file)
if pdf_path:
return status, pdf_path
else:
return status, None
with gr.Blocks() as demo:
gr.Markdown("# Environmental Impact Assessment Tool with PDF Report")
with gr.Row():
with gr.Column():
file_input = gr.File(label="Upload EIA Excel File", file_types=[".xlsx", ".xls"])
submit_button = gr.Button("Submit")
with gr.Column():
status_output = gr.Textbox(label="Status")
file_output = gr.File(label="Generated EIA Report (PDF)")
submit_button.click(process_file, inputs=[file_input], outputs=[status_output, file_output])
demo.launch()