📜  使用 Tkinter – Python将图像转换为 PDF(1)

📅  最后修改于: 2023-12-03 15:36:34.640000             🧑  作者: Mango

使用 Tkinter – Python 将图像转换为 PDF

简介

在本教程中,我们将学习如何使用 Python 中的 Tkinter 库将图像转换为 PDF。Tkinter 是 Python 的标准 GUI 库,它允许开发人员创建 GUI 应用程序。通过结合 Tkinter 和 Python 的 Imaging 库(PIL),我们将创建一个应用程序,该应用程序将选择的图像转换为 PDF 格式。

程序流程

以下是我们将遵循的程序流程:

  1. 创建 GUI。
  2. 使用 Tkinter 的 askopenfilename 函数选择图像。
  3. 使用 PIL 库将图像转换为 PDF。
  4. 保存 PDF。
步骤
创建 GUI

我们将首先导入 Tkinter 库并创建一个简单的 GUI 窗口。我们将使用 Label 和 Button 窗口部件,并创建一个简单的布局。

from tkinter import Tk, Label, Button

window = Tk()
window.title("Image to PDF Converter")
window.geometry("500x300")
 
lbl = Label(window, text="Select the image to convert:")
lbl.grid(column=0, row=0)
 
btn = Button(window, text="Browse")
btn.grid(column=1, row=0)
 
window.mainloop()
选择图像

我们将使用 Tkinter 的 askopenfilename 函数来选择需要转换的图像。这个函数将打开一个对话框,方便用户选择他们的图像。

我们将在按钮单击事件处理程序函数中调用 askopenfilename 函数。我们将用 Label 窗口部件来显示所选择的文件的文件路径。

from tkinter import Tk, Label, Button, filedialog
from PIL import Image

window = Tk()
window.title("Image to PDF Converter")
window.geometry("500x300")
 
lbl = Label(window, text="Select the image to convert:")
lbl.grid(column=0, row=0)
 
def browse_file():
    file_path = filedialog.askopenfilename()
    lbl.configure(text=file_path)
 
btn = Button(window, text="Browse", command=browse_file)
btn.grid(column=1, row=0)
 
window.mainloop()
将图像转换为 PDF

现在我们已经选择了要转换的图像,我们需要通过 PIL 库将其转换为 PDF 格式。Pillow 库是 Python Imaging 库的一个分支,它是用于操作图像的强大库。

以下代码将读取选择的图像文件并将其转换为 PDF。

from tkinter import Tk, Label, Button, filedialog
from PIL import Image

window = Tk()
window.title("Image to PDF Converter")
window.geometry("500x300")
 
lbl = Label(window, text="Select the image to convert:")
lbl.grid(column=0, row=0)
 
def browse_file():
    file_path = filedialog.askopenfilename()
    lbl.configure(text=file_path)
    img = Image.open(file_path)
    pdf_path = file_path.replace(".jpg", ".pdf").replace(".png", ".pdf")
    img.save(pdf_path, "PDF" ,resolution=100.0)
 
btn = Button(window, text="Browse", command=browse_file)
btn.grid(column=1, row=0)
 
window.mainloop()

注意,我们将图像路径中的 .jpg 或 .png 替换为 .pdf,以创建 PDF 文件名。

保存 PDF

最后一步是将新创建的 PDF 文件保存在计算机上。我们将再次使用 Tkinter 的 filedialog 来选择保存文件的位置。

以下代码将在保存之前提示用户选择要保存 PDF 的位置。

from tkinter import Tk, Label, Button, filedialog
from PIL import Image

window = Tk()
window.title("Image to PDF Converter")
window.geometry("500x300")
 
lbl = Label(window, text="Select the image to convert:")
lbl.grid(column=0, row=0)
 
def browse_file():
    file_path = filedialog.askopenfilename()
    lbl.configure(text=file_path)
    img = Image.open(file_path)
    pdf_path = file_path.replace(".jpg", ".pdf").replace(".png", ".pdf")
    img.save(pdf_path, "PDF" ,resolution=100.0)
    save_location = filedialog.asksaveasfilename(defaultextension='.pdf')
    with open(pdf_path, 'rb') as f:
        pdf_data = f.read()
    with open(save_location, 'wb') as f:
        f.write(pdf_data)
 
btn = Button(window, text="Browse", command=browse_file)
btn.grid(column=1, row=0)
 
window.mainloop()

现在我们已经完成了将图像转换为 PDF 的应用程序!完整代码如下所示:

from tkinter import Tk, Label, Button, filedialog
from PIL import Image

window = Tk()
window.title("Image to PDF Converter")
window.geometry("500x300")
 
lbl = Label(window, text="Select the image to convert:")
lbl.grid(column=0, row=0)
 
def browse_file():
    file_path = filedialog.askopenfilename()
    lbl.configure(text=file_path)
    img = Image.open(file_path)
    pdf_path = file_path.replace(".jpg", ".pdf").replace(".png", ".pdf")
    img.save(pdf_path, "PDF" ,resolution=100.0)
    save_location = filedialog.asksaveasfilename(defaultextension='.pdf')
    with open(pdf_path, 'rb') as f:
        pdf_data = f.read()
    with open(save_location, 'wb') as f:
        f.write(pdf_data)
 
btn = Button(window, text="Browse", command=browse_file)
btn.grid(column=1, row=0)
 
window.mainloop()
总结

在本教程中,我们使用 Tkinter 和 PIL 库编写了一个应用程序,该应用程序将图像转换为 PDF。我们通过选择图像,将其转换为 PDF,然后将新创建的 PDF 文件保存在计算机上来完成此操作。这个程序流程可用于几乎所有类型的图像文件,包括 JPEG、PNG 等。