Rendezze képeit PDF-be, és tanulja meg, hogyan használhatja a Tkintert ennek a praktikus segédprogramnak a felépítéséhez.

Az üzleti jelentésektől a fényképes portfóliókig gyakran találkozhat azzal, hogy képeket PDF-ben kell használni. Egy kép-PDF konverter segíthet leegyszerűsíteni a folyamatot. Bár számos ingyenes eszköz elérhető az interneten, a képek feltöltése adatvédelmi vagy biztonsági aggályokat jelenthet.

Ehelyett létrehozhat egy offline kép-PDF konvertert a Python használatával. Válasszon ki több képet JPG vagy PNG formátumban, tekintse meg az előnézetet, és konvertálja PDF formátumba, miközben megtartja az eredeti képméretet.

A Tkinter, Párna és ReportLab modul

A Tkinter a Python szabványos grafikus felhasználói felületének könyvtára. Számos widgetet kínál, például gombokat, címkéket és szövegdobozokat, amelyek megkönnyítik az olyan alkalmazások fejlesztését, mint a zenelejátszó vagy egy súlyátalakító eszköz. A Tkinter rendszerbe való telepítéséhez nyisson meg egy terminált, és írja be:

instagram viewer
pip install tkinter

A Pillow modul egy hatékony Python képalkotó könyvtár, amely megkönnyíti a képeken végzett műveletek végrehajtását, például az átméretezést, a vágást és a szűrést. Ennek integrálása a Az OpenAI API és a DALL·E 2 segítségével szöveges prompt segítségével hozhat létre képeket.

A Pillow telepítéséhez futtassa ezt a parancsot:

pip install Pillow

A ReportLab egy nyílt forráskódú Python-könyvtár PDF-ek és grafikák generálására. Különféle eszközökkel rendelkezik, amelyek segítségével képeket, szöveget és táblázatokat tartalmazó dokumentumokat állíthat elő, ami hasznossá teszi a jelentések programozással történő előállítását. Ezzel üzleti jelentéseket, számlákat és tanúsítványokat is készíthet szöveges vízjel hozzáadása. A ReportLab telepítése:

pip install reportlab

Határozza meg a Kép-PDF konverter szerkezetét

Ebben megtalálja a teljes forráskódot a kép-PDF konverter Python használatával történő felépítéséhez GitHub adattár.

Importálja a szükséges modulokat, és hozzon létre egy nevű osztályt ImageToPDFConverter. Határozzon meg egy konstruktor metódust, amely inicializálja az osztályt, és argumentumként veszi a Tkinter gyökérablak objektumát. Inicializáljon egy üres listát a felhasználó által kiválasztott képek elérési útjainak tárolására. Állítsa be az alkalmazás címét és méreteit. Hozzon létre két nevű gombot Válassza a Képek lehetőséget és Konvertálás PDF-be.

Adja át az ablakot, amelybe el szeretné helyezni a gombot, a szöveget, amelyet meg kell jelenítenie, a parancsot, amelyet kattintáskor végre kell hajtania, és az alkalmazni kívánt betűformátumot. Rendszerezze a gombokat a segítségével csomag() módszerrel, és adjon nekik egy 10-es párnázást függőleges irányban.

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)

Határozzon meg egy címkét úgy, hogy átadja azt a szülőablaknak, amelyben elhelyezi, a megjelenítendő szöveget, a használni kívánt betűformátumot és egy 10 (pixeles) függőleges kitöltést.

Hasonlóképpen határozzon meg egy keretet a kiválasztott kép előnézetéhez, és állítsa be a szülőablakát, szélességét és magasságát. Rendezze 10-es párnával.

 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)

Kép kiválasztása és előnézet létrehozása

Határozzon meg egy módszert, select_images(). Használd a Tkinter-t fájl párbeszédpanel osztályban egy párbeszédpanel megnyitásához több kép kiválasztásához és tárolásához images_path lista. Adja át a kezdeti könyvtárat, amelyet a párbeszédpanelnek meg kell nyitnia, a címet, amelyet meg kell jelenítenie, és a kiválasztható fájltípusokat.

Határozzon meg egy ciklust, amely a felhasználó által kiválasztott képek összes útvonalán iterál. Használjon párnát nyisd ki() módszerrel megnyithatja a képfájlt, és átadhatja az átméretezés módszernek a maximális méretet, amellyel rendelkeznie kell. Konvertálja ezt a PIL-képet erre: PhotoImage amely kompatibilis a Tkinterrel. Hozzon létre egy címkét, amely a korábban létrehozott előnézeti keretben található, és jelenítse meg a képet. Használja a rács kezelővel, hogy a képeket három oszlopos rács elrendezésbe rendezze.

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)

Határozzon meg egy módszert, resize_image() amely átméretezi a képet, figyelembe véve a kép méretét és a korábban meghatározott maximális méretet. Számítsa ki a képarányt, és használja az új szélességet és magasságot. Használja a PIL átméretezési módszerét a kép átméretezéséhez úgy, hogy a képarány változatlan marad. Használjon bilineáris interpolációt újramintavételezésként a simább eredmény érdekében.

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

Képek konvertálása PDF-be

Határozzon meg egy függvényt, convert_to_pdf(). A fájl párbeszédablakban kérje meg a PDF célútvonalát. Állítsa be az alapértelmezett kiterjesztést és fájltípust a következőre: .pdf. Fekvő oldal rajzolásához használja a ReportLab vászonmodulját. Iteráljon a képek útvonalán, nyissa meg őket, állítsa be a PDF oldalának méreteit a képével megegyezően, és rajzolja meg a képet a bal felső sarokból a megadott méretekkel.

A showPage() módszer lehetővé teszi, hogy a PDF a következő oldalra lépjen. Miután a program befejezte ezt a folyamatot, mentse a PDF-fájlt, és mutasson meg egy üzenetdobozt az elérési úttal együtt.

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

Hozza létre a Tkinter gyökérablakát, és adja át az osztálypéldánynak. A mainloop() függvény azt mondja a Pythonnak, hogy futtassa a Tkinter eseményhurkot, és figyelje az eseményeket, amíg be nem zárja az ablakot.

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

Helyezze össze az összes kódot, és a kép-PDF konverter készen áll a használatra.

Példa a képek PDF-be konvertálására Python használatával

Az alkalmazás futtatásakor megjelenik egy ablak két gombbal és egy üres területtel, amely a képek kiválasztására utasítja.

A gombra kattintva Válassza a Képek lehetőséget gombot, felugrik egy ablak, amely a képek kiválasztására kéri. Bármilyen kombinációban tetszőleges számú képet kiválaszthat.

Miután kiválasztotta a kívánt képeket, megjelenik azok előnézete:

A Konvertálás PDF-be gombra kattintva kiválaszthatja a nevét és az elérési utat, ahová a PDF-fájlt tárolni szeretné. Amint a program befejezte az átalakítást, megjelenik egy üzenetdoboz, amely szerint elmentette a PDF-fájlt, majd az elérési út nevét. A PDF megnyitásakor látni fogja, hogy a program a képeket a méretük megváltoztatása nélkül konvertálta.

Az alkalmazások fejlesztéséhez végrehajtható PDF-műveletek

Készíthet egy teljes értékű PDF-alkalmazást, amely olyan műveleteket hajt végre, mint az összevonás, tömörítés, védelem és feloldás PDF-ek. Létrehozhat egy funkciót a PDF több oldalra történő felosztásához, elforgatásához, bizonyos oldalak eltávolításához, rendezéséhez és oldal hozzáadásához. számok.

Kísérletezhet más fájlformátumokkal is, ha egy dokumentumot vagy prezentációt PDF formátumba konvertál. Számos modul, például a PyPDF2, PDFMiner, fpdf és pdfrw segíthet ezek kényelmesebb elérésében.