سلام دوستان! امروز یه اسکریپت تقسیم صفحات PDF را معرفی میکنم که میتونه بهتون کمک کنه فایلهای PDF رو به قسمتهای کوچیکتر تقسیم کنید. فکر کنم خیلی خوب باشه برای وقتی که میخواین یه فایل PDF رو به چند قسمت تقسیم کنید.
مدت زمان تخمینی مطالعه: 2 دقیقه
فهرست مطالب
کد اسکریپت
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
بعد از دانلود، فایلها رو توی محیط توسعهی خود باز کنید. اسکریپت رو با اجرای دستور زیر توی ترمینال اجرا کنید:
bash split_pdf.sh
بعد از اجرا، یه منوی ساده باز میشه که میتونید گزینههای مورد نظرتون رو انتخاب کنید. میتونید “تمام فایلهای PDF” رو انتخاب کنید تا همه فایلهای PDF توی پوشه فعلی تقسیم بشن. یا میتونید “فایل PDF خاص” رو انتخاب کنید تا یه فایل خاص رو تقسیم کنید. اگه گزینه “فایل PDF خاص” رو انتخاب کردید، وقتی دعوت شدید، نام فایل رو بدون پسوند وارد کنید.
بعد از انتخاب گزینه، تعداد صفحات مورد نظرتون رو برای هر قسمت وارد کنید. اسکریپت فایل(ها) رو به قسمتهای مختلف تقسیم میکنه و هر قسمت رو توی یه پوشه جداگانه ذخیره میکنه. هر قسمت شامل تعداد مشخصی از صفحات خواهد بود.
پیشنیازهای اسکریپت
قبل از استفاده از این اسکریپت، مطمئن شید که نیازمندیهاش رو برآورده کردید. این اسکریپت برای انجام عملیات روی فایلهای PDF از pdftk استفاده میکنه. پس مطمئن شید که pdftk رو روی سیستمتون نصب کردید.
برای نصب pdftk در اوبونتو میتونید کد زیر را در ترمینال اجرا کنید:
sudo apt install pdftk
یادتون باشه که این اسکریپت فرض میکنه که فایلهای PDF توی همون پوشهای که اسکریپت توش هست قرار دارن. همچنین، برای هر فایل PDF (یا فایل خاص)، اسکریپت یه پوشه جدید میسازه و قسمتهای تقسیم شده رو توی پوشههای جداگانه ذخیره میکنه.
حسابی با این اسکریپت بازی کنید و با توجه به نیازهاتون، اون رو سفارشی کنید. امیدوارم از استفاده از این اسکریپت لذت ببرید و بهتون کمک کنه کارهاتون رو راحتتر انجام بدید.
منتظر نظرات و پیشنهاداتتون هستم. با تشکر از همراهیتون!
بیشتر بخوانید
مسیر فایل در اکسل | نمایش اطلاعات پوشه و نام فایل فعلی در سلول اکسل
مشکل network unreachable در اوبونتو
ویرایشگر VBA | چگونه ویرایشگر کد ویژوال بیسیک را باز نمایم؟
اتصال VBA به MYSQL | انتقال داده ها از MYSQL به اکسس و اکسل
Developer tab در اکسل | چگونه سربرگ توسعه دهنده را در اکسل فعال نمایم؟
افزودن متغیر به رشته | چگونه متغیر را به یک رشته ثابت اضافه نمایم؟