Organizirajte svoje slike v datoteke PDF in se naučite uporabljati Tkinter za izdelavo tega priročnega pripomočka.

Od poslovnih poročil do fotografskih portfeljev boste pogosto naleteli na potrebo po uporabi slik v PDF-jih. Pretvornik slike v PDF lahko pomaga poenostaviti postopek. Čeprav je na spletu na voljo veliko brezplačnih orodij, je njihova potreba, da naložite slike, morda skrb za zasebnost ali varnost.

Namesto tega lahko s Pythonom zgradite pretvornik slike v PDF brez povezave. Izberite več slik v formatu JPG ali PNG, pridobite predogled in jih pretvorite v PDF, pri čemer ohranite prvotno velikost slike.

Modul Tkinter, Pillow in ReportLab

Tkinter je standardna knjižnica GUI za Python. Ponuja različne pripomočke, kot so gumbi, oznake in besedilna polja, ki olajšajo razvoj aplikacij, kot je predvajalnik glasbe ali orodje za pretvorbo teže. Če želite namestiti Tkinter v svoj sistem, odprite terminal in vnesite:

pip install tkinter

Modul Pillow je zmogljiva slikovna knjižnica Python, ki olajša izvajanje operacij na slikah, kot so spreminjanje velikosti, obrezovanje in filtriranje. Integracija tega z

OpenAI API in DALL·E 2, lahko ustvarite slike z uporabo besedilnega poziva.

Če želite namestiti Pillow, zaženite ta ukaz:

pip install Pillow

ReportLab je odprtokodna knjižnica Python za ustvarjanje PDF-jev in grafik. Ima različna orodja, ki jih lahko uporabite za ustvarjanje dokumentov s slikami, besedilom in tabelami, zaradi česar je uporabno ustvarjanje poročil prek programiranja. S tem lahko sestavljate tudi poslovna poročila, račune in potrdila dodajanje besedilnega vodnega žiga. Če želite namestiti ReportLab:

pip install reportlab

Določite strukturo pretvornika slike v PDF

Tukaj lahko najdete celotno izvorno kodo za izdelavo pretvornika slike v PDF z uporabo Pythona Repozitorij GitHub.

Uvozite potrebne module in ustvarite razred z imenom ImageToPDFConverter. Definirajte metodo konstruktorja, ki inicializira razred in vzame Tkinterjev korenski okenski objekt kot argument. Inicializirajte prazen seznam za shranjevanje poti slik, ki jih izbere uporabnik. Nastavite naslov in dimenzije aplikacije. Ustvari dva gumba z imenom Izberite Slike in Pretvori v PDF.

Podajte okno, v katerega želite postaviti gumb, besedilo, ki ga morajo prikazati, ukaz, ki naj ga izvršijo ob kliku, in obliko pisave, ki naj jo uporabijo. Organizirajte gumbe z uporabo paket() in jim dajte oblazinjenje 10 v navpični smeri.

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)

Oznako definirajte tako, da ji posredujete nadrejeno okno, v katerega jo želite postaviti, besedilo, ki naj bo prikazano, obliko pisave, ki naj jo uporablja, in navpični odmik 10 (pikslov).

Podobno definirajte okvir za predogled izbrane slike in nastavite njeno nadrejeno okno, širino in višino. Organizirajte ga z oblazinjenjem 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)

Izbira slike in ustvarjanje predogleda

Določite metodo, select_images(). Uporabi Tkinterjevo filedialog razred, da odprete pogovorno okno za izbiro več slik in njihovo shranjevanje v images_path seznam. Posredujte začetni imenik, ki naj se odpre pogovorno okno, naslov, ki ga mora prikazati, in vrste datotek, ki jih dovoljuje za izbiro.

Določite zanko, ki ponavlja vse poti slik, ki jih je izbral uporabnik. Uporabite blazine odprto() metoda za odpiranje slikovne datoteke in posredovanje največje dimenzije, ki jo mora imeti, metodi spreminjanja velikosti. Pretvori to sliko PIL v PhotoImage ki je združljiv s Tkinterjem. Ustvarite oznako, ki se nahaja v okvirju za predogled, ki ste ga ustvarili prej, in prikažite sliko. Uporabi mreža upravitelja za organiziranje slik v mrežni postavitvi s tremi stolpci.

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)

Določite metodo, resize_image() ki spremeni velikost slike ob upoštevanju dimenzije slike in največje dimenzije, ki ste jo definirali prej. Izračunajte razmerje stranic in z njim nastavite novo širino in višino. Uporabite metodo spreminjanja velikosti PIL, da spremenite velikost slike, pri čemer ohranite razmerje stranic nedotaknjeno. Uporabite bilinearno interpolacijo kot ponovno vzorčenje za bolj gladek 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

Pretvarjanje slik v PDF

Definirajte funkcijo, pretvori_v_pdf(). Uporabite pogovorno okno za datoteke, da vprašate za ciljno pot za PDF. Nastavite privzeto končnico in vrsto datoteke kot .pdf. Uporabite ReportLabov modul canvas za risanje ležeče strani. Preglejte pot slik, jih odprite, nastavite dimenzije strani PDF-ja enake tistim slike in narišite sliko iz zgornjega levega kota z določenimi dimenzijami.

The showPage() omogoča, da se PDF premakne na naslednjo stran. Ko program zaključi ta postopek, shranite PDF in pokažite polje s sporočilom skupaj s potjo.

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

Ustvarite korensko okno Tkinter in ga posredujte primerku razreda. The glavna zanka() funkcija pove Pythonu, naj zažene zanko dogodkov Tkinter in posluša dogodke, dokler ne zaprete okna.

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

Sestavite vso kodo in pretvornik slike v PDF je pripravljen za uporabo.

Primer izpisa pretvorbe slik v PDF z uporabo Pythona

Ko zaženete aplikacijo, boste videli okno z dvema gumboma in praznim prostorom, ki vam bosta ukazala, da izberete slike.

Ob kliku na Izberite Slike se prikaže okno, v katerem morate izbrati slike. Izberete lahko poljubno število slik v poljubni kombinaciji.

Ko izberete želene slike, boste videli njihov predogled:

Ko kliknete gumb Pretvori v PDF, lahko izberete ime in pot, kamor želite shraniti datoteko PDF. Ko program konča pretvorbo, prikaže okno s sporočilom, da je shranil PDF, ki mu sledi ime poti. Ko odprete PDF, boste ugotovili, da je program pretvoril slike, ne da bi spremenil njihove dimenzije.

Operacije PDF, ki jih lahko implementirate za izboljšanje svojih aplikacij

Ustvarite lahko popolno aplikacijo PDF, ki izvaja operacije, kot so združevanje, stiskanje, zaščita in odklepanje datoteke PDF. Ustvarite lahko funkcijo za razdelitev PDF-ja na več strani, njihovo obračanje, odstranjevanje določenih strani, razvrščanje in dodajanje strani številke.

Preizkušate lahko tudi z drugimi oblikami datotek za pretvorbo dokumenta ali predstavitve v PDF. Več modulov, kot so PyPDF2, PDFMiner, fpdf in pdfrw, vam lahko pomaga doseči to bolj priročno.