Организуйте свои изображения в PDF-файлы и узнайте, как использовать Tkinter для создания этой удобной утилиты.

От бизнес-отчетов до портфолио фотографий — вы часто сталкиваетесь с необходимостью использования изображений в PDF-файлах. Конвертер изображений в PDF может упростить процесс. Несмотря на то, что в Интернете доступно множество бесплатных инструментов, их потребность в загрузке изображений может быть проблемой конфиденциальности или безопасности.

Вместо этого вы можете создать автономный конвертер изображений в PDF с помощью Python. Выберите несколько изображений в формате JPG или PNG, получите предварительный просмотр и преобразуйте их в PDF, сохранив исходный размер изображения.

Модуль Tkinter, Pillow и ReportLab

Tkinter — это стандартная библиотека графического интерфейса для Python. Он предлагает множество виджетов, таких как кнопки, метки и текстовые поля, которые упрощают разработку приложений, таких как музыкальный проигрыватель или инструмент преобразования веса. Чтобы установить Tkinter в вашей системе, откройте терминал и введите:

instagram viewer
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 файлдиалог класс, чтобы открыть диалоговое окно для выбора нескольких изображений и сохранения их в изображения_путь список. Передайте начальный каталог, который должно открыть диалоговое окно, заголовок, который он должен отображать, и типы файлов, которые он позволяет выбирать.

Определите цикл, который перебирает все пути к изображениям, выбранным пользователем. Используйте подушку открыть() чтобы открыть файл изображения и передать максимальный размер, которым он должен обладать, методу изменения размера. Преобразуйте это изображение 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

Определите функцию, конвертировать_в_pdf(). Используйте файловый диалог, чтобы запросить путь назначения для 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 и передайте его экземпляру класса. основной цикл () Функция сообщает 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, помогут вам сделать это более удобно.