Uspořádejte své obrázky do souborů PDF a naučte se používat Tkinter k vytvoření této šikovné utility.

Od obchodních zpráv po portfolia fotografií často narazíte na potřebu používat obrázky v PDF. Převaděč obrázků na PDF může tento proces zefektivnit. I když je online k dispozici mnoho bezplatných nástrojů, jejich potřeba nahrávat obrázky může být důvodem k ochraně soukromí nebo bezpečnosti.

Místo toho můžete pomocí Pythonu vytvořit offline převaděč obrázků na PDF. Vyberte více obrázků ve formátu JPG nebo PNG, získejte náhled a převeďte je do PDF při zachování původní velikosti obrázku.

Modul Tkinter, Pillow a ReportLab

Tkinter je standardní knihovna GUI pro Python. Nabízí řadu widgetů, jako jsou tlačítka, štítky a textová pole, které usnadňují vývoj aplikací, jako je a hudební přehrávač nebo nástroj pro převod hmotnosti. Chcete-li nainstalovat Tkinter do vašeho systému, otevřete terminál a zadejte:

pip install tkinter

Modul Pillow je výkonná zobrazovací knihovna Pythonu, která usnadňuje provádění operací s obrázky, jako je změna velikosti, oříznutí a filtrování. Integrace tohoto s

instagram viewer
OpenAI API a DALL·E 2, můžete generovat obrázky pomocí textové výzvy.

Chcete-li nainstalovat Pillow, spusťte tento příkaz:

pip install Pillow

ReportLab je open-source Python knihovna pro generování PDF a grafiky. Má různé nástroje, které můžete použít ke generování dokumentů s obrázky, textem a tabulkami, díky čemuž je užitečné vytvářet sestavy pomocí programování. Díky tomu můžete vytvářet obchodní zprávy, faktury a certifikáty přidání textového vodoznaku. Instalace ReportLab:

pip install reportlab

Definujte strukturu převodníku obrázků na PDF

Celý zdrojový kód pro sestavení převodníku obrázků na PDF pomocí Pythonu najdete v tomto úložiště GitHub.

Importujte potřebné moduly a vytvořte třídu s názvem ImageToPDFConverter. Definujte metodu konstruktoru, která inicializuje třídu a jako argument vezme objekt kořenového okna Tkinter. Inicializujte prázdný seznam pro uložení cest obrázků, které uživatel vybere. Nastavte název a rozměry aplikace. Vytvořte dvě pojmenovaná tlačítka Vyberte Obrázky a Převést do PDF.

Předejte okno, do kterého chcete tlačítko umístit, text, který by se měl zobrazit, příkaz, který by mělo být provedeno po kliknutí, a formát písma, který mají použít. Uspořádejte tlačítka pomocí balíček() a dejte jim výplň 10 ve vertikálním směru.

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)

Definujte štítek tak, že mu předáte nadřazené okno, do kterého se má umístit, text, který by měl zobrazit, formát písma, který by měl používat, a svislé odsazení 10 (pixelů).

Podobně definujte rámeček pro náhled vybraného obrázku a nastavte jeho rodičovské okno, šířku a výšku. Uspořádejte to s vycpávkou 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)

Výběr obrázku a vytvoření náhledu

Definujte metodu, select_images(). Použijte Tkinter's souborový dialog třídy otevře dialogové okno pro výběr více obrázků a jejich uložení do cesta k obrázkům seznam. Předejte počáteční adresář, který by se mělo dialogové okno otevřít, název, který by se měl zobrazit, a typy souborů, které umožňuje výběr.

Definujte smyčku, která se iteruje přes všechny cesty obrázků, které uživatel vybral. Použijte polštáře OTEVŘENO() metodu k otevření souboru obrázku a předání maximálního rozměru, který by měl mít, metodě změny velikosti. Převeďte tento obrázek PIL na PhotoImage který je kompatibilní s Tkinter. Vytvořte štítek, který se nachází v rámečku náhledu, který jste vytvořili dříve, a zobrazte obrázek. Použijte mřížka správce uspořádat obrázky do mřížkového rozložení se třemi sloupci.

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)

Definujte metodu, resize_image() která změní velikost obrázku s ohledem na rozměr obrázku a maximální rozměr, který jste definovali dříve. Vypočítejte poměr stran a použijte jej k nastavení nové šířky a výšky. Použijte metodu změny velikosti PIL ke změně velikosti obrázku při zachování poměru stran. Použijte bilineární interpolaci jako převzorkování pro hladší výsledek.

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

Převod obrázků do PDF

Definujte funkci, convert_to_pdf(). Pomocí dialogového okna souboru se zeptejte na cílovou cestu pro PDF. Nastavte výchozí příponu a typ souboru jako .pdf. Pomocí modulu plátna ReportLab nakreslete stránku na šířku. Iterujte přes cestu obrázků, otevřete je, nastavte rozměry stránky PDF stejné jako u obrázku a nakreslete obrázek z levého horního rohu se zadanými rozměry.

The zobrazit stránku() metoda umožňuje PDF přesunout na další stránku. Jakmile program dokončí tento proces, uložte soubor PDF a zobrazte okno se zprávou spolu s cestou.

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

Vytvořte kořenové okno Tkinter a předejte jej instanci třídy. The mainloop() Funkce říká Pythonu, aby spustil smyčku událostí Tkinter a naslouchal událostem, dokud nezavřete okno.

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

Dejte celý kód dohromady a převaděč obrázků do PDF je připraven k použití.

Příklad výstupu převodu obrázků do PDF pomocí Pythonu

Při spuštění aplikace se zobrazí okno se dvěma tlačítky a prázdným místem, které vás vyzve k výběru obrázků.

Po kliknutí na Vyberte Obrázky tlačítko, zobrazí se okno s výzvou k výběru obrázků. Můžete vybrat libovolný počet obrázků v libovolné kombinaci.

Jakmile vyberete požadované obrázky, zobrazí se jejich náhled:

Po kliknutí na tlačítko Převést do PDF můžete vybrat název a cestu, kam chcete soubor PDF uložit. Jakmile program dokončí převod, zobrazí okno se zprávou, že uložil soubor PDF, za kterým následuje název cesty. Po otevření PDF zjistíte, že program převedl obrázky, aniž by změnil jejich rozměry.

Operace PDF, které můžete implementovat pro vylepšení vašich aplikací

Můžete vytvořit plnohodnotnou aplikaci PDF, která provádí operace, jako je slučování, komprimace, ochrana a odemykání PDF. Můžete vytvořit funkci, která rozdělí PDF na více stránek, otočí je, odebere konkrétní stránky, seřadí je a přidá stránku čísla.

Pro převod dokumentu nebo prezentace do PDF můžete experimentovat i s jinými formáty souborů. Několik modulů, jako je PyPDF2, PDFMiner, fpdf a pdfrw, vám může pomoci dosáhnout těchto cílů pohodlněji.