Sakārtojiet savus attēlus PDF failos un uzziniet, kā izmantot Tkinter, lai izveidotu šo parocīgo utilītu.

Sākot ar biznesa pārskatiem un beidzot ar fotogrāfiju portfeļiem, bieži nāksies saskarties ar nepieciešamību izmantot attēlus PDF failos. Attēla-PDF pārveidotājs var palīdzēt racionalizēt procesu. Lai gan tiešsaistē ir pieejami daudzi bezmaksas rīki, to nepieciešamība augšupielādēt attēlus var būt saistīta ar privātumu vai drošību.

Tā vietā varat izveidot bezsaistes attēla–PDF pārveidotāju, izmantojot Python. Atlasiet vairākus attēlus JPG vai PNG formātā, iegūstiet priekšskatījumu un pārveidojiet tos PDF formātā, saglabājot sākotnējo attēla izmēru.

Tkinter, spilvena un ReportLab modulis

Tkinter ir Python standarta GUI bibliotēka. Tā piedāvā dažādus logrīkus, piemēram, pogas, etiķetes un tekstlodziņus, kas atvieglo tādu lietotņu izstrādi kā mūzikas atskaņotājs vai svara pārveidošanas rīks. Lai instalētu Tkinter savā sistēmā, atveriet termināli un ierakstiet:

pip install tkinter

Spilvena modulis ir jaudīga Python attēlveidošanas bibliotēka, kas ļauj ērti veikt darbības ar attēliem, piemēram, izmēru maiņu, apgriešanu un filtrēšanu. Integrējot šo ar

instagram viewer
OpenAI API un DALL·E 2, varat ģenerēt attēlus, izmantojot teksta uzvedni.

Lai instalētu Pillow, palaidiet šo komandu:

pip install Pillow

ReportLab ir atvērtā koda Python bibliotēka PDF un grafikas ģenerēšanai. Tam ir dažādi rīki, kurus varat izmantot, lai ģenerētu dokumentus ar attēliem, tekstu un tabulām, kas padara to noderīgu atskaišu ģenerēšanu, izmantojot programmēšanu. Izmantojot to, vienlaikus varat arī izveidot biznesa pārskatus, rēķinus un sertifikātus teksta ūdenszīmes pievienošana. Lai instalētu ReportLab:

pip install reportlab

Definējiet attēla-PDF pārveidotāja struktūru

Šeit varat atrast visu avota kodu attēla-PDF pārveidotāja izveidei, izmantojot Python GitHub repozitorijs.

Importējiet nepieciešamos moduļus un izveidojiet klasi ar nosaukumu ImageToPDFConverter. Definējiet konstruktora metodi, kas inicializē klasi un kā argumentu izmanto Tkintera saknes loga objektu. Inicializējiet tukšu sarakstu, lai saglabātu lietotāja atlasīto attēlu ceļus. Iestatiet lietojumprogrammas nosaukumu un izmērus. Izveidojiet divas pogas ar nosaukumu Atlasiet Attēli un Konvertēt uz PDF.

Dodiet garām logam, kurā vēlaties ievietot pogu, tekstu, kas tiem jāparāda, komandu, kas jāizpilda, kad noklikšķināt, un fonta formātu, kas tiem būtu jāpiemēro. Sakārtojiet pogas, izmantojot komplekts() metodi un piešķiriet tiem 10 polsterējumu vertikālā virzienā.

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)

Definējiet etiķeti, nododot to vecāklogam, kurā to ievietot, tekstu, kas tai ir jāparāda, fonta formātu, kas tai jāizmanto, un vertikālu 10 (pikseļu) polsterējumu.

Līdzīgi definējiet rāmi, lai priekšskatītu atlasīto attēlu, un iestatiet tā vecāklogu, platumu un augstumu. Sakārtojiet to ar 10 polsterējumu.

 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)

Attēla atlase un priekšskatījuma izveide

Definējiet metodi, select_images(). Izmantojiet Tkinter's failu dialoglodziņš klase, lai atvērtu dialoglodziņu, lai atlasītu vairākus attēlus un saglabātu tos mapē images_path sarakstu. Nododiet sākotnējo direktoriju, kas jāatver dialoglodziņā, nosaukumu, kas tam jāparāda, un failu tipus, kurus tas ļauj atlasīt.

Definējiet cilpu, kas atkārtojas visos lietotāja atlasīto attēlu ceļos. Izmantojiet spilvenu atvērt () metode, lai atvērtu attēla failu un nodotu maksimālo izmēru, kas tam vajadzētu būt, izmēru maiņas metodei. Konvertēt šo PIL attēlu uz Fotoattēls kas ir saderīgs ar Tkinter. Izveidojiet etiķeti, kas atrodas iepriekš izveidotajā priekšskatījuma rāmī, un parādiet attēlu. Izmantojiet režģis pārvaldnieks, lai sakārtotu attēlus režģa izkārtojumā ar trim kolonnām.

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)

Definējiet metodi, resize_image() kas maina attēla izmēru, ņemot vērā attēla izmēru un maksimālo izmēru, ko definējāt iepriekš. Aprēķiniet malu attiecību un izmantojiet to, lai iestatītu jauno platumu un augstumu. Izmantojiet PIL izmēra maiņas metodi, lai mainītu attēla izmēru, saglabājot neskartu malu attiecību. Izmantojiet bilineāro interpolāciju kā atkārtotu paraugu ņemšanu, lai iegūtu vienmērīgāku rezultātu.

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

Attēlu konvertēšana PDF formātā

Definējiet funkciju, konvertēt_uz_pdf(). Izmantojiet failu dialoglodziņu, lai pieprasītu PDF faila galamērķa ceļu. Iestatiet noklusējuma paplašinājumu un faila veidu kā .pdf. Izmantojiet ReportLab kanvas moduli, lai uzzīmētu ainavas lapu. Atkārtojiet attēlu ceļu, atveriet tos, iestatiet PDF lapas izmērus tādus pašus kā attēla izmērus un zīmējiet attēlu no augšējā kreisā stūra ar norādītajiem izmēriem.

The showPage() metode ļauj PDF failam pāriet uz nākamo lapu. Kad programma ir pabeigusi šo procesu, saglabājiet PDF failu un parādiet ziņojuma lodziņu kopā ar ceļu.

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

Izveidojiet Tkinter saknes logu un nosūtiet to klases instancei. The mainloop() funkcija liek Python palaist Tkinter notikumu cilpu un klausīties notikumus, līdz aizverat logu.

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

Salieciet visu kodu, un attēla pārveidotājs PDF formātā ir gatavs lietošanai.

Izvades piemērs attēlu konvertēšanai PDF formātā, izmantojot Python

Palaižot lietotni, jūs redzēsit logu ar divām pogām un tukšu vietu, kurā būs norādīts, kā atlasīt attēlus.

Noklikšķinot uz Atlasiet Attēli pogu, tiek parādīts logs, kurā tiek lūgts izvēlēties attēlus. Jūs varat izvēlēties jebkuru attēlu skaitu jebkurā kombinācijā.

Kad esat atlasījis vēlamos attēlus, jūs redzēsit to priekšskatījumu:

Noklikšķinot uz pogas Konvertēt uz PDF, varat izvēlēties nosaukumu un ceļu, kur vēlaties saglabāt PDF failu. Kad programma pabeidz konvertēšanu, tā parāda ziņojuma lodziņu, kurā teikts, ka tā ir saglabājusi PDF failu, kam seko ceļa nosaukums. Atverot PDF failu, jūs redzēsit, ka programma ir konvertējusi attēlus, nemainot to izmērus.

PDF operācijas, kuras varat ieviest, lai uzlabotu savas lietojumprogrammas

Varat izveidot pilnvērtīgu PDF lietojumprogrammu, kas veic tādas darbības kā sapludināšana, saspiešana, aizsardzība un atbloķēšana PDF faili. Varat izveidot funkciju, lai sadalītu PDF vairākās lapās, pagrieztu tās, noņemtu noteiktas lapas, kārtotu to un pievienotu lapu. cipariem.

Varat arī eksperimentēt ar citiem failu formātiem, lai pārvērstu dokumentu vai prezentāciju PDF formātā. Vairāki moduļi, piemēram, PyPDF2, PDFMiner, fpdf un pdfrw, var palīdzēt to sasniegt ērtāk.