Project

Description

This is a basic Description

import os
from pathlib import Path
from tkinter import *
from tkinter import filedialog
from natsort import natsorted, ns
from PIL import Image
import sys
import winsound
import subprocess
import stat as st


def cls():
    os.system('cls' if os.name == 'nt' else 'clear')


# def get_folder(extensions: list = None, include_subs: bool = False):
#     root = Tk()
#     p = Path(filedialog.askdirectory(title="Select A Folder"))  # single file option
#     root.destroy()
#     pattern = '**/*' if include_subs else '*'
#
#     return [x for x in p.glob(pattern) if not extensions or x.suffix in extensions]


def get_folder_dialog():
    root = Tk()
    p = Path(filedialog.askdirectory(title="Select A Folder"))  # single file option
    root.destroy()
    return p if p.drive else None


def get_files_in_folder(folder_path: Path, extensions: list = None, include_subs: bool = False):
    # pattern = '**/*' if include_subs else '*'
    if not folder_path:
        raise RuntimeError('Folder path is empty!')
    files_all = folder_path.glob('**/*' if include_subs else '*')
    if extensions:
        files_filtered = []
        for file in files_all:
            files_filtered.append(file) if file.suffix in extensions else print(f'Skipping file based on extension: {file.stem}')
        return files_filtered
    return files_all


# def multi_file():
#     folder = get_folder_dialog()
#     files = get_files_in_folder(folder_path=folder, extensions=['.jpg', 'jpeg', '.png'])
#     # if len(files) <= 0:
#     #     sys.exit()
#     # folder = files[0].parents[0]
#     # file_names = [file.name for file in files]
#     return folder, [f.name for f in files]

# Press the green button in the gutter to run the script.
def main(folder= None):
    # folder, files = multi_file()
    if not folder:
        folder = get_folder_dialog()

    pdf_name = folder.name + '.pdf'
    pdf_path = folder.parents[0] / pdf_name

    if pdf_path.is_file():
        print('pdf already exists, skipping...')
        return
        # i = input(f'PDF {pdf_path.name} already exists! Enter \'y\' to overwrite, or anything else to skip\n')
        # if i.strip().lower() != 'y':
        #     return
        # else:
        #     print('Continuing and overwriting pdf...')

    files = get_files_in_folder(folder_path=folder, extensions=['.jpg', 'jpeg', '.png'])
    file_names = [f.name for f in files]

    files_sorted = natsorted(file_names, key=lambda y: y.lower())
    if file_names != files_sorted:
        print('Lists are not the same!')
        print(f'{files=}')
        print(f'{files_sorted=}')
        input('press any key to stop')
        return

    print('\n\n...Opening and converting images...')
    for file in files_sorted:
        print(file)
    images = [Image.open(folder / file).convert('RGB') for file in files_sorted]

    print(f'...Saving {pdf_path.name}...')
    images[0].save(pdf_path, resolution=100.0, save_all=True, append_images=images[1:])

Header

Basic header info

Main part 1


Body

 

Main part 2


Body