Organiser dine billeder i PDF'er, og lær, hvordan du bruger Tkinter til at bygge dette praktiske værktøj.

Fra virksomhedsrapporter til fotografiporteføljer vil du ofte støde på et behov for at bruge billeder i PDF-filer. En billed-til-PDF-konverter kan hjælpe med at strømline processen. Selvom der er mange gratis værktøjer tilgængelige online, kan deres behov for, at du uploader billeder, være et privatlivs- eller sikkerhedsproblem.

I stedet kan du bygge en offline billed-til-PDF-konverter ved hjælp af Python. Vælg flere billeder i JPG- eller PNG-format, få en forhåndsvisning, og konverter dem til en PDF, mens du bevarer den originale billedstørrelse.

Tkinter-, Pillow- og ReportLab-modulet

Tkinter er standard GUI-biblioteket til Python. Det tilbyder en række widgets som knapper, etiketter og tekstbokse, der gør det nemt at udvikle apps som f. musik afspiller eller et vægtkonverteringsværktøj. For at installere Tkinter i dit system skal du åbne en terminal og skrive:

pip install tkinter

Pillow-modulet er et kraftfuldt Python-billedbibliotek, der gør det nemt at udføre operationer på billeder såsom ændring af størrelse, beskæring og filtrering. At integrere dette med

instagram viewer
OpenAI API og DALL·E 2, kan du generere billeder ved hjælp af en tekstprompt.

For at installere Pillow skal du køre denne kommando:

pip install Pillow

ReportLab er et open source Python-bibliotek til generering af PDF'er og grafik. Den har forskellige værktøjer, du kan bruge til at generere dokumenter med billeder, tekst og tabeller, hvilket gør det nyttigt at generere rapporter via programmering. Med dette kan du opbygge forretningsrapporter, fakturaer og certifikater samtidig tilføjelse af et tekstvandmærke. Sådan installeres ReportLab:

pip install reportlab

Definer strukturen af ​​billed-til-PDF-konverteren

Du kan finde hele kildekoden til at bygge billed-til-PDF-konverteren ved hjælp af Python i denne GitHub-depot.

Importer de nødvendige moduler og opret en klasse med navnet ImageToPDFConverter. Definer en konstruktørmetode, der initialiserer klassen og tager Tkinters rodvindueobjekt som et argument. Initialiser en tom liste for at gemme stierne til de billeder, brugeren vælger. Indstil titlen og dimensionerne for applikationen. Opret to knapper med navn Vælg Billeder og Konverter til PDF.

Send det vindue, du vil placere knappen i, den tekst, de skal vise, den kommando, de skal udføre, når der klikkes på dem, og det skrifttypeformat, de skal anvende. Organiser knapperne ved hjælp af pakke() metode og giv dem en polstring på 10 i lodret retning.

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)

Definer en etiket ved at sende den til det overordnede vindue, den skal placeres i, teksten den skal vise, skrifttypeformatet den skal bruge og en lodret udfyldning på 10 (pixels).

På samme måde skal du definere en ramme for at få vist det valgte billede og indstille dets overordnede vindue, bredde og højde. Organiser det med en polstring på 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)

Valg af billede og oprettelse af en forhåndsvisning

Definer en metode, select_images(). Brug Tkinter's fildialog klasse for at åbne en dialogboks for at vælge flere billeder og gemme dem i billeder_sti liste. Send den første mappe, som dialogboksen skal åbne, titlen, den skal vise, og de filtyper, den tillader valg.

Definer en løkke, der itererer over alle stierne for de billeder, som brugeren valgte. Brug puder åben() metode til at åbne billedfilen og overføre den maksimale dimension, den skal have, til metoden til at ændre størrelse. Konverter dette PIL-billede til PhotoImage der er kompatibel med Tkinter. Opret en etiket, der ligger i den forhåndsvisningsramme, du oprettede tidligere, og vis billedet. Brug gitter manager til at organisere billederne i et gitterlayout med tre kolonner.

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)

Definer en metode, resize_image() der ændrer størrelsen på billedet under hensyntagen til billedets dimension og den maksimale dimension, du definerede tidligere. Beregn billedformatet og brug det til at indstille den nye bredde og højde. Brug PIL's resize-metode til at ændre størrelsen på billedet, mens billedformatet bevares intakt. Brug bilineær interpolation som resampling for et jævnere resultat.

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

Konvertering af billeder til PDF

Definer en funktion, konverter_til_pdf(). Brug fildialogen til at bede om destinationsstien til PDF'en. Indstil standardudvidelsen og filtypen som .pdf. Brug ReportLabs lærredsmodul til at tegne en liggende side. Gentag over stien til billederne, åbn dem, indstil dimensionerne på PDF-siden til de samme som billedet, og tegn billedet fra øverste venstre hjørne med de angivne mål.

Det showPage() metode tillader PDF'en at flytte til næste side. Når programmet har fuldført denne proces, skal du gemme PDF-filen og vise en beskedboks sammen med stien.

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

Opret Tkinter-rodvinduet og send det til klasseforekomsten. Det mainloop() funktion fortæller Python at køre Tkinter-hændelsesløkken og lytte efter hændelser, indtil du lukker vinduet.

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

Sæt al koden sammen, og billed-til-PDF-konverteren er klar til brug.

Eksempel på output af konvertering af billeder til PDF ved hjælp af Python

Når du kører appen, vil du se et vindue med to knapper og et tomt rum, der instruerer dig om at vælge billederne.

Ved at klikke på Vælg Billeder knappen, dukker et vindue op, der beder dig om at vælge billederne. Du kan vælge et vilkårligt antal billeder i enhver kombination.

Når du har valgt dine ønskede billeder, vil du se en forhåndsvisning af dem:

Når du klikker på knappen Konverter til PDF, kan du vælge navnet og stien, hvor du vil gemme PDF-filen. Når programmet er færdig med konverteringen, viser det en meddelelsesboks, der siger, at det har gemt PDF'en efterfulgt af stiens navn. Når du åbner PDF'en, vil du opdage, at programmet har konverteret billederne uden at ændre deres dimensioner.

PDF-handlinger, du kan implementere for at forbedre dine applikationer

Du kan bygge en fuldgyldig PDF-applikation, der udfører operationer såsom fletning, komprimering, beskyttelse og oplåsning PDF'er. Du kan bygge en funktion til at opdele PDF'en i flere sider, rotere dem, fjerne bestemte sider, sortere den og tilføje side tal.

Du kan eksperimentere med andre filformater til at konvertere et dokument eller en præsentation til PDF. Adskillige moduler, som PyPDF2, PDFMiner, fpdf og pdfrw, kan hjælpe dig med at opnå disse mere bekvemt.