Uporządkuj swoje obrazy w plikach PDF i dowiedz się, jak używać Tkintera do tworzenia tego przydatnego narzędzia.

Od raportów biznesowych po portfolio fotograficzne, często będziesz musiał używać obrazów w plikach PDF. Konwerter obrazu na plik PDF może pomóc usprawnić ten proces. Chociaż w Internecie dostępnych jest wiele bezpłatnych narzędzi, ich potrzeba przesyłania zdjęć może stanowić problem dotyczący prywatności lub bezpieczeństwa.

Zamiast tego możesz zbudować konwerter obrazu offline na PDF za pomocą Pythona. Wybierz wiele obrazów w formacie JPG lub PNG, uzyskaj podgląd i przekonwertuj je na plik PDF, zachowując oryginalny rozmiar obrazu.

Moduł Tkinter, Pillow i ReportLab

Tkinter to standardowa biblioteka GUI dla Pythona. Oferuje różnorodne widżety, takie jak przyciski, etykiety i pola tekstowe, które ułatwiają tworzenie aplikacji, takich jak odtwarzacz muzyki lub narzędzie do konwersji wagi. Aby zainstalować Tkintera w swoim systemie, otwórz terminal i wpisz:

pip install tkinter

Moduł Pillow to potężna biblioteka obrazów Pythona, która ułatwia wykonywanie operacji na obrazach, takich jak zmiana rozmiaru, kadrowanie i filtrowanie. Integracja tego z

instagram viewer
OpenAI API i DALL·E 2, możesz generować obrazy za pomocą monitu tekstowego.

Aby zainstalować Pillow, uruchom to polecenie:

pip install Pillow

ReportLab to otwarta biblioteka Pythona do generowania plików PDF i grafiki. Posiada różne narzędzia, za pomocą których można generować dokumenty z obrazami, tekstem i tabelami, dzięki czemu przydatne jest generowanie raportów za pomocą programowania. Dzięki temu możesz jednocześnie tworzyć raporty biznesowe, faktury i certyfikaty dodanie tekstowego znaku wodnego. Aby zainstalować ReportLab:

pip install reportlab

Zdefiniuj strukturę konwertera obrazu na PDF

Możesz znaleźć cały kod źródłowy do budowania konwertera obrazu na PDF za pomocą Pythona w tym Repozytorium GitHub.

Zaimportuj niezbędne moduły i utwórz klasę o nazwie ImageToPDFConverter. Zdefiniuj metodę konstruktora, która inicjuje klasę i przyjmuje obiekt okna głównego Tkintera jako argument. Zainicjuj pustą listę do przechowywania ścieżek obrazów wybranych przez użytkownika. Ustaw tytuł i wymiary aplikacji. Utwórz dwa przyciski o nazwie Wybierz Obrazy I Konwertuj do formatu PDF.

Podaj okno, w którym chcesz umieścić przycisk, tekst, który mają wyświetlić, polecenie, które mają wykonać po kliknięciu, oraz format czcionki, który mają zastosować. Uporządkuj przyciski za pomocą Pakiet() metodę i nadaj im dopełnienie 10 w kierunku pionowym.

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)

Zdefiniuj etykietę, przekazując ją do okna nadrzędnego, w którym ma zostać umieszczona, tekst, który ma wyświetlać, format czcionki, którego ma używać, oraz pionowe wypełnienie o wartości 10 (pikseli).

Podobnie zdefiniuj ramkę do podglądu wybranego obrazu i ustaw jego okno nadrzędne, szerokość i wysokość. Zorganizuj to za pomocą wypełnienia 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)

Wybór obrazu i tworzenie podglądu

Zdefiniuj metodę, wybierz_obrazy(). Użyj Tkintera pole dialogowe class, aby otworzyć okno dialogowe, aby wybrać wiele obrazów i zapisać je w ścieżka_obrazów lista. Podaj początkowy katalog, który okno dialogowe powinno otworzyć, tytuł, który ma wyświetlić, oraz typy plików, które pozwala na wybór.

