Организирайте вашите изображения в PDF файлове и научете как да използвате Tkinter, за да създадете тази удобна помощна програма.
От бизнес отчети до фотографски портфолиа, често ще срещнете необходимост от използване на изображения в PDF файлове. Конвертор от изображение към PDF може да помогне за рационализиране на процеса. Въпреки че има много безплатни инструменти, достъпни онлайн, необходимостта от вас да качвате изображения може да е проблем за поверителността или сигурността.
Вместо това можете да създадете офлайн конвертор от изображение към PDF с помощта на Python. Изберете множество изображения във формат JPG или PNG, получете визуализация и ги конвертирайте в PDF, като запазите оригиналния размер на изображението.
Модулът Tkinter, Pillow и ReportLab
Tkinter е стандартната GUI библиотека за Python. Той предлага разнообразие от джаджи като бутони, етикети и текстови полета, които улесняват разработването на приложения като музикален плеър или инструмент за преобразуване на теглото. За да инсталирате Tkinter във вашата система, отворете терминал и въведете:
pip install tkinter
Модулът Pillow е мощна библиотека за изображения на Python, която улеснява извършването на операции върху изображения като преоразмеряване, изрязване и филтриране. Интегрирането на това с OpenAI API и DALL·E 2, можете да генерирате изображения с помощта на текстова подкана.
За да инсталирате Pillow, изпълнете тази команда:
pip install Pillow
ReportLab е библиотека на Python с отворен код за генериране на PDF файлове и графики. Той има различни инструменти, които можете да използвате за генериране на документи с изображения, текст и таблици, което го прави полезно за генериране на отчети чрез програмиране. С това можете да създавате бизнес отчети, фактури и сертификати добавяне на текстов воден знак. За да инсталирате ReportLab:
pip install reportlab
Определете структурата на конвертора от изображение към PDF
Можете да намерите целия изходен код за изграждане на конвертора от изображение към PDF с помощта на Python тук GitHub хранилище.
Импортирайте необходимите модули и създайте клас с име ImageToPDFConverter. Дефинирайте метод на конструктор, който инициализира класа и приема основния обект на прозореца на 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 файлов диалог клас, за да отворите диалогов прозорец за избор на множество изображения и съхраняването им в изображения_път списък. Подайте началната директория, която диалоговият прозорец трябва да отвори, заглавието, което трябва да покаже, и типовете файлове, които позволява за избор.
Дефинирайте цикъл, който обхожда всички пътища на избраните от потребителя изображения. Използвайте възглавниците отворен() метод за отваряне на файла с изображение и предаване на максималния размер, който трябва да притежава, към метода за преоразмеряване. Преобразувайте това PIL изображение в PhotoImage който е съвместим с 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)
Определете метод, resize_image() който преоразмерява изображението, като взема предвид размерите на изображението и максималния размер, който сте дефинирали по-рано. Изчислете съотношението и го използвайте, за да зададете новата ширина и височина. Използвайте метода за преоразмеряване на 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 файла. Задайте разширението по подразбиране и типа на файла като .pdf. Използвайте модула canvas на ReportLab, за да нарисувате пейзажна страница. Преминете по пътя на изображенията, отворете ги, задайте размерите на страницата на PDF файла същите като тези на изображението и начертайте изображението от горния ляв ъгъл с посочените размери.
The showPage() позволява на 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 и го предайте на екземпляра на класа. The 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, могат да ви помогнат да ги постигнете по-удобно.