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:
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.