Zdefiniuj pętlę, która iteruje po wszystkich ścieżkach obrazów wybranych przez użytkownika. Użyj Pillow's otwarty() aby otworzyć plik obrazu i przekazać maksymalny wymiar, jaki powinien mieć, do metody resize. Przekonwertuj ten obraz PIL na ZdjęcieObraz który jest kompatybilny z Tkinterem. Utwórz etykietę, która znajduje się w utworzonej wcześniej ramce podglądu i wyświetl obraz. Użyj siatka menedżera do organizowania obrazów w układzie siatki z trzema kolumnami.

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)

Zdefiniuj metodę, zmiana rozmiaru obrazu() który zmienia rozmiar obrazu, biorąc pod uwagę wymiar obrazu i maksymalny wymiar zdefiniowany wcześniej. Oblicz współczynnik proporcji i użyj go do ustawienia nowej szerokości i wysokości. Użyj metody zmiany rozmiaru PIL, aby zmienić rozmiar obrazu, zachowując nienaruszony współczynnik proporcji. Użyj interpolacji dwuliniowej jako ponownego próbkowania, aby uzyskać gładszy wynik.

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

Konwersja obrazów do formatu PDF

Zdefiniuj funkcję, konwertuj_do_pdf(). Użyj filedialog, aby zapytać o ścieżkę docelową dla pliku PDF. Ustaw domyślne rozszerzenie i typ pliku jako .pdf. Użyj modułu canvas ReportLab, aby narysować stronę poziomą. Iteruj po ścieżce obrazów, otwórz je, ustaw wymiary strony pliku PDF takie same jak obrazu i narysuj obraz od lewego górnego rogu o określonych wymiarach.

The pokaż stronę() umożliwia przejście pliku PDF do następnej strony. Gdy program zakończy ten proces, zapisz plik PDF i pokaż okno komunikatu wraz ze ścieżką.

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}")

Utwórz okno główne Tkintera i przekaż je do instancji klasy. The główna pętla() mówi Pythonowi, aby uruchomił pętlę zdarzeń Tkinter i nasłuchiwał zdarzeń, dopóki nie zamkniesz okna.

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

Złóż cały kod razem, a konwerter obrazu na plik PDF będzie gotowy do użycia.

Przykładowy wynik konwersji obrazów do formatu PDF przy użyciu Pythona

Po uruchomieniu aplikacji zobaczysz okno z dwoma przyciskami i pustym miejscem z instrukcją wyboru obrazów.

Po kliknięciu Wybierz Obrazy przycisk, pojawi się okno z prośbą o wybranie obrazów. Możesz wybrać dowolną liczbę obrazów w dowolnej kombinacji.

Po wybraniu żądanych obrazów zobaczysz ich podgląd:

Klikając przycisk Konwertuj na PDF, możesz wybrać nazwę i ścieżkę, w której chcesz zapisać plik PDF. Gdy program zakończy konwersję, wyświetli okno komunikatu z informacją, że zapisał plik PDF, po którym następuje nazwa ścieżki. Po otwarciu pliku PDF okaże się, że program przekonwertował obrazy bez zmiany ich wymiarów.

Operacje PDF, które możesz wdrożyć, aby ulepszyć swoje aplikacje

Możesz zbudować pełnoprawną aplikację PDF, która wykonuje takie operacje, jak scalanie, kompresowanie, zabezpieczanie i odblokowywanie pliki PDF. Możesz zbudować funkcję dzielenia pliku PDF na wiele stron, obracać je, usuwać określone strony, sortować i dodawać strony liczby.

Możesz także eksperymentować z innymi formatami plików, aby przekonwertować dokument lub prezentację na format PDF. Kilka modułów, takich jak PyPDF2, PDFMiner, fpdf i pdfrw, może ułatwić osiągnięcie tych celów.