Organiseer uw afbeeldingen in PDF's en leer hoe u Tkinter kunt gebruiken om dit handige hulpprogramma te bouwen.

Van zakelijke rapporten tot fotografieportfolio's, u zult vaak de behoefte tegenkomen om afbeeldingen in pdf's te gebruiken. Een afbeelding-naar-PDF-converter kan helpen het proces te stroomlijnen. Hoewel er veel gratis tools online beschikbaar zijn, kan de noodzaak voor u om afbeeldingen te uploaden een privacy- of beveiligingsprobleem zijn.

In plaats daarvan kunt u met Python een offline afbeelding-naar-PDF-converter bouwen. Selecteer meerdere afbeeldingen in JPG- of PNG-indeling, bekijk een voorbeeld en converteer ze naar een PDF met behoud van de oorspronkelijke afbeeldingsgrootte.

De Tkinter-, Pillow- en ReportLab-module

Tkinter is de standaard GUI-bibliotheek voor Python. Het biedt een verscheidenheid aan widgets zoals knoppen, labels en tekstvakken die het gemakkelijk maken om apps te ontwikkelen zoals een muziekspeler of een hulpmiddel voor gewichtsconversie. Om Tkinter in uw systeem te installeren, opent u een terminal en typt u:

instagram viewer
pip install tkinter

De Pillow-module is een krachtige Python-beeldvormingsbibliotheek die het gemakkelijk maakt om bewerkingen op afbeeldingen uit te voeren, zoals formaat wijzigen, bijsnijden en filteren. Dit integreren met OpenAI API en DALL·E 2, kunt u afbeeldingen genereren met behulp van een tekstprompt.

Voer deze opdracht uit om Pillow te installeren:

pip install Pillow

ReportLab is een open-source Python-bibliotheek voor het genereren van pdf's en afbeeldingen. Het heeft verschillende tools die u kunt gebruiken om documenten met afbeeldingen, tekst en tabellen te genereren, waardoor het handig is om rapporten via programmering te genereren. Hiermee kunt u tegelijkertijd zakelijke rapporten, facturen en certificaten maken een tekstwatermerk toevoegen. ReportLab installeren:

pip install reportlab

Definieer de structuur van de Image-to-PDF Converter

Hierin vindt u de volledige broncode voor het bouwen van de afbeelding-naar-PDF-converter met behulp van Python GitHub-opslagplaats.

Importeer de benodigde modules en maak een klasse met de naam ImageToPDFConverter. Definieer een constructormethode die de klasse initialiseert en Tkinter's root-vensterobject als argument gebruikt. Initialiseer een lege lijst om de paden op te slaan van de afbeeldingen die de gebruiker selecteert. Stel de titel en afmetingen van de applicatie in. Maak twee knoppen met de naam Selecteer Afbeeldingen En Converteren naar PDF.

Geef het venster door waarin u de knop wilt plaatsen, de tekst die ze moeten weergeven, de opdracht die ze moeten uitvoeren wanneer erop wordt geklikt en het lettertype dat ze moeten toepassen. Organiseer de knoppen met behulp van de pak() methode en geef ze een opvulling van 10 in de verticale richting.

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)

Definieer een label door het door te geven aan het bovenliggende venster waarin het moet worden geplaatst, de tekst die het moet weergeven, het lettertype dat het moet gebruiken en een verticale opvulling van 10 (pixels).

Definieer op dezelfde manier een frame om een ​​voorbeeld van de geselecteerde afbeelding te bekijken en stel het bovenliggende venster, de breedte en de hoogte in. Organiseer het met een opvulling van 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)

De afbeelding selecteren en een voorbeeld maken

Definieer een methode, selecteer_afbeeldingen(). Gebruik die van Tkinter bestandsdialoog class om een ​​dialoogvenster te openen om meerdere afbeeldingen te selecteren en op te slaan in de afbeeldingen_pad lijst. Geef de initiële map door die het dialoogvenster zou moeten openen, de titel die het zou moeten weergeven en de bestandstypen die kunnen worden geselecteerd.

