| import gradio as gr |
| from pypdf import PdfReader, PdfWriter |
| import re |
| import tempfile |
|
|
| def extract_account(text): |
| match = re.search(r"If undelivered, return to:\s*\n?([^\n]+)", text) |
| return match.group(1).strip() if match else "UNKNOWN" |
|
|
| def process(files): |
| all_pages = [] |
|
|
| |
| for file in files: |
| reader = PdfReader(file.name) |
|
|
| for page in reader.pages: |
| text = page.extract_text() or "" |
| account = extract_account(text) |
| all_pages.append((account, page)) |
|
|
| |
| all_pages.sort(key=lambda x: x[0]) |
|
|
| |
| writer = PdfWriter() |
| for acc, page in all_pages: |
| writer.add_page(page) |
|
|
| output = tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") |
| writer.write(output.name) |
|
|
| return output.name |
|
|
|
|
| app = gr.Interface( |
| fn=process, |
| inputs=gr.File(file_count="multiple", label="Upload Label PDFs"), |
| outputs=gr.File(label="Download Sorted PDF"), |
| title="π¦ Daily Label Sorter (Account Wise)", |
| description="Upload PDFs β auto merge β sort by account β get 1 final PDF" |
| ) |
|
|
| app.launch() |