نظّم صورك في ملفات PDF وتعلم كيفية استخدام Tkinter لبناء هذه الأداة المفيدة.

من تقارير الأعمال إلى ملفات التصوير الفوتوغرافي ، غالبًا ما ستواجه الحاجة إلى استخدام الصور في ملفات PDF. يمكن أن يساعد محول الصورة إلى PDF في تبسيط العملية. في حين أن هناك العديد من الأدوات المجانية المتاحة عبر الإنترنت ، فإن حاجتهم إلى تحميل الصور قد تكون مصدر قلق يتعلق بالخصوصية أو الأمان.

بدلاً من ذلك ، يمكنك إنشاء محول صورة إلى PDF دون اتصال بالإنترنت باستخدام Python. حدد صورًا متعددة بتنسيق JPG أو PNG ، واحصل على معاينة ، وقم بتحويلها إلى PDF مع الحفاظ على حجم الصورة الأصلي.

وحدة Tkinter والوسادة و ReportLab

Tkinter هي مكتبة واجهة المستخدم الرسومية القياسية لبايثون. يقدم مجموعة متنوعة من الأدوات مثل الأزرار والتسميات ومربعات النص التي تسهل تطوير تطبيقات مثل مشغل الموسيقى أو أداة تحويل الوزن. لتثبيت Tkinter في نظامك ، افتح Terminal ، واكتب:

pip install tkinter

تعتبر وحدة الوسادة مكتبة تصوير بايثون قوية تسهل إجراء عمليات على الصور مثل تغيير الحجم والقص والتصفية. دمج هذا مع OpenAI API و DALL · E 2 ، يمكنك إنشاء الصور باستخدام موجه نص.

instagram viewer

لتثبيت وسادة ، قم بتشغيل هذا الأمر:

pip install Pillow

ReportLab هي مكتبة Python مفتوحة المصدر لإنشاء ملفات PDF والرسومات. يحتوي على أدوات متنوعة يمكنك استخدامها لإنشاء مستندات تحتوي على صور ونصوص وجداول مما يجعل إنشاء التقارير عبر البرمجة مفيدًا. باستخدام هذا ، يمكنك إنشاء تقارير الأعمال والفواتير والشهادات أثناء ذلك أيضًا إضافة علامة مائية نصية. لتثبيت ReportLab:

pip install reportlab

حدد هيكل محول الصورة إلى PDF

يمكنك العثور على الكود المصدري بالكامل لبناء محول صورة إلى PDF باستخدام Python في هذا مستودع جيثب.

استيراد الوحدات اللازمة وإنشاء فئة باسم محول ImageToPDFC. حدد طريقة منشئ تقوم بتهيئة الفئة وتأخذ كائن نافذة الجذر لـ Tkinter كوسيطة. قم بتهيئة قائمة فارغة لتخزين مسارات الصور التي يختارها المستخدم. حدد عنوان التطبيق وأبعاده. قم بإنشاء زرين مسميين حدد الصور و قم بالتحويل إلى PDF.

قم بتمرير النافذة التي تريد وضع الزر فيها ، والنص الذي يجب عرضه ، والأمر الذي يجب تنفيذه عند النقر فوقه ، وتنسيق الخط الذي يجب تطبيقه. قم بتنظيم الأزرار باستخدام ملف علية() الطريقة ومنحهم حشوة 10 في الاتجاه الرأسي.

import tkinter as tk
from tkinter import filedialog, messagebox
from PIL import Image, ImageTk
from reportlab.lib.pagesizes import landscape
from reportlab.pdfgen import canvas

classImageToPDFConverter:
def__init__(self, root):
self.root = root
self.image_paths = []
self.root.title("Image to PDF Converter")
self.root.geometry("750x600")
self.select_images_button = tk.Button(self.root, text="Select Images", command=self.select_images, font=("Helvetica", 12),)
self.select_images_button.pack(pady=10)
self.convert_to_pdf_button = tk.Button(self.root, text="Convert to PDF", command=self.convert_to_pdf, font=("Helvetica", 12),)
self.convert_to_pdf_button.pack(pady=10)

حدد الملصق بتمريره النافذة الأصلية لوضعه فيه ، والنص الذي يجب أن يعرضه ، وتنسيق الخط الذي يجب استخدامه ، والحشو الرأسي بمقدار 10 (بكسل).

وبالمثل ، حدد إطارًا لمعاينة الصورة المحددة وقم بتعيين النافذة الأصلية والعرض والارتفاع. قم بتنظيمه بحشوة مقدارها 10.

 self.select_images_label = tk.Label(self.root, text="Select Images", font=("Helvetica", 14))
self.select_images_label.pack(pady=10)
self.preview_frame = tk.Frame(self.root, width=380, height=200)
self.preview_frame.pack(pady=10)

اختيار الصورة وإنشاء معاينة

تحديد طريقة ، select_images (). استخدم Tkinter's سجل الملفات class لفتح مربع حوار لتحديد صور متعددة وتخزينها في ملف images_path قائمة. مرر الدليل الأولي الذي يجب أن يفتحه مربع الحوار ، والعنوان الذي يجب أن يعرضه ، وأنواع الملفات التي يسمح بها للاختيار.

حدد حلقة تتكرر في جميع مسارات الصور التي حددها المستخدم. استخدم الوسادة يفتح() طريقة لفتح ملف الصورة وتمرير البعد الأقصى الذي يجب أن يمتلكه لطريقة تغيير الحجم. تحويل هذه الصورة PIL إلى صورة فوتوغرافية هذا متوافق مع Tkinter. قم بإنشاء تسمية موجودة في إطار المعاينة الذي قمت بإنشائه مسبقًا واعرض الصورة. استخدم ال شبكة مدير لتنظيم الصور في تخطيط شبكي بثلاثة أعمدة.

defselect_images(self):
self.image_paths = filedialog.askopenfilenames(initialdir="/", title="Select Images", filetypes=(("Image Files", "*.jpg *.png"),))

for i, image_path in enumerate(self.image_paths):
image = Image.open(image_path)
image = self.resize_image(image, width=150, height=150)
photo = ImageTk.PhotoImage(image)
label = tk.Label(self.preview_frame, image=photo)
label.image = photo
label.grid(row=i // 3, column=i % 3, padx=10, pady=10)

تحديد طريقة ، تغيير حجم الصورة() يقوم بتغيير حجم الصورة مع مراعاة أبعاد الصورة والحد الأقصى للبعد الذي حددته سابقًا. احسب نسبة العرض إلى الارتفاع واستخدمها لتعيين العرض والارتفاع الجديدين. استخدم طريقة تغيير حجم PIL لتغيير حجم الصورة مع الحفاظ على نسبة العرض إلى الارتفاع سليمة. استخدم الاستيفاء الخطي لإعادة التشكيل للحصول على نتيجة أكثر سلاسة.

defresize_image(self, image, width, height):
aspect_ratio = min(width / float(image.size[0]), height / float(image.size[1]))
new_width = int(aspect_ratio * image.size[0])
new_height = int(aspect_ratio * image.size[1])
resized_image = image.resize((new_width, new_height), resample=Image.Resampling.BILINEAR)
return resized_image

تحويل الصور إلى PDF

تحديد وظيفة ، convert_to_pdf (). استخدم مربع الحوار للمطالبة بمسار الوجهة لملف PDF. عيّن الامتداد الافتراضي ونوع الملف كملف .بي دي إف. استخدم وحدة الرسم القماشية في ReportLab لرسم صفحة أفقية. كرر مسار الصور ، وافتحها ، واضبط أبعاد صفحة PDF بنفس أبعاد الصورة ، وارسم الصورة من الزاوية اليسرى العليا بالأبعاد المحددة.

ال عرض الصفحة () تسمح الطريقة لملف PDF بالانتقال إلى الصفحة التالية. بمجرد أن يكمل البرنامج هذه العملية ، احفظ ملف PDF وأظهر مربع رسالة مع المسار.

defconvert_to_pdf(self):
pdf_path = filedialog.asksaveasfilename(defaultextension=".pdf", filetypes=(("PDF Files", "*.pdf"),))
c = canvas.Canvas(pdf_path, pagesize=landscape)
for image_path in self.image_paths:
image = Image.open(image_path)
width, height = image.size
c.setPageSize((width, height))
c.drawImage(image_path, 0, 0, width=width, height=height)
c.showPage()
c.save()
messagebox.showinfo("Conversion Successful", f"PDF saved at {pdf_path}")

قم بإنشاء نافذة جذر Tkinter وقم بتمريرها إلى مثيل الفئة. ال mainloop () تخبر الوظيفة Python بتشغيل حلقة حدث Tkinter والاستماع إلى الأحداث حتى تغلق النافذة.

if __name__ == "__main__":
root = tk.Tk()
app = ImageToPDFConverter(root)
root.mainloop()

ضع كل الكود معًا وسيكون محول الصورة إلى PDF جاهزًا للاستخدام.

مثال على إخراج تحويل الصور إلى PDF باستخدام Python

عند تشغيل التطبيق ، سترى نافذة بها زرين ومساحة فارغة ترشدك إلى تحديد الصور.

عند النقر فوق ملف حدد الصور زر ، نافذة منبثقة تطلب منك اختيار الصور. يمكنك تحديد أي عدد من الصور في أي مجموعة.

بمجرد تحديد الصور التي تريدها ، سترى معاينة لها:

عند النقر فوق زر التحويل إلى PDF ، يمكنك تحديد الاسم والمسار حيث تريد تخزين ملف PDF. بمجرد أن ينتهي البرنامج من التحويل ، فإنه يعرض مربع رسالة تفيد بأنه قد حفظ ملف PDF متبوعًا باسم المسار. عند فتح ملف PDF ، ستجد أن البرنامج قد قام بتحويل الصور دون تغيير أبعادها.

عمليات PDF التي يمكنك تنفيذها لتحسين تطبيقاتك

يمكنك إنشاء تطبيق PDF كامل ينفذ عمليات مثل الدمج والضغط والحماية وفتح القفل ملفات PDF. يمكنك إنشاء ميزة لتقسيم ملف PDF إلى عدة صفحات وتدويرها وإزالة صفحات معينة وفرزها وإضافة صفحة أعداد.

يمكنك تجربة تنسيقات ملفات أخرى أيضًا لتحويل مستند أو عرض تقديمي إلى PDF. يمكن أن تساعدك العديد من الوحدات ، مثل PyPDF2 و PDFMiner و fpdf و pdfrw ، في تحقيق ذلك بسهولة أكبر.