Definieer een lus die zich herhaalt over alle paden van de afbeeldingen die de gebruiker heeft geselecteerd. Gebruik Kussens open() methode om het afbeeldingsbestand te openen en de maximale afmeting die het zou moeten hebben door te geven aan de methode voor het wijzigen van de grootte. Converteer deze PIL-afbeelding naar FotoAfbeelding die compatibel is met Tkinter. Maak een label dat zich in het voorbeeldframe bevindt dat u eerder hebt gemaakt en geef de afbeelding weer. Gebruik de rooster manager om de afbeeldingen te ordenen in een rasterlay-out met drie kolommen.

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)

Definieer een methode, grootte_afbeelding wijzigen() dat de grootte van de afbeelding wijzigt, rekening houdend met de dimensie van de afbeelding en de maximale dimensie die u eerder hebt gedefinieerd. Bereken de beeldverhouding en gebruik deze om de nieuwe breedte en hoogte in te stellen. Gebruik de resize-methode van PIL om het formaat van de afbeelding te wijzigen, waarbij de beeldverhouding intact blijft. Gebruik bilineaire interpolatie als resampling voor een vloeiender resultaat.

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

De afbeeldingen converteren naar PDF

Definieer een functie, convert_to_pdf(). Gebruik het bestandsdialoogvenster om het bestemmingspad voor de PDF op te vragen. Stel de standaardextensie en het bestandstype in als .pdf. Gebruik de canvasmodule van ReportLab om een ​​liggende pagina te tekenen. Herhaal het pad van de afbeeldingen, open ze, stel de afmetingen van de PDF-pagina hetzelfde in als die van de afbeelding en teken de afbeelding vanuit de linkerbovenhoek met de opgegeven afmetingen.

De toonPagina() Met deze methode kan de PDF naar de volgende pagina gaan. Zodra het programma dit proces heeft voltooid, slaat u de PDF op en geeft u een berichtvenster weer met het pad.

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

Maak het Tkinter-rootvenster en geef het door aan de klasse-instantie. De Hoofdlus() functie vertelt Python om de Tkinter-gebeurtenislus uit te voeren en te luisteren naar gebeurtenissen totdat u het venster sluit.

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

Zet alle code bij elkaar en de Image-to-PDF Converter is klaar voor gebruik.

Voorbeelduitvoer van het converteren van afbeeldingen naar PDF met behulp van Python

Bij het uitvoeren van de app ziet u een venster met twee knoppen en een lege ruimte waarin u wordt gevraagd de afbeeldingen te selecteren.

Bij het klikken op de Selecteer Afbeeldingen knop, verschijnt er een venster waarin u wordt gevraagd de afbeeldingen te kiezen. U kunt een willekeurig aantal afbeeldingen in elke combinatie selecteren.

Nadat u de gewenste afbeeldingen hebt geselecteerd, ziet u een voorbeeld ervan:

Door op de knop Converteren naar PDF te klikken, kunt u de naam en het pad selecteren waar u het PDF-bestand wilt opslaan. Zodra het programma de conversie heeft voltooid, wordt er een berichtvenster weergegeven waarin staat dat het de PDF heeft opgeslagen, gevolgd door de padnaam. Bij het openen van de pdf zult u zien dat het programma de afbeeldingen heeft geconverteerd zonder hun afmetingen te wijzigen.

PDF-bewerkingen die u kunt implementeren om uw toepassingen te verbeteren

U kunt een volwaardige PDF-toepassing bouwen die bewerkingen uitvoert zoals samenvoegen, comprimeren, beschermen en ontgrendelen pdf's. U kunt een functie bouwen om de PDF in meerdere pagina's te splitsen, ze te roteren, bepaalde pagina's te verwijderen, te sorteren en een pagina toe te voegen nummers.

U kunt ook experimenteren met andere bestandsindelingen om een ​​document of een presentatie naar PDF te converteren. Verschillende modules, zoals PyPDF2, PDFMiner, fpdf en pdfrw, kunnen u helpen deze gemakkelijker te bereiken.