این برنامه با استفاده از کتابخانههای Python، وظیفه استخراج تصاویر از فایلهای PDF و ذخیره آنها در پوشهای مشخص را بر عهده دارد. در ادامه، تحلیل جامع بخشهای مختلف این برنامه ارائه شده است.
برنامه ابتدا به کاربر اجازه میدهد تا از طریق یک رابط کاربری گرافیکی ساده، فایل PDF موردنظر خود را انتخاب کند. سپس تصاویر موجود در صفحات PDF را شناسایی کرده و آنها را در یک پوشه مشخص ذخیره میکند. در نهایت، گزارشی از عملیات انجامشده ارائه میدهد.
- کتابخانه os: برای مدیریت مسیرها و ایجاد پوشهها.
- کتابخانه tkinter: جهت ایجاد دیالوگ فایل برای انتخاب PDF.
- کتابخانه PyPDF2: برای خواندن و پردازش فایل PDF.
- کتابخانه Pillow (PIL): برای پردازش و ذخیره تصاویر.
- کتابخانه io: برای تبدیل دادههای باینری به فرمت خوانا برای Pillow.
- تابع extract_images_from_pdf ، این تابع قلب برنامه است که مسئولیت استخراج و ذخیره تصاویر را برعهده دارد. عملیات آن به شرح زیر است:
- بررسی وجود پوشه خروجی و ایجاد آن در صورت نیاز.
- باز کردن فایل PDF و پیمایش صفحات آن.
- شناسایی و استخراج منابع تصویری در هر صفحه.
- تبدیل دادههای باینری تصاویر به فرمتهای قابل ذخیره (مانند PNG).
- ذخیره تصاویر در پوشه خروجی و مدیریت استثناها در صورت بروز خطا.
- تابع select_pdf_and_extract_images ، این تابع وظیفه تعامل با کاربر را دارد:
- نمایش یک دیالوگ انتخاب فایل PDF.
- تعیین مسیر پوشه خروجی برای ذخیره تصاویر.
- فراخوانی تابع extract_images_from_pdf برای پردازش فایل انتخابشده.
- بخش اصلی برنامه:
- برنامه بررسی میکند که آیا به صورت مستقیم اجرا شده است یا خیر. در صورت اجرا، فرآیند انتخاب فایل و استخراج تصاویر آغاز میشود.
- رابط کاربری کاربرپسند
- برنامه با استفاده از tkinter یک دیالوگ ساده برای انتخاب فایل ارائه میدهد که کار با آن حتی برای کاربران مبتدی آسان است.
- مدیریت استثناها
- هرگونه خطا در فرآیند استخراج تصاویر (مانند فرمتهای نامعتبر یا مشکلات فایل) شناسایی و گزارش میشود، بدون اینکه اجرای کلی برنامه مختل شود.
- ساختار خروجی منظم
- تصاویر استخراجشده به صورت مرتب و با نامگذاری مناسب در پوشهای به نام extracted_images ذخیره میشوند.
- سادگی و خوانایی کد: کد به گونهای نوشته شده که به راحتی قابل درک و گسترش است.
- ماژولار بودن: توابع جداگانه برای هر بخش از عملیات، امکان مدیریت و بهبود آسانتر را فراهم میکنند.
- گزارشدهی: پیامهای پایانی برنامه اطلاعات مفیدی درباره وضعیت استخراج تصاویر ارائه میدهند.
این برنامه، ابزاری قدرتمند و ساده برای استخراج تصاویر از فایلهای PDF است. استفاده از کتابخانههای متنوع Python، انعطافپذیری و قابلیت توسعه آن را افزایش میدهد. با اعمال برخی بهبودها، این برنامه میتواند برای طیف گستردهای از کاربران، از مبتدی تا حرفهای، بسیار کارآمد باشد.
import os
from tkinter import Tk, filedialog
from PyPDF2 import PdfReader
from PIL import Image
import io
def extract_images_from_pdf(pdf_path, output_folder):
"""
استخراج تصاویر از یک فایل PDF و ذخیره آنها در پوشهای مشخص
"""
# اگر پوشه خروجی وجود ندارد، آن را ایجاد کن
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# باز کردن فایل PDF
pdf_reader = PdfReader(pdf_path)
image_count = 0 # شمارش تعداد تصاویر استخراجشده
# پیمایش صفحات PDF
for page_number, page in enumerate(pdf_reader.pages):
# بررسی وجود منابع تصویری در صفحه
if '/XObject' in page['/Resources']:
x_objects = page['/Resources']['/XObject'].get_object()
for obj_name in x_objects:
x_object = x_objects[obj_name]
# بررسی اینکه آیا شیء فعلی تصویر است یا خیر
if x_object['/Subtype'] == '/Image':
try:
# استخراج دادههای تصویر
data = x_object.get_data() # دادههای باینری تصویر
mode = 'RGB' if x_object['/ColorSpace'] == '/DeviceRGB' else 'P' # مشخص کردن مود رنگ
# تبدیل دادههای تصویر به یک تصویر واقعی
img = Image.open(io.BytesIO(data))
img = img.convert(mode) # اطمینان از صحت مود تصویر
# ایجاد نام فایل و ذخیره تصویر
image_count += 1
img_path = os.path.join(output_folder, f"image_{page_number + 1}_{image_count}.png")
img.save(img_path)
print(f"ذخیره شد: {img_path}")
except Exception as e:
# اگر خطایی رخ دهد، آن را چاپ کن و ادامه بده
print(f"خطا در پردازش تصویر صفحه {page_number + 1}: {e}")
# نمایش پیام نهایی
if image_count > 0:
print(f"استخراج کامل شد! {image_count} تصویر در پوشه '{output_folder}' ذخیره شد.")
else:
print("هیچ تصویری در فایل PDF پیدا نشد.")
def select_pdf_and_extract_images():
"""
باز کردن پنجره انتخاب فایل و استخراج تصاویر از فایل PDF انتخابشده
"""
# پنهان کردن پنجره اصلی Tkinter
Tk().withdraw()
# باز کردن دیالوگ انتخاب فایل
pdf_path = filedialog.askopenfilename(filetypes=[("PDF files", "*.pdf")])
if not pdf_path:
print("هیچ فایلی انتخاب نشد.")
return
# تعیین پوشه خروجی برای ذخیره تصاویر
output_folder = os.path.join(os.path.dirname(pdf_path), "extracted_images")
# استخراج تصاویر از فایل PDF
extract_images_from_pdf(pdf_path, output_folder)
if __name__ == "__main__":
# اجرای اصلی برنامه
select_pdf_and_extract_images()