Sutvarkykite vaizdus į PDF ir išmokite naudoti „Tkinter“, kad sukurtumėte šią patogią priemonę.

Nuo verslo ataskaitų iki fotografijos aplankų dažnai susidursite su poreikiu naudoti vaizdus PDF rinkmenose. Vaizdo į PDF konverteris gali padėti supaprastinti procesą. Nors internete yra daug nemokamų įrankių, jų poreikis įkelti vaizdus gali būti privatumo ar saugumo problema.

Vietoj to, naudodami Python, galite sukurti neprisijungusį vaizdo į PDF keitiklį. Pasirinkite kelis vaizdus JPG arba PNG formatu, gaukite peržiūrą ir konvertuokite juos į PDF, išlaikydami pradinį vaizdo dydį.

„Tkinter“, „Pagalvės“ ir „ReportLab“ modulis

Tkinter yra standartinė Python GUI biblioteka. Jame yra įvairių valdiklių, pvz., mygtukų, etikečių ir teksto laukelių, kurie leidžia lengvai kurti programas, pvz. muzikos grotuvas arba svorio konvertavimo įrankis. Norėdami įdiegti „Tkinter“ savo sistemoje, atidarykite terminalą ir įveskite:

pip install tkinter

Pagalvės modulis yra galinga Python vaizdų biblioteka, kuri leidžia lengvai atlikti tokias operacijas su vaizdais kaip dydžio keitimas, apkarpymas ir filtravimas. Integruojant tai su

instagram viewer
OpenAI API ir DALL·E 2, galite generuoti vaizdus naudodami teksto raginimą.

Norėdami įdiegti pagalvę, paleiskite šią komandą:

pip install Pillow

ReportLab yra atvirojo kodo Python biblioteka, skirta PDF ir grafikai generuoti. Jame yra įvairių įrankių, kuriuos galite naudoti kurdami dokumentus su vaizdais, tekstu ir lentelėmis, todėl naudinga kurti ataskaitas programuojant. Taip pat galite kurti verslo ataskaitas, sąskaitas faktūras ir sertifikatus pridėti tekstinį vandens ženklą. Norėdami įdiegti ReportLab:

pip install reportlab

Apibrėžkite vaizdo į PDF keitiklio struktūrą

Čia galite rasti visą šaltinio kodą, skirtą vaizdo į PDF konverteriui kurti naudojant Python GitHub saugykla.

Importuokite reikiamus modulius ir sukurkite klasę pavadinimu ImageToPDFConverter. Apibrėžkite konstruktoriaus metodą, kuris inicijuoja klasę ir kaip argumentą priima Tkinter šakninio lango objektą. Inicijuokite tuščią sąrašą, kad išsaugotumėte vartotojo pasirinktų vaizdų kelius. Nustatykite programos pavadinimą ir matmenis. Sukurkite du pavadinimus Pasirinkite Vaizdai ir Konvertuoti į PDF.

Praleiskite langą, kuriame norite įdėti mygtuką, tekstą, kurį jie turėtų rodyti, komandą, kurią jie turėtų vykdyti spustelėję, ir šrifto formatą, kurį jie turėtų taikyti. Sutvarkykite mygtukus naudodami paketas() metodu ir suteikite jiems 10 paminkštinimą vertikalia kryptimi.

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)

Apibrėžkite etiketę perduodami ją pagrindiniam langui, į kurį norite įdėti, tekstą, kurį ji turi rodyti, šrifto formatą, kurį ji turėtų naudoti, ir vertikalią 10 (pikselių) užpildymą.

Panašiai apibrėžkite rėmelį, kad peržiūrėtumėte pasirinktą vaizdą, ir nustatykite jo pirminį langą, plotį ir aukštį. Sutvarkykite jį su 10 paminkštinimu.

 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)

Vaizdo pasirinkimas ir peržiūros kūrimas

Apibrėžkite metodą, select_images(). Naudokite Tkinter's failų dialogas klasėje, kad atidarytumėte dialogo langą, kad galėtumėte pasirinkti kelis vaizdus ir išsaugoti juos images_path sąrašą. Perduokite pradinį katalogą, kurį turėtų atidaryti dialogo langas, pavadinimą, kurį jis turėtų rodyti, ir failų tipus, kuriuos jame galima pasirinkti.

