File size: 2,156 Bytes
a72b612
8b139bf
d97cfeb
 
f6ae938
8b139bf
d97cfeb
 
8b139bf
8755e00
 
a72b612
 
8b139bf
53debb2
d97cfeb
 
bfda109
d97cfeb
53debb2
d97cfeb
bfda109
d97cfeb
 
0135d09
d97cfeb
53debb2
 
 
 
 
 
 
 
 
 
d97cfeb
bfda109
d97cfeb
53debb2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d97cfeb
8755e00
 
d97cfeb
53debb2
8b139bf
 
ea64bb3
 
d97cfeb
53debb2
8b139bf
 
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
import pdfplumber
import pandas as pd
import re
import gradio as gr

def extract_data_from_pdf(pdf_file):
    data = []
    po_number = None

    # Open PDF file directly
    with pdfplumber.open(pdf_file.name) as pdf:
        for page in pdf.pages:
            text = page.extract_text()

            # Extract PO number
            if po_number is None:
                po_match = re.search(r"Purchase Order : (\w+)", text)
                po_number = po_match.group(1) if po_match else "N/A"

            # Regex pattern for row data
            row_pattern = re.compile(
                r"(\d+)\s+(\d+)\s+(\w+)\s+(\d{4}-\d{2}-\d{2})\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)"
            )

            # Extract matching rows
            for match in row_pattern.finditer(text):
                (
                    pos,
                    item_code,
                    unit,
                    delivery_date,
                    quantity,
                    basic_price,
                    amount,
                ) = match.groups()

                sub_total_match = re.search(r"SUB TOTAL : ([\d.]+)", text)
                sub_total = sub_total_match.group(1) if sub_total_match else "0.0"

                data.append(
                    {
                        "Purchase Order": po_number,
                        "Pos.": pos,
                        "Item Code": item_code,
                        "Unit": unit,
                        "Delivery Date": delivery_date,
                        "Quantity": quantity,
                        "Basic Price": basic_price,
                        "Amount": amount,
                        "SUB TOTAL": sub_total,
                    }
                )

    # Convert data to DataFrame and save to Excel
    df = pd.DataFrame(data)
    output = df.to_excel("output.xlsx", index=False)
    return "output.xlsx"

# Gradio Interface
iface = gr.Interface(
    fn=extract_data_from_pdf,
    inputs=gr.File(label="Upload PDF"),
    outputs=gr.File(label="Download Excel"),
    title="PDF Data Extractor",
    description="Extract structured data from a PDF and output it as an Excel file.",
)
iface.launch()