如果您从事技术写作,则必须面对某些情况,需要将PDF转换为某些图像格式或将图像转换为其他格式。你做什么工作?快速的Google搜索,您将获得一些完美地完成此任务的网站,但是假设您是否离线?为什么不自己构建工具?轻巧的工具,易于使用,最重要的是基于GUI。
解锁Python的功能和图形用户界面(GUIS)的魔力,我们踏上了令人兴奋的旅程,以创建一个通用和直观的PDF到JPG/PNG转换器工具。在本文中,我们将构建一个用户友好的应用程序背后的秘密,该应用程序无缝地将PDF文档无缝地转换为充满活力的图像文件。
一个人还可以扩展此GUI,并将更多的转换选项添加到JPG,PDF到DOCX等,等等。
TKINTER设置
创建一个文件main.py
和设置tkinter。
import tkinter as tk
from tkinter.ttk import *
window = tk.Tk()
window.title("Pdf to jpg/png Converter")
window.resizable(0, 0)
window.config(width=50)
# Create a GUI here
window.mainloop()
这是tkinter文件的基本设置。
现在,让我们创建一个文件来处理我们的所有转换。
转换器Funcitons
在同一文件夹中创建一个python文件,并将其命名为“ converter.py”。它将包含一些功能来处理PDF转换为JPG和PNG。
我们将使用PyMuPDF
pip install PyMuPDF
我们需要将其导入为Fitz。
因此,Converter.py
中的代码看起来像:
import fitz
def ConvertPDFtoImage(file, extension, outputType):
doc = fitz.open(file, filetype="pdf")
filename = file.split('.')[0]
for idx, page in enumerate(doc):
pix = page.get_pixmap(dpi=600)
the_page_bytes=pix.pil_tobytes(format=outputType)
with open(f"{filename}-page-{idx}.{extension}", "wb") as outf:
outf.write(the_page_bytes)
在函数转换式图像中,我们得到了3个论点。首先,我们需要打开必须从PDF转换为JPG/PNG的文件。然后,要处理文件名来保存文件,我们将从给定文件中获取文件名,通过使用split('.')
,我们将分开文件名,扩展名和输出将是列表,然后split('.')[0]
将提供列表的第一个元素,这是文件名。
现在运行一个循环,带有索引和页面的给定文件,并通过上述代码开始转换。最后,保存文件。
现在几乎所有基本设置都完成了。现在让我们创建GUI。
Tkinter Gui
在window.mainloop()
上方的main.py
文件中添加此代码
file_str = tk.StringVar(window) # Create a StringVar to handle the changed value of tkinter Entry
fileLabel = Label(text="Enter File Path:", font=('Calibri', 11))
fileLabel.pack(fill=tk.X, padx=16, pady=(16, 0))
inputTxt = tk.Entry(
font=('Calibri', 12),
textvariable=file_str
)
inputTxt.pack(fill=tk.X, padx=16)
separateLabel = tk.Label(text="Or")
separateLabel.pack(pady=5)
def chooseFileCommand():
file = filedialog.askopenfilename()
if file is not None:
file_str.set(file)
chooseFile = tk.Button( # Add a choose file button
text="Choose File",
command=chooseFileCommand
)
chooseFile.pack(pady=(0, 10))
frame1 = tk.Frame(window, width=50, padx=16, pady=16) # Create a frame to contain the conversion options
frame1.columnconfigure(0, weight=1)
frame1.columnconfigure(0, weight=3)
label1 = tk.Label(
frame1, # This label should be in frame
text='Convert to:',
padx=10,
font=('Calibri', 12)
).grid(column=0, row=0)
combo = Combobox(
frame1,
state="readonly",
values=["png", "jpg"],
)
combo.current(0)
combo.grid(column=1, row=0)
frame1.pack()
def handleConversion():
print("Convert:", file_str.get())
print("To:", combo.get())
file = file_str.get()
extension = combo.get()
if (extension == 'png'):
ConvertPDFtoImage(file, extension, 'PNG')
if (extension == 'jpg'):
ConvertPDFtoImage(file, extension, 'JPEG')
convertBtn = tk.Button(
window,
text="Convert", bg="royalblue", fg="white", border=0, padx=5, font=('Calibri', 12, 'bold'),
command=handleConversion
)
convertBtn.pack(pady=10, padx=16, side="right")
执行此操作后,您准备就绪jpg/png转换工具。如果您喜欢的话,请确保您对此帖子表示赞赏,因为它有动力进一步发表更多这样的帖子。也可以订阅更多这样的。
到那时,
再见,请参见ya!