Organizirajte svoje slike u PDF-ove i naučite kako koristiti Tkinter za izradu ovog praktičnog uslužnog programa.

Od poslovnih izvješća do portfelja fotografija, često ćete naići na potrebu za korištenjem slika u PDF-ovima. Konverter slike u PDF može pomoći u pojednostavljenju procesa. Iako postoji mnogo besplatnih alata dostupnih na mreži, njihova potreba da učitavate slike može biti problem privatnosti ili sigurnosti.

Umjesto toga, pomoću Pythona možete izraditi izvanmrežni pretvarač slike u PDF. Odaberite više slika u JPG ili PNG formatu, pregledajte ih i pretvorite ih u PDF uz zadržavanje izvorne veličine slike.

Modul Tkinter, Pillow i ReportLab

Tkinter je standardna GUI biblioteka za Python. Nudi razne widgete poput gumba, oznaka i tekstualnih okvira koji olakšavaju razvoj aplikacija poput glazbeni player ili alat za pretvorbu težine. Da biste instalirali Tkinter u svoj sustav, otvorite terminal i upišite:

pip install tkinter

Modul Pillow moćna je knjižnica slika Python koja olakšava izvođenje operacija na slikama kao što su promjena veličine, obrezivanje i filtriranje. Integrirajući ovo sa

instagram viewer
OpenAI API i DALL·E 2, možete generirati slike koristeći tekstualni upit.

Da biste instalirali Pillow, pokrenite ovu naredbu:

pip install Pillow

ReportLab je Python biblioteka otvorenog koda za generiranje PDF-ova i grafika. Ima razne alate koje možete koristiti za generiranje dokumenata sa slikama, tekstom i tablicama što ga čini korisnim za generiranje izvješća putem programiranja. Uz to možete izraditi poslovna izvješća, fakture i potvrde dodavanje tekstualnog vodenog žiga. Da biste instalirali ReportLab:

pip install reportlab

Definirajte strukturu pretvarača slike u PDF

Ovdje možete pronaći cijeli izvorni kod za izradu pretvarača slike u PDF koristeći Python GitHub spremište.

Uvezite potrebne module i stvorite klasu pod nazivom ImageToPDFConverter. Definirajte metodu konstruktora koja inicijalizira klasu i uzima Tkinterov korijenski objekt prozora kao argument. Inicijalizirajte prazan popis za pohranjivanje putanja slika koje korisnik odabere. Postavite naslov i dimenzije aplikacije. Stvorite dva gumba s nazivom Odaberite Slike i Pretvori u PDF.

Proslijedite prozor u koji želite smjestiti gumb, tekst koji bi trebali prikazati, naredbu koju bi trebali izvršiti kada se klikne i format fonta koji bi trebali primijeniti. Organizirajte gumbe pomoću paket() način i dajte im ispunu od 10 u okomitom smjeru.

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)

Definirajte oznaku tako da joj proslijedite nadređeni prozor u koji ćete je smjestiti, tekst koji bi trebao prikazati, format fonta koji bi trebao koristiti i okomitu udaljenost od 10 (piksela).

Slično, definirajte okvir za pretpregled odabrane slike i postavite njezin nadređeni prozor, širinu i visinu. Organizirajte ga s ispunom od 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)

Odabir slike i stvaranje pregleda

Definirajte metodu, select_images(). Koristite Tkinterov filedialog razreda za otvaranje dijaloškog okvira za odabir više slika i njihovo pohranjivanje u putanja_slike popis. Proslijedite početni direktorij koji bi dijaloški okvir trebao otvoriti, naslov koji bi trebao prikazati i vrste datoteka koje dopušta za odabir.

Definirajte petlju koja ponavlja sve staze slika koje je korisnik odabrao. Koristite jastuke otvoren() metoda za otvaranje slikovne datoteke i prosljeđivanje maksimalne dimenzije koju bi trebala imati metodi promjene veličine. Pretvorite ovu PIL sliku u PhotoImage koji je kompatibilan s Tkinterom. Napravite oznaku koja se nalazi u okviru za pregled koji ste prethodno stvorili i prikažite sliku. Koristiti rešetka upravitelj za organiziranje slika u rešetkastom rasporedu s tri stupca.

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)

Definirajte metodu, resize_image() koji mijenja veličinu slike uzimajući u obzir dimenziju slike i maksimalnu dimenziju koju ste ranije definirali. Izračunajte omjer širine i visine slike i pomoću njega postavite novu širinu i visinu. Upotrijebite PIL-ovu metodu promjene veličine za promjenu veličine slike, a da omjer slike ostane nepromijenjen. Koristite bilinearnu interpolaciju kao ponovno uzorkovanje za glatkiji rezultat.

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

Pretvaranje slika u PDF

Definirajte funkciju, pretvori_u_pdf(). Upotrijebite dijaloški okvir datoteke da zatražite odredišni put za PDF. Postavite zadani nastavak i vrstu datoteke kao .pdf. Upotrijebite ReportLabov modul platna za crtanje pejzažne stranice. Iterirajte po putanji slika, otvorite ih, postavite dimenzije stranice PDF-a na iste kao i slike i nacrtajte sliku iz gornjeg lijevog kuta s navedenim dimenzijama.

The prikaži stranicu() omogućuje PDF-u prelazak na sljedeću stranicu. Nakon što program dovrši ovaj proces, spremite PDF i pokažite okvir s porukom zajedno s putanjom.

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

Napravite Tkinter korijenski prozor i proslijedite ga instanci klase. The glavna petlja() funkcija govori Pythonu da pokrene Tkinter petlju događaja i osluškuje događaje dok ne zatvorite prozor.

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

Sastavite sav kod i pretvarač slike u PDF spreman je za korištenje.

Primjer ispisa pretvaranja slika u PDF pomoću Pythona

Kada pokrenete aplikaciju, vidjet ćete prozor s dva gumba i praznim prostorom koji vas upućuje da odaberete slike.

Pritiskom na Odaberite Slike gumb, pojavit će se prozor s upitom da odaberete slike. Možete odabrati bilo koji broj slika u bilo kojoj kombinaciji.

Nakon što odaberete željene slike, vidjet ćete njihov pregled:

Klikom na gumb Pretvori u PDF možete odabrati naziv i put na koji želite pohraniti PDF datoteku. Nakon što program završi pretvorbu, prikazuje okvir s porukom da je spremio PDF nakon čega slijedi naziv putanje. Prilikom otvaranja PDF-a vidjet ćete da je program pretvorio slike bez promjene njihovih dimenzija.

PDF operacije koje možete implementirati kako biste poboljšali svoje aplikacije

Možete izgraditi potpunu PDF aplikaciju koja izvodi operacije kao što su spajanje, sažimanje, zaštita i otključavanje PDF datoteke. Možete izraditi značajku za dijeljenje PDF-a na više stranica, njihovo rotiranje, uklanjanje određenih stranica, sortiranje i dodavanje stranice brojevima.

Možete eksperimentirati i s drugim formatima datoteka za pretvaranje dokumenta ili prezentacije u PDF. Nekoliko modula, kao što su PyPDF2, PDFMiner, fpdf i pdfrw, mogu vam pomoći da to lakše postignete.