Korraldage oma pildid PDF-ideks ja õppige, kuidas kasutada Tkinterit selle käepärase utiliidi koostamiseks.

Alates äriaruannetest kuni fotograafiaportfooliodeni puutute sageli kokku vajadusega kasutada PDF-failides pilte. Pildi-PDF-i konverter võib aidata protsessi sujuvamaks muuta. Kuigi Internetis on saadaval palju tasuta tööriistu, võib nende vajadus piltide üleslaadimiseks olla privaatsus- või turvaprobleem.

Selle asemel saate Pythoni abil luua võrguühenduseta pildi-PDF-i konverteri. Valige mitu JPG- või PNG-vormingus pilti, hankige eelvaade ja teisendage need PDF-failiks, säilitades samal ajal pildi algse suuruse.

Moodul Tkinter, padi ja ReportLab

Tkinter on Pythoni standardne GUI teek. See pakub mitmesuguseid vidinaid, nagu nupud, sildid ja tekstikastid, mis muudavad rakenduste, näiteks muusikamängija või kaalu teisendamise tööriist. Tkinteri installimiseks oma süsteemi avage terminal ja tippige:

pip install tkinter

Padja moodul on võimas Pythoni pilditeek, mis muudab piltidega toimingute, näiteks suuruse muutmise, kärpimise ja filtreerimise lihtsaks. Selle integreerimine

instagram viewer
OpenAI API ja DALL·E 2 abil saate luua pilte tekstiviipa abil.

Padja installimiseks käivitage see käsk:

pip install Pillow

ReportLab on avatud lähtekoodiga Pythoni teek PDF-ide ja graafika loomiseks. Sellel on mitmesuguseid tööriistu, mida saate kasutada piltide, teksti ja tabelitega dokumentide genereerimiseks, mis muudab aruannete loomise programmeerimise kaudu kasulikuks. Selle abil saate koostada ka äriaruandeid, arveid ja sertifikaate teksti vesimärgi lisamine. ReportLabi installimiseks tehke järgmist.

pip install reportlab

Määratlege Image-to-PDF-muunduri struktuur

Siit leiate kogu lähtekoodi Pythoni abil pildi-PDF-i konverteri loomiseks GitHubi hoidla.

Importige vajalikud moodulid ja looge klass nimega ImageToPDFConverter. Määratlege konstruktormeetod, mis initsialiseerib klassi ja võtab argumendina Tkinteri juurakna objekti. Käivitage tühi loend, et salvestada kasutaja valitud piltide teed. Määrake rakenduse pealkiri ja mõõtmed. Looge kaks nimega nuppu Valige Pildid ja Teisendage PDF-iks.

Edastage aken, kuhu soovite nupu asetada, tekst, mida nad peaksid kuvama, käsk, mille nad peaksid klõpsamisel käivitama, ja fondivorming, mida nad peaksid rakendama. Korraldage nupud kasutades pakk () meetodil ja andke neile vertikaalsuunas polsterdus 10.

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)

Määratlege silt, edastades selle ülemakna, kuhu see asetada, teksti, mida see peaks kuvama, kasutatava fondivormingu ja vertikaalse täidisega 10 (pikslit).

Samamoodi määrake raam valitud pildi eelvaateks ja määrake selle põhiaken, laius ja kõrgus. Korraldage see 10-kordse polsterdusega.

 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)

Pildi valimine ja eelvaate loomine

Määratlege meetod, select_images(). Kasutage Tkinterit failidialoog klassis, et avada dialoogiboks mitme pildi valimiseks ja nende salvestamiseks images_path nimekirja. Edastage esialgne kataloog, mille dialoogiboks peaks avanema, pealkiri, mida see peaks kuvama, ja failitüübid, mida see valida võimaldab.

Määratlege silmus, mis kordab kõiki kasutaja valitud piltide teid. Kasutage patja avatud () meetod pildifaili avamiseks ja maksimaalse mõõtme edastamiseks, mis sellel peaks olema suuruse muutmise meetodile. Teisenda see PIL-pilt järgmiseks PhotoImage mis ühildub Tkinteriga. Looge silt, mis asub varem loodud eelvaate raamis, ja kuvage pilt. Kasuta võre haldur, et korraldada kujutised kolme veeruga ruudustiku paigutusena.

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)

Määratlege meetod, resize_image() mis muudab pildi suurust, võttes arvesse pildi suurust ja varem määratletud maksimaalset mõõdet. Arvutage kuvasuhe ja kasutage seda uue laiuse ja kõrguse määramiseks. Kasutage pildi suuruse muutmiseks PIL-i suuruse muutmise meetodit, hoides kuvasuhte muutumatuna. Sujuvama tulemuse saavutamiseks kasutage uuesti diskretsioonina bilineaarset interpolatsiooni.

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

Piltide teisendamine PDF-iks

Määratlege funktsioon, convert_to_pdf(). Kasutage failidialoogi, et küsida PDF-i sihtkoha tee. Määrake vaikelaiendiks ja failitüübiks kui .pdf. Kasutage horisontaalse lehe joonistamiseks ReportLabi lõuendimoodulit. Korrake piltide teekonda, avage need, määrake PDF-i lehe mõõtmed pildi omaga samaks ja joonistage pilt vasakust ülanurgast määratud mõõtmetega.

The showPage() meetod võimaldab PDF-il liikuda järgmisele lehele. Kui programm on selle protsessi lõpetanud, salvestage PDF-fail ja kuvage koos teega sõnumikast.

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

Looge Tkinteri juuraken ja edastage see klassi eksemplarile. The mainloop() funktsioon käsib Pythonil käivitada Tkinteri sündmusetsükli ja kuulata sündmusi, kuni sulgete akna.

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

Pange kogu kood kokku ja pildist PDF-iks teisendaja on kasutamiseks valmis.

Näidisväljund piltide PDF-i teisendamiseks Pythoni abil

Rakenduse käivitamisel näete kahe nupu ja tühja ruumiga akent, mis juhendab teil pilte valima.

Klõpsates Valige Pildid nuppu, ilmub aken, mis palub teil pildid valida. Saate valida mis tahes kombinatsioonis suvalise arvu pilte.

Kui olete soovitud pildid valinud, näete nende eelvaadet:

Klõpsates nuppu Teisenda PDF-iks, saate valida nime ja tee, kuhu soovite PDF-faili salvestada. Kui programm on teisendamise lõpetanud, kuvab see teatekasti, mis ütleb, et PDF on salvestatud, millele järgneb tee nimi. PDF-i avamisel näete, et programm on pildid teisendanud ilma nende mõõtmeid muutmata.

PDF-toimingud, mida saate oma rakenduste täiustamiseks rakendada

Saate luua täisväärtusliku PDF-rakenduse, mis teostab selliseid toiminguid nagu liitmine, tihendamine, kaitsmine ja avamine PDF-id. Saate luua funktsiooni PDF-i mitmeks leheküljeks jagamiseks, nende pööramiseks, teatud lehtede eemaldamiseks, sortimiseks ja lehe lisamiseks numbrid.

Dokumendi või esitluse PDF-vormingus teisendamiseks saate katsetada ka teiste failivormingutega. Mitmed moodulid, nagu PyPDF2, PDFMiner, fpdf ja pdfrw, aitavad teil neid mugavamalt saavutada.