Как конвертировать изображения в PDF в Python

Tkinter, Pillow и ReportLab. Модули

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

пип установить ткинтер

Модуль Pillow — это мощная библиотека изображений Python, которая упрощает выполнение операций с изображениями, таких как изменение размера, обрезка и фильтрация. Интегрировав его с OpenAI API и DALL·E 2, вы сможете создавать фотографии с текстовыми подсказками.

Чтобы установить Pillow, выполните следующую команду:

pip установить подушку

ReportLab — это библиотека Python с открытым исходным кодом для создания PDF-файлов и графики. Он имеет различные инструменты для создания документов с изображениями, текстом и таблицами. Они полезны для программного создания отчетов. В результате вы можете создавать отчеты компании, счета-фактуры и сертификаты, а также добавлять логотип водяного знака в текст. Чтобы установить ReportLab:

отчет об установке pip

Определите структуру конвертера изображения в PDF

Импортируйте необходимые модули и создайте класс ImageToPDFConverter. Определите конструктор для создания класса и возьмите собственный объект окна Tkinter в качестве аргумента. Инициализирует пустой список для хранения пути к изображениям, выбранным пользователем. Установите заголовок и размер приложения. Создайте две кнопки с именами «Выбрать изображения» и «Преобразовать в PDF».

Переключите окно, в которое вы хотите поместить кнопку, содержимое кнопки будет видно. Это команда, которая будет выполняться при нажатии кнопки, и формат шрифта, который будет применяться к кнопке. Расположите кнопки с помощью метода pack() и задайте им отступ 10 по вертикали.

импортировать tkinter как tk из tkinter импортировать filedialog, окно сообщений из PIL импортировать изображения, ImageTk из reportlab.lib.pagesizes импортировать пейзаж из reportlab.pdfgen импортировать класс холста ImageToPDFConverter: def __init__(self, root): self.root = root self.image_paths = () self.root.title(“Конвертер изображений в PDF”) self.root.geometry(“750×600″) self.select_images_button = tk.Button(self.root, text=”Выбрать изображения”, command=self.select_images, font=(“Helvetica”, 12),) self.select_images_button.pack(pady=10) self.convert_to_pdf_button = tk.Button(self.root, text=”Преобразовать в 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=”Выбрать изображения”, font=(“Helvetica”, 14)) self.select_images_label.pack(pady=10) self.preview_frame = tk.Frame(self.root , ширина = 380, высота = 200) self.preview_frame.pack (pady = 10)

Выберите фотографию и создайте окно предварительного просмотра

Определите метод select_images(). Используйте класс Tkinter filedialog, чтобы открыть диалог выбора нескольких изображений и сохранить их в списке images_path. Переключитесь на исходный каталог, в котором откроется диалоговое окно, заголовок для отображения и тип файла, который диалоговое окно позволяет выбрать.

Определяет цикл, который повторяется по всем путям изображения, которое выбрал пользователь. Используйте метод open() Pillow, чтобы открыть файл изображения и передать максимальный размер, необходимый для метода изменения размера. Преобразуйте этот образ PIL в совместимый с Tkinter PhotoImage. Создайте метку внутри панели предварительного просмотра, которую вы сделали ранее, и отобразите изображение. Используйте диспетчер сетки, чтобы расположить изображения в виде сетки из трех столбцов.

def select_images(self): self.image_paths = filedialog.askopenfilenames(initialdir=” title=”Выбрать изображения”, filetypes=((“Файлы изображений”, “*.jpg *.png”),)) для i, image_path в 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, чтобы изменить размер изображения с сохранением того же соотношения сторон. Используйте билинейную интерполяцию для передискретизации для получения более гладких результатов.

def resize_image (я, изображение, ширина, высота): соотношение сторон = мин (ширина / число с плавающей запятой (изображение. размер (0)), высота / число с плавающей запятой (изображение. размер (1))) new_width = int (соотношение сторон * изображение. размер ( 0)) new_height = int(соотношение сторон * image.size(1)) resized_image = image.resize((new_width, new_height), resample=Image.Resampling.BILINEAR) return resized_image

Преобразование изображений в PDF

Определите функцию convert_to_pdf() . Используйте filedialog, чтобы запросить путь назначения для файла PDF. Установите тип файла и расширение по умолчанию на . пдф . Используйте модуль холста ReportLab для рисования горизонтальной страницы. Повторите путь к изображениям, откройте их, установите размер страницы PDF таким же, как размер изображения, и нарисуйте изображение из верхнего левого угла до указанного размера.

Метод showPage() позволяет PDF-файлу перейти на следующую страницу. После того, как программа завершит этот процесс, сохраните файл PDF и отобразите окно сообщения с путем.

def convert_to_pdf(self): pdf_path = filedialog.asksaveasfilename(defaultextension=”.pdf”, filetypes=((“PDF Files”, “*.pdf”),)) c = canvas.Canvas(pdf_path, pagesize=landscape) для image_path в self.image_paths: image = Image.open(image_path) ширина, высота = image.size c.setPageSize((ширина, высота)) c.drawImage(image_path, 0, 0, ширина=ширина, высота=высота) c .showPage() c.save() messagebox.showinfo(“Преобразование успешно”, f”PDF сохранен в {pdf_path}”)

Создайте корневое окно Tkinter и передайте его в поле класса. Функция mainloop() указывает Python запустить цикл событий Tkinter и прослушивать события, пока вы не закроете окно.

если __name__ == “__main__”: root = tk.Tk() app = ImageToPDFConverter(root) root.mainloop()

Соберите весь код вместе, и конвертер изображений в PDF готов к использованию.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *