Organizați-vă imaginile în fișiere PDF și aflați cum să utilizați Tkinter pentru a construi acest utilitar la îndemână.
De la rapoarte de afaceri la portofolii de fotografii, veți întâlni adesea nevoia de a utiliza imagini în PDF-uri. Un convertor de imagine în PDF poate ajuta la eficientizarea procesului. Deși există multe instrumente gratuite disponibile online, nevoia lor de a încărca imagini poate fi o problemă de confidențialitate sau securitate.
În schimb, puteți construi un convertor offline de imagine în PDF folosind Python. Selectați mai multe imagini în format JPG sau PNG, obțineți o previzualizare și convertiți-le într-un PDF, păstrând în același timp dimensiunea originală a imaginii.
Modulul Tkinter, Pillow și ReportLab
Tkinter este biblioteca standard GUI pentru Python. Oferă o varietate de widget-uri, cum ar fi butoane, etichete și casete de text, care facilitează dezvoltarea de aplicații precum un player muzical sau un instrument de conversie a greutății. Pentru a instala Tkinter în sistemul dvs., deschideți un terminal și tastați:
pip install tkinter
Modulul Pillow este o bibliotecă de imagini Python puternică, care facilitează efectuarea de operațiuni asupra imaginilor, cum ar fi redimensionarea, decuparea și filtrarea. Integrarea acestui cu OpenAI API și DALL·E 2, puteți genera imagini folosind un prompt text.
Pentru a instala Pillow, rulați această comandă:
pip install Pillow
ReportLab este o bibliotecă Python open-source pentru generarea de PDF-uri și grafice. Are diverse instrumente pe care le puteți utiliza pentru a genera documente cu imagini, text și tabele, ceea ce face utilă generarea de rapoarte prin programare. Cu aceasta, puteți crea rapoarte de afaceri, facturi și certificate în același timp adăugarea unui filigran text. Pentru a instala ReportLab:
pip install reportlab
Definiți structura convertorului imagine-în-PDF
Puteți găsi întregul cod sursă pentru construirea convertorului imagine-în-PDF folosind Python în aceasta Depozitul GitHub.
Importați modulele necesare și creați o clasă numită ImageToPDFConverter. Definiți o metodă de constructor care inițializează clasa și ia ca argument obiectul fereastră rădăcină al lui Tkinter. Inițializați o listă goală pentru a stoca căile imaginilor selectate de utilizator. Setați titlul și dimensiunile aplicației. Creați două butoane numite Selectați Imagini și Convertiți în PDF.
Treceți fereastra în care doriți să plasați butonul, textul pe care ar trebui să-l afișeze, comanda pe care ar trebui să o execute atunci când dați clic și formatul de font pe care ar trebui să îl aplice. Organizați butoanele folosind ambalaj() metoda și dați-le o umplutură de 10 în direcția verticală.
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)
Definiți o etichetă trecându-i fereastra părinte în care să o plasați, textul pe care ar trebui să-l afișeze, formatul fontului pe care ar trebui să-l folosească și o umplutură verticală de 10 (pixeli).
În mod similar, definiți un cadru pentru a previzualiza imaginea selectată și setați fereastra părinte, lățimea și înălțimea acesteia. Organizați-l cu o umplutură de 10.
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)
Selectarea imaginii și crearea unei previzualizări
Definiți o metodă, select_images(). Folosește-l pe Tkinter dialogul de fișiere clasa pentru a deschide o casetă de dialog pentru a selecta mai multe imagini și a le stoca în calea_imaginilor listă. Treceți directorul inițial pe care ar trebui să se deschidă caseta de dialog, titlul pe care ar trebui să-l afișeze și tipurile de fișiere pe care le permite pentru selecție.
Definiți o buclă care iterează pe toate căile imaginilor selectate de utilizator. Folosiți perne deschis() pentru a deschide fișierul imagine și a trece dimensiunea maximă pe care ar trebui să o posede metodei de redimensionare. Convertiți această imagine PIL în PhotoImage care este compatibil cu Tkinter. Creați o etichetă care se află în cadrul de previzualizare pe care l-ați creat mai devreme și afișați imaginea. Folosește grilă manager pentru a organiza imaginile într-un aspect grilă cu trei coloane.
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)
Definiți o metodă, resize_image() care redimensionează imaginea ținând cont de dimensiunea imaginii și dimensiunea maximă pe care ați definit-o mai devreme. Calculați raportul de aspect și utilizați-l pentru a seta noua lățime și înălțime. Utilizați metoda de redimensionare a PIL pentru a redimensiona imaginea păstrând intact raportul de aspect. Utilizați interpolarea biliniară ca reeșantionare pentru un rezultat mai uniform.
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
Transformarea imaginilor în PDF
Definiți o funcție, convert_to_pdf(). Utilizați dialogul de fișiere pentru a solicita calea de destinație pentru PDF. Setați extensia implicită și tipul de fișier ca .pdf. Utilizați modulul canvas al ReportLab pentru a desena o pagină peisaj. Repetați calea imaginilor, deschideți-le, setați dimensiunile paginii PDF la fel ca cele ale imaginii și desenați imaginea din colțul din stânga sus cu dimensiunile specificate.
The showPage() metoda permite PDF-ului să treacă la pagina următoare. Odată ce programul termină acest proces, salvați PDF-ul și afișați o casetă de mesaj împreună cu calea.
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}")
Creați fereastra rădăcină Tkinter și transmiteți-o instanței clasei. The mainloop() funcția îi spune lui Python să ruleze bucla de evenimente Tkinter și să asculte evenimente până când închideți fereastra.
if __name__ == "__main__":
root = tk.Tk()
app = ImageToPDFConverter(root)
root.mainloop()
Puneți tot codul împreună și convertorul imagine-în-PDF este gata de utilizare.
Exemplu de ieșire de conversie a imaginilor în PDF utilizând Python
La rularea aplicației, veți vedea o fereastră cu două butoane și un spațiu liber care vă indică să selectați imaginile.
Făcând clic pe Selectați Imagini butonul, apare o fereastră care vă cere să alegeți imaginile. Puteți selecta orice număr de imagini în orice combinație.
După ce ați selectat imaginile dorite, veți vedea o previzualizare a acestora:
Făcând clic pe butonul Convertiți în PDF, puteți selecta numele și calea în care doriți să stocați fișierul PDF. Odată ce programul termină conversia, afișează o casetă de mesaj care spune că a salvat PDF-ul urmat de numele căii. La deschiderea PDF-ului veți constata că programul a convertit imaginile fără a modifica dimensiunile acestora.
Operații PDF pe care le puteți implementa pentru a vă îmbunătăți aplicațiile
Puteți crea o aplicație PDF cu drepturi depline care efectuează operațiuni precum îmbinare, comprimare, protejare și deblocare PDF-uri. Puteți crea o funcție pentru a împărți PDF-ul în mai multe pagini, a le roti, a elimina anumite pagini, a-l sorta și a adăuga o pagină numere.
Puteți experimenta și alte formate de fișiere pentru a converti un document sau o prezentare în PDF. Mai multe module, cum ar fi PyPDF2, PDFMiner, fpdf și pdfrw, vă pot ajuta să le realizați mai convenabil.