"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > स्काईवर्ड के लिए आसानी से पीडीएफ को विभाजित और नाम बदलें

स्काईवर्ड के लिए आसानी से पीडीएफ को विभाजित और नाम बदलें

2024-07-31 को प्रकाशित
ब्राउज़ करें:837

Easily Split and Rename PDFs for Skyward

इसे क्यों बनाएं और यह क्या करता है

कुछ सप्ताह पहले मेरे पर्यवेक्षक ने मुझे यह देखने की चुनौती दी थी कि क्या मैं हमारी किसी विशेष समस्या के लिए कोई वर्कफ़्लो बना सकता हूँ। हम अपने एसएमएस (छात्र प्रबंधन प्रणाली) में प्री/एसीटी पत्र प्राप्त करना चाहते थे, जो हमारे मामले में स्काईवर्ड था। हमें जिस समस्या का सामना करना पड़ा वह यह है कि प्री/एसीटी पत्र या तो एक बड़े पीडीएफ में या प्रति व्यक्तिगत पीडीएफ में होते हैं, और स्काईवर्ड में जाने के लिए हमें प्रत्येक छात्र के नाम के लिए उनके आईडी नंबर के रूप में एक पीडीएफ की आवश्यकता होगी। इसे पूरा करने के लिए मैंने यूआई के लिए स्ट्रीमलिट का उपयोग करते हुए पायथन में एक प्रोग्राम लिखने का फैसला किया।

आइए पीडीएफ से शुरू करके उन समस्याओं पर नजर डालें जिनका हमें समाधान करना है। अक्षरों के बड़े पैमाने पर एकल पीडीएफ निर्यात को हासिल करना अधिक सार्थक था, इसका मतलब था कि हमें थोक निर्यात को अलग-अलग पीडीएफ में विभाजित करने की आवश्यकता थी। जबकि प्रत्येक अक्षर आम तौर पर 2 पृष्ठों का होता है, ऐसा हमेशा नहीं होता है, इसलिए एक साधारण विराम से हर दूसरा पृष्ठ त्रुटि-प्रवण होने की संभावना है।

दूसरा मुद्दा प्रत्येक छात्र की पीडीएफ को पढ़ना और उसका संबंधित आईडी नंबर पर नाम बदलना था। यह ज्यादातर रेगेक्स पैटर्न पर निर्भर करता है जो मुझे जो चाहिए था वह खींच लेता है।

चूंकि यह भी एक समय की चुनौती थी इसलिए मैंने कोड तैयार करने में मदद के लिए एआई के साथ काम किया। ध्यान दें: यह आपके द्वारा उपयोग किए जा रहे तर्क और भाषा को जानने का प्रतिस्थापन नहीं है। एआई/एलएलएम के साथ इसे लिखते समय मैंने चेन-ऑफ-थॉट दृष्टिकोण का उपयोग किया, जो मैं चाहता था उसके छोटे-छोटे टुकड़े देता था, और फिर अधिक जोड़ने से पहले प्रत्येक टुकड़े को डिबग और परीक्षण करता था। नीचे दिया गया कोड अंतिम कोड है जिसका उपयोग किया गया था, मैं प्रत्येक अनुभाग को अनुभाग दर अनुभाग तोड़ दूँगा। यदि आप इसे अपने जिले में समाधान के रूप में लागू करना चाहते हैं तो इस पोस्ट के अंत में टीएलडीआर देखें।

आवश्यकताएँ और आयात

यह हिस्सा काफी सीधा है और यही वह आधार है जिस पर प्रोग्राम चलता है।

  • हमारे यूआई के लिए स्ट्रीमलाइट
  • पीडीएफ हेरफेर के लिए pypdf2, pymupdf, और फिट्ज़

आवश्यकताओं की सामग्री.txt

streamlit
pypdf2
fitz
pymupdf

app.py आयात करता है

import PyPDF2
import fitz  # PyMuPDF
import re
from pathlib import Path
import concurrent.futures
import streamlit as st
import shutil
import zipfile
import os

आईडी ढूँढना

यह अगला स्निपेट बल्क पीडीएफ में आईडी खोजने और उन्हें विभाजित करने के लिए उपयोग किए जाने वाले पृष्ठों की एक सूची बनाने से संबंधित है, यह वह हिस्सा है जो रेगेक्स पर निर्भर करता है और आपकी स्थिति के लिए इसे बदलने की आवश्यकता हो सकती है।
&&&]

def find_id_pages(input_pdf):
 doc = fitz.open(input_pdf)
 id_pages = []
 id_pattern = re.compile(r'\(ID#:\s*(\d )\)')

    for i, page in enumerate(doc):
 text = page.get_text()
        if id_pattern.search(text):
 id_pages.append(i)

    return id_pages

पीडीएफ को विभाजित करना

जैसा कि शीर्षक में कहा गया है, इसका उपयोग पीडीएफ को विभाजित करने के लिए किया जाता है। यह प्रत्येक व्यक्तिगत पीडीएफ के लिए नाम निकालने के लिए एक फ़ंक्शन का उपयोग करेगा। आप यह भी देखेंगे कि यह प्रदर्शन को बेहतर बनाने के लिए उन्हें एक समय में 10 तक समानांतर में विभाजित करता है।

def split_pdf(input_pdf, output_folder, progress_callback):
 input_path = Path(input_pdf)
 output_folder = Path(output_folder)
 output_folder.mkdir(parents=True, exist_ok=True)

    # Find pages with IDs
 id_pages = find_id_pages(input_pdf)

    if not id_pages:
 st.error("No ID pages found in the PDF.")
        return

 pdf_reader = PyPDF2.PdfReader(str(input_path))
 total_pages = len(pdf_reader.pages)
 temp_pdfs = []

    for i in range(len(id_pages)):
 start_page = id_pages[i]
 end_page = id_pages[i   1] if i   1 





def extract_and_rename_pdf(pdf_path, output_folder):
 doc = fitz.open(pdf_path)
 text_first_page = doc[0].get_text()

    # Extract ID using a regex pattern for the format (ID#: 01234)
 match_first_page = re.search(r'\(ID#:\s*(\d )\)', text_first_page)

    if match_first_page:
 id_value = match_first_page.group(1)
 new_pdf_path = output_folder / f'{id_value}.pdf'
 pdf_path.rename(new_pdf_path)
    else:
 new_pdf_path = output_folder / f'unknown_{pdf_path.stem}.pdf'
 pdf_path.rename(new_pdf_path)

वहाँ लगभग

अगले कुछ छोटे कार्य हैं, एक सभी विभाजित पीडीएफ को ज़िप करने के लिए (यदि आप इसे आंतरिक सर्वर पर चलाना चाहते हैं), और एक किसी भी अस्थायी फ़ाइलों को साफ़ करने के लिए ताकि कोई पीआईआई छात्र जानकारी इधर-उधर न लटके इसे जीने की जरूरत नहीं है।

def zip_output_folder(output_folder, zip_name):
 shutil.make_archive(zip_name, 'zip', output_folder)
def clean_up(output_folder, zip_name):
 shutil.rmtree(output_folder)
 os.remove(f"{zip_name}.zip")

यूआई का निर्माण

कोड का अंतिम बिट यूआई के लिए है। स्ट्रीमलाइट बहुमुखी प्रतिभा के लिए एक वेबयूआई है (हाँ आप इसे अकेले चला सकते हैं)। कुछ प्रयासों और प्रयोज्यता पर विचार करने के बाद। इसे सरल रखते हुए मैंने इसे एक अपलोड बटन, एक एक्शन बटन (यानी स्प्लिट) और ज़िप्ड पीडीएफ प्राप्त करने के लिए एक डाउनलोड बटन में बदल दिया।

# Streamlit App Portion
st.title("PDF Splitter and Renamer")

uploaded_file = st.file_uploader("Choose a PDF file", type="pdf")
output_folder = "output_folder"

if st.button("Split and Rename PDF"):
    if uploaded_file and output_folder:
        try:
            # Save uploaded file temporarily
            with open("temp_input.pdf", "wb") as f:
 f.write(uploaded_file.getbuffer())

 progress_bar = st.progress(0)
            def update_progress(progress):
 progress_bar.progress(progress)

 split_pdf("temp_input.pdf", output_folder, update_progress)

 zip_name = "output_pdfs"
 zip_output_folder(output_folder, zip_name)
 st.success("PDF split and renamed successfully!")

            with open(f"{zip_name}.zip", "rb") as f:
 st.download_button(
                    label="Download ZIP",
                    data=f,
                    file_name=f"{zip_name}.zip",
                    mime="application/zip"
 )

            # Remove temporary file
 Path("temp_input.pdf").unlink()
 clean_up(output_folder, zip_name)
        except Exception as e:
 st.error(f"An error occurred: {e}")
    else:
 st.error("Please upload a PDF file and specify an output folder.")

उठने और चलने के लिए टीएलडीआर

चीजों को चालू करने और चलाने के लिए बस निम्नलिखित कमांड का उपयोग करें (यह Linux, WSL और MacOS मानता है)। और आप http://localhost:8501 पर जाकर ऐप तक पहुंच सकेंगे।

git clone https://github.com/Blacknight318/act-to-sms.git
cd act-to-sms
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
streamlit run app.py

समापन का वक्त

यदि आप K12 स्कूल में हैं तो मुझे आशा है कि आपको यह उपयोगी लगेगा। यदि ऐसा है तो ताली बजाओ या मेरे लिए कॉफ़ी खरीदने पर विचार करो। अगली बार तक, अच्छी हवाएं और समुद्र का अनुसरण।

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/blacknight318/easily-split-and-rename-pdfs-for-skyward-17ha?1 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए [email protected] से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3