首页 > 解决方案 > 将多个图像转换为 pdf

问题描述

我想用python创建一个pdf转换器应用程序,将图像转换为pdf。

这是我的代码,但它只是将一个图像转换为 pdf 我尝试了很多方法来修复它,但没有一个有效,任何人都可以帮助我,因为我想将多个图像转换为 pdf,但除了使用 for 循环之外它不起作用。我尝试了 img2pdf,但它给出了 alpha 通道错误,我无法解决这个问题。

import PIL.Image
from tkinter import *
from tkinter import filedialog as fd
import PyPDF2
import img2pdf
from tkinter import ttk

root = Tk()

root.geometry('500x500')
root.resizable(0, 0)

filename = StringVar()

entry = Entry(root, width=50, textvariable=filename).place(x=115, y=250)


def Select_images():
    global files
    files = fd.askopenfilenames()

def select_dir():
    global dir_name
    dir_name = fd.askdirectory()


def submit():
    global file_name
    file_name = filename.get()


def create_pdf():
    myfile=open(f'{dir_name}/{file_name}.pdf', 'wb+')
    for image in files:
        img=PIL.Image.open(image).convert('RGBA')
        im1=img.convert('RGB')
        im1.save(r'{}\{}.pdf'.format(dir_name,file_name))

    myfile.close()


button = Button(root, text='Sumbit PDF Name', command=submit).place(x=200, y=300)
label = Label(root, text='Write PDF Name').place(x=210, y=215)
button1 = Button(root, text='Create File', command=create_pdf).place(x=215, y=335)
button2 = Button(root, text='Select Directory To Save File',command=select_dir).place(x=200, y=50)
button3 = Button(root, text='select Images', command=Select_images).place(x=235, y=100)

root.mainloop()

标签: pythonpdftkinter

解决方案


看看这是否对您有帮助:

from tkinter import Tk, messagebox as mb, filedialog as fd
from tkinter.constants import DISABLED, NORMAL
from tkinter.ttk import Button, Label
from PIL import Image
import os

root = Tk()
root.title("Image to PDF converter")
root.geometry("500x500")

imglist = []    # For creating a list of images
fimgl = []  # List for storing multiple image names
png = True  # If the image chosen is a .png file

def askfile():
    global files, fimg, order, imglist, tm, png
    files = fd.askopenfilenames(title="Choose images", filetypes=(("PNGs", "*.png"), ("JPGs", "*.jpg"), ("All Files", "*.*")))
    for i in files:
        fimgl.append(i)
    if files:
        for j in fimgl:
            if j.endswith(".png"):  # If the image is a PNG:
                png = True
            fnl = Label(root, text=j)
            fnl.pack()
            img = Image.open(j)
            fimg = img.convert('RGB')
            imglist.append(fimg)
            p.config(state=NORMAL)

def convert_pdf():
    global png
    try:
        if png:
            imglist.pop()
        saveloc = fd.asksaveasfilename(title="Save the PDF file")
        if saveloc:
            if saveloc.endswith(".pdf"):
                pass
            else:
                saveloc = saveloc + ".pdf"
            if os.path.exists(saveloc):
                yn = mb.askyesno("Confirm Save As", f"{os.path.basename(saveloc)} already exists.\nDo you want to replace it?")
                if yn:
                    os.remove(saveloc)
                else:
                    convert_pdf()
            fimg.save(saveloc, save_all=True, append_images=imglist)
            mb.showinfo("Done!", "PDF file saved! Click 'OK' to open it")
            os.startfile(saveloc)
            root.quit()
    except Exception as err:
        mb.showerror("Error", err)
        root.quit()

cb = Button(root, text="Add Files", command=askfile)
cb.pack(pady=20)

p = Button(root, text="Convert", command=convert_pdf, state=DISABLED)
p.pack(pady=20)


root.mainloop()

推荐阅读