Apibrėžkite kilpą, kuri kartojasi per visus vartotojo pasirinktų vaizdų kelius. Naudokite pagalvę atviras() būdas atidaryti vaizdo failą ir perduoti didžiausią dydį, kurį jis turėtų turėti dydžio keitimo metodui. Konvertuoti šį PIL vaizdą į PhotoImage kuri yra suderinama su Tkinter. Sukurkite etiketę, esančią anksčiau sukurtame peržiūros rėmelyje, ir parodykite vaizdą. Naudoti tinklelis tvarkyklę, kad galėtumėte tvarkyti vaizdus tinklelio išdėstyme su trimis stulpeliais.

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)

Apibrėžkite metodą, resize_image() kuri pakeičia vaizdo dydį, atsižvelgdama į vaizdo matmenis ir didžiausią anksčiau apibrėžtą matmenį. Apskaičiuokite formato koeficientą ir naudokite jį naujam plotiui ir aukščiui nustatyti. Naudokite PIL dydžio keitimo metodą, kad pakeistumėte vaizdo dydį, nepažeisdami kraštinių santykio. Norėdami gauti sklandų rezultatą, naudokite bilinijinę interpoliaciją kaip pakartotinį atranką.

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

Vaizdų konvertavimas į PDF

Apibrėžkite funkciją, konvertuoti_į_pdf(). Norėdami paprašyti PDF paskirties kelio, naudokite failų dialogo langą. Nustatykite numatytąjį plėtinį ir failo tipą kaip .pdf. Naudokite „ReportLab“ drobės modulį gulsčiojo puslapio piešimui. Pakartokite vaizdų kelią, atidarykite juos, nustatykite PDF puslapio matmenis taip, kaip ir vaizdo, ir nubrėžkite vaizdą iš viršutinio kairiojo kampo nurodytais matmenimis.

The Rodyti puslapį () metodas leidžia PDF perkelti į kitą puslapį. Kai programa baigs šį procesą, išsaugokite PDF ir kartu su keliu parodykite pranešimo laukelį.

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

Sukurkite „Tkinter“ šakninį langą ir perduokite jį klasės egzemplioriui. The mainloop () funkcija liepia Python paleisti Tkinter įvykių kilpą ir klausytis įvykių, kol uždarysite langą.

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

Sudėkite visą kodą ir vaizdo į PDF keitiklis yra paruoštas naudoti.

Vaizdų konvertavimo į PDF naudojant Python išvesties pavyzdys

Paleidę programą pamatysite langą su dviem mygtukais ir tuščia vieta, kurioje nurodoma pasirinkti vaizdus.

Spustelėjus Pasirinkite Vaizdai mygtuką, pasirodo langas, kuriame prašoma pasirinkti vaizdus. Galite pasirinkti bet kokį vaizdų skaičių bet kokiame derinyje.

Pasirinkę norimus vaizdus, ​​pamatysite jų peržiūrą:

Spustelėję mygtuką Konvertuoti į PDF, galite pasirinkti pavadinimą ir kelią, kuriame norite saugoti PDF failą. Kai programa baigia konvertuoti, ji parodo pranešimo laukelį, kuriame sakoma, kad išsaugojo PDF ir kelio pavadinimą. Atidarę PDF pamatysite, kad programa konvertavo vaizdus nepakeitusi jų matmenų.

PDF operacijos, kurias galite įgyvendinti norėdami patobulinti savo programas

Galite sukurti visavertę PDF programą, kuri atlieka tokias operacijas kaip sujungimas, glaudinimas, apsauga ir atrakinimas PDF. Galite sukurti funkciją, skirtą padalyti PDF į kelis puslapius, juos pasukti, pašalinti tam tikrus puslapius, rūšiuoti ir pridėti puslapį numeriai.

Galite eksperimentuoti ir su kitais failų formatais, konvertuodami dokumentą ar pristatymą į PDF. Keletas modulių, pvz., PyPDF2, PDFMiner, fpdf ir pdfrw, gali padėti jums tai pasiekti patogiau.