سلام دوستان! امروز یه اسکریپت تقسیم صفحات PDF را معرفی میکنم که میتونه بهتون کمک کنه فایلهای PDF رو به قسمتهای کوچیکتر تقسیم کنید. فکر کنم خیلی خوب باشه برای وقتی که میخواین یه فایل PDF رو به چند قسمت تقسیم کنید.
مدت زمان تخمینی مطالعه: 2 دقیقه
فهرست مطالب
کد اسکریپت
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 |
message='Please enter your choice (number): ' options=("All PDF files" "Specific PDF file" "Cancel") select opt in "${options[@]}"; do case $opt in 'All PDF files') files=$(ls -1 *.pdf | sort -V) # Get all PDF files in the current directory and sort them break ;; 'Specific PDF file') read -p "Enter PDF file name (without extension): " fileName # Prompt the user to enter a specific PDF file name if [ -e "${fileName}.pdf" ]; then # Check if the file with the given name and PDF extension exists files="$fileName.pdf" # Store the file name in the 'files' variable else echo "The $fileName.pdf does not exist in the current path" # Display an error message if the file does not exist exit 1 fi break ;; 'Cancel') exit 1 # Exit the script if the user chooses to cancel ;; *) echo "Invalid option $REPLY" # Display an error message for invalid options exit 1 ;; esac done while true; do read -p "Enter the number of pages you want to be in each part: " part_count # Prompt the user to enter the number of pages per part if [[ $part_count =~ ^[0-9]+$ ]]; then # Check if the input is a numeric value break else echo "Your input is not numeric. Please try again..." # Display an error message for non-numeric input fi done for file in "${files[@]}"; do count=$(pdftk $file dump_data | grep NumberOfPages | awk '{print $2}') # Get the number of pages in the PDF file using pdftk loop_count=$(expr $count / $part_count + 1) # Calculate the number of parts needed for the file reminder=$(($count % $part_count)) # Calculate the remaining pages after dividing into parts for ((i = 1; i <= loop_count; i++)); do if [[ $i == 1 ]]; then start_page=1 else start_page=$((($i - 1) * $part_count + 1)) # Calculate the starting page for each part fi end_page=$(($start_page + $part_count - 1)) # Calculate the ending page for each part if [[ "$i" = "$loop_count" ]]; then if [[ reminder == 0 ]]; then break fi end_page=$(($start_page + $reminder - 1)) # Adjust the ending page for the last part if there is a remainder fi folder="${file%.*}" mkdir -p $folder # Create a folder with the same name as the file (without extension) pdftk $file cat $start_page-$end_page output "$PWD/$folder/$i.pdf" # Extract the specified pages and save them in the folder done done echo "Done" |
مخزن GitHub
برای استفاده از اسکریپت تقسیم صفحات PDF، اول باید فایلهای مربوطه رو دانلود کنید. میتونید از لینک زیر برید به مخزن GitHub پروژه:
https://github.com/a-sadegh63/pdf-splitter
بعد از دانلود، فایلها رو توی محیط توسعهی خود باز کنید. اسکریپت رو با اجرای دستور زیر توی ترمینال اجرا کنید:
1 |
bash split_pdf.sh |
بعد از اجرا، یه منوی ساده باز میشه که میتونید گزینههای مورد نظرتون رو انتخاب کنید. میتونید “تمام فایلهای PDF” رو انتخاب کنید تا همه فایلهای PDF توی پوشه فعلی تقسیم بشن. یا میتونید “فایل PDF خاص” رو انتخاب کنید تا یه فایل خاص رو تقسیم کنید. اگه گزینه “فایل PDF خاص” رو انتخاب کردید، وقتی دعوت شدید، نام فایل رو بدون پسوند وارد کنید.
بعد از انتخاب گزینه، تعداد صفحات مورد نظرتون رو برای هر قسمت وارد کنید. اسکریپت فایل(ها) رو به قسمتهای مختلف تقسیم میکنه و هر قسمت رو توی یه پوشه جداگانه ذخیره میکنه. هر قسمت شامل تعداد مشخصی از صفحات خواهد بود.
پیشنیازهای اسکریپت
قبل از استفاده از این اسکریپت، مطمئن شید که نیازمندیهاش رو برآورده کردید. این اسکریپت برای انجام عملیات روی فایلهای PDF از pdftk استفاده میکنه. پس مطمئن شید که pdftk رو روی سیستمتون نصب کردید.
برای نصب pdftk در اوبونتو میتونید کد زیر را در ترمینال اجرا کنید:
1 |
sudo apt install pdftk |
یادتون باشه که این اسکریپت فرض میکنه که فایلهای PDF توی همون پوشهای که اسکریپت توش هست قرار دارن. همچنین، برای هر فایل PDF (یا فایل خاص)، اسکریپت یه پوشه جدید میسازه و قسمتهای تقسیم شده رو توی پوشههای جداگانه ذخیره میکنه.
حسابی با این اسکریپت بازی کنید و با توجه به نیازهاتون، اون رو سفارشی کنید. امیدوارم از استفاده از این اسکریپت لذت ببرید و بهتون کمک کنه کارهاتون رو راحتتر انجام بدید.
منتظر نظرات و پیشنهاداتتون هستم. با تشکر از همراهیتون!