Usporiadajte svoje obrázky do súborov PDF a naučte sa používať Tkinter na vytvorenie tejto šikovnej pomôcky.

Od obchodných správ až po portfóliá fotografií často narazíte na potrebu používať obrázky v súboroch PDF. Prevodník obrázkov na PDF môže pomôcť zefektívniť proces. Aj keď je online k dispozícii veľa bezplatných nástrojov, ich potreba nahrať obrázky môže byť problémom ochrany osobných údajov alebo bezpečnosti.

Namiesto toho môžete vytvoriť offline prevodník obrázkov na PDF pomocou Pythonu. Vyberte viacero obrázkov vo formáte JPG alebo PNG, získajte náhľad a preveďte ich do formátu PDF pri zachovaní pôvodnej veľkosti obrázka.

Modul Tkinter, Vankúš a ReportLab

Tkinter je štandardná knižnica GUI pre Python. Ponúka množstvo miniaplikácií, ako sú tlačidlá, štítky a textové polia, ktoré uľahčujú vývoj aplikácií ako napr hudobný prehrávač alebo nástroj na konverziu hmotnosti. Ak chcete nainštalovať Tkinter do svojho systému, otvorte terminál a zadajte:

pip install tkinter

Modul Pillow je výkonná knižnica obrázkov Python, ktorá uľahčuje vykonávanie operácií s obrázkami, ako je zmena veľkosti, orezanie a filtrovanie. Integrácia tohto s

instagram viewer
OpenAI API a DALL·E 2, môžete generovať obrázky pomocou textovej výzvy.

Ak chcete nainštalovať vankúš, spustite tento príkaz:

pip install Pillow

ReportLab je open source knižnica Python na generovanie súborov PDF a grafiky. Má rôzne nástroje, ktoré môžete použiť na generovanie dokumentov s obrázkami, textom a tabuľkami, vďaka čomu je užitočné vytvárať zostavy pomocou programovania. Pomocou toho môžete vytvárať obchodné správy, faktúry a certifikáty pridanie textového vodoznaku. Inštalácia ReportLab:

pip install reportlab

Definujte štruktúru konvertora obrázkov na PDF

Celý zdrojový kód na zostavenie prevodníka obrázkov do PDF pomocou Pythonu nájdete v tomto úložisko GitHub.

Importujte potrebné moduly a vytvorte triedu s názvom ImageToPDFConverter. Definujte metódu konštruktora, ktorá inicializuje triedu a berie ako argument objekt koreňového okna Tkinter. Inicializujte prázdny zoznam na uloženie ciest obrázkov, ktoré používateľ vyberie. Nastavte názov a rozmery aplikácie. Vytvorte dve tlačidlá s názvom Vyberte položku Obrázky a Previesť do PDF.

Zadajte okno, do ktorého chcete tlačidlo umiestniť, text, ktorý sa má zobraziť, príkaz, ktorý sa má vykonať po kliknutí, a formát písma, ktorý sa má použiť. Usporiadajte tlačidlá pomocou balenie() metódou a dajte im výplň 10 vo vertikálnom smere.

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)

Definujte štítok tak, že mu prejdete cez rodičovské okno, do ktorého sa má umiestniť, text, ktorý by sa mal zobraziť, formát písma, ktorý by mal používať, a zvislé odsadenie 10 (pixelov).

Podobne definujte rám na náhľad vybratého obrázka a nastavte jeho rodičovské okno, šírku a výšku. Usporiadajte to s výplňou 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)

Výber obrázka a vytvorenie náhľadu

Definujte metódu, select_images(). Použite Tkinter's dialógové okno súboru triedy, čím otvoríte dialógové okno na výber viacerých obrázkov a ich uloženie do cesta k obrázkom zoznam. Zadajte počiatočný adresár, ktorý by sa malo otvoriť v dialógovom okne, názov, ktorý by sa mal zobraziť, a typy súborov, ktoré umožňuje výber.

Definujte slučku, ktorá sa bude opakovať cez všetky cesty obrázkov, ktoré používateľ vybral. Použite vankúše OTVORENÉ() metóda na otvorenie súboru obrázka a odovzdanie maximálneho rozmeru, ktorý by mal mať, metóde zmeny veľkosti. Preveďte tento obrázok PIL na PhotoImage ktorý je kompatibilný s Tkinter. Vytvorte štítok, ktorý sa nachádza v rámčeku ukážky, ktorý ste vytvorili predtým, a zobrazte obrázok. Použi mriežka manažér na usporiadanie obrázkov do mriežkového rozloženia s tromi stĺpcami.

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)

Definujte metódu, resize_image() ktorý zmení veľkosť obrázka s ohľadom na rozmer obrázka a maximálny rozmer, ktorý ste definovali predtým. Vypočítajte pomer strán a použite ho na nastavenie novej šírky a výšky. Použite metódu zmeny veľkosti PIL na zmenu veľkosti obrázka so zachovaním pomeru strán. Pre plynulejší výsledok použite bilineárnu interpoláciu ako prevzorkovanie.

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

Konverzia obrázkov do formátu PDF

Definujte funkciu, convert_to_pdf(). Pomocou dialógového okna súboru sa opýtajte na cieľovú cestu pre súbor PDF. Nastavte predvolenú príponu a typ súboru ako .pdf. Na kreslenie stránky na šírku použite modul plátna ReportLab. Iterujte cez cestu obrázkov, otvorte ich, nastavte rozmery strany PDF rovnaké ako rozmery obrázka a nakreslite obrázok z ľavého horného rohu so zadanými rozmermi.

The showPage() metóda umožňuje PDF presunúť sa na ďalšiu stranu. Keď program dokončí tento proces, uložte súbor PDF a zobrazte okno so správou spolu s cestou.

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

Vytvorte koreňové okno Tkinter a odovzdajte ho inštancii triedy. The mainloop() funkcia hovorí Pythonu, aby spustil slučku udalostí Tkinter a počúval udalosti, kým nezatvoríte okno.

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

Zložte celý kód a konvertor obrázkov do PDF je pripravený na použitie.

Príklad výstupu prevodu obrázkov do PDF pomocou Pythonu

Po spustení aplikácie sa zobrazí okno s dvoma tlačidlami a prázdnym priestorom, ktorý vás informuje o výbere obrázkov.

Po kliknutí na Vyberte položku Obrázky zobrazí sa okno s výzvou na výber obrázkov. Môžete vybrať ľubovoľný počet obrázkov v ľubovoľnej kombinácii.

Po výbere požadovaných obrázkov sa vám zobrazí ich ukážka:

Po kliknutí na tlačidlo Previesť do PDF môžete vybrať názov a cestu, kam chcete súbor PDF uložiť. Po dokončení prevodu program zobrazí okno so správou, že uložil súbor PDF, za ktorým nasleduje názov cesty. Po otvorení PDF zistíte, že program skonvertoval obrázky bez zmeny ich rozmerov.

Operácie PDF, ktoré môžete implementovať na vylepšenie svojich aplikácií

Môžete vytvoriť plnohodnotnú aplikáciu PDF, ktorá vykonáva operácie, ako je zlučovanie, kompresia, ochrana a odomykanie PDF. Môžete vytvoriť funkciu na rozdelenie PDF na viacero strán, ich otočenie, odstránenie konkrétnych strán, zoradenie a pridanie strany čísla.

Pri prevode dokumentu alebo prezentácie do formátu PDF môžete experimentovať aj s inými formátmi súborov. Niekoľko modulov, ako napríklad PyPDF2, PDFMiner, fpdf a pdfrw, vám môže pomôcť dosiahnuť ich pohodlnejšie.