Python PDF转JPG图片小工具

devtools/2024/11/30 12:39:21/

Python PDF转JPG图片小工具

1.简介

将单个pdf装换成jpg格式图片

Tip:

1、软件窗口默认最前端,不支持调整窗口大小;
2、可通过按钮选择PDF文件,也可以直接拖拽文件到窗口;
3、转换质量有5个档位,(0.25,0.5,原分辨率,2倍,4倍),默认为原分辨率;
4、转换后的文件路径与导入文件的路径一致;
5、单页文件直接生成JPG图片,多页文件是生成文件夹;
6、不支持批量转换,不支持文件夹,只能单个文件转换结束再选下一个;

2.运行效果:

在这里插入图片描述

3.相关源码:

python">#coding:utf-8
import tkinter as tk
from tkinter import Label
from tkinter import Entry
from tkinter import filedialog
from tkinter.font import Font
import os
import fitz
from tkinterdnd2 import DND_FILES,TkinterDnDdef center_window(root, width, height):  #创建窗口居中screen_width = root.winfo_screenwidth()screen_height = root.winfo_screenheight()x = int((screen_width - width) / 2)y = int((screen_height - height) / 2)root.geometry(f"{width}x{height}+{x}+{y}")
def open_file():  #浏览文件按钮代码filetypes = (('pdf files', '*.pdf'),('All files', '*.*'))file = filedialog.askopenfilename(title='选择PDF文件',initialdir=os.getcwd(),filetypes=filetypes)pathname.delete(0, tk.END)pathname_2.delete(0, tk.END)if str.upper(file[-3:])=='PDF':pathname.insert(0, os.path.split(file)[1])pathname_2.insert(0, file)
def main():  #开始转换按钮代码path = pathname_2.get()name = pathname.get()[:-4]value_list = [1/3,2/3,4/3,8/3,16/3]# 图片缩放倍数(0.25,0.5,原分辨率,2倍,4倍)value_base =int(slider.get())value = value_list[value_base]pdf = fitz.open(path)for page_num in range(len(pdf)):page = pdf.load_page(page_num)mat = fitz.Matrix(value,value)pix = page.get_pixmap(matrix=mat)# 图片缩放if len(pdf) == 1:outpath = path[:-4]+'.jpg'else:if not os.path.exists(path[:-4]):os.mkdir(path[:-4])outpath = os.path.join(path[:-4] , f'{name}_{page_num}.jpg')pix.save(outpath)num = (page_num+1)/len(pdf)*100//1.25text = '正在转换'+'.'* int(num)+str(round((page_num+1)/len(pdf)*100,1))+'%'label.config(text=text)win.update()
def drop(event):  #支持拖拽文件file =event.datalabel.config(text='')pathname.delete(0, tk.END)pathname_2.delete(0, tk.END)if ' ' in file:file = file[1:-1]  #文件名有空格时,会生成大括号if str.upper(file[-3:])=='PDF':pathname.insert(0, os.path.split(file)[1])pathname_2.insert(0, file)win = TkinterDnD.Tk()
win.title('PDF转JPG工具')
center_window(win, 500, 110)
win.resizable(False, False)  #锁定窗口大小
win.wm_attributes('-topmost', 1)  #窗口保持前置
ft = Font(family='微软雅黑', size=15, weight='bold')
Label(text='选择文件:',font=ft).place(x=40, y=10)
Label(text='转换质量:',font=ft).place(x=40, y=50)
Label(text='低',font=Font(family='微软雅黑', size=12)).place(x=145, y=55)
Label(text='高',font=Font(family='微软雅黑', size=12)).place(x=358, y=55)
entry_font = ('微软雅黑', 12)
pathname = Entry(win, width=28,font=entry_font)
pathname.place(x=150, y=15)
#文本框,用于显示文件名
pathname_2 = Entry(win, width=28,font=entry_font)
pathname_2.place(x=150, y=150)
#隐藏文本框,用于获取完整路径
browser_button = tk.Button(win, text='. . .',font=Font(family='微软雅黑', size=7,weight='bold') ,command=open_file)
browser_button.place(x=420, y=15)
win.drop_target_register(DND_FILES)
win.dnd_bind('<<Drop>>',drop)
label = tk.Label(win,text='', font=Font(family='微软雅黑', size=10))
label.place(x=40, y=85)
#用于显示进度
button = tk.Button(win, text='开始转换',fg='red',font=Font(family='微软雅黑', size=12,weight='bold') ,command=main)
button.place(x=390, y=50)
slider = tk.Scale(win, from_=0, to=4,orient=tk.HORIZONTAL,length=180,sliderlength=30,sliderrelief=tk.RIDGE,showvalue=False,resolution=1)
slider.place(x=170, y=58)
slider.set(2)
win.mainloop()

http://www.ppmy.cn/devtools/138194.html

相关文章

C++类的自动转换和强制类型转换

目录 一、类型转换 二、转换函数 一、类型转换 C⽀持内置类型隐式类型转换为类类型对象&#xff0c;需要有相关内置类型为参数的构造函数 简单说就是可以将内置类型转化为自定义类型 示例&#xff1a; class Test { public:Test(int n1 0):num1(n1){}void pr…

Unity3D ngui和ugui区别与优缺点详解

前言 Unity3D是一款跨平台的游戏开发引擎&#xff0c;它支持多种平台&#xff0c;包括PC、移动设备和主机。在Unity3D中&#xff0c;UI系统是游戏开发中非常重要的一部分&#xff0c;它负责游戏中的用户界面的显示和交互。 对惹&#xff0c;这里有一个游戏开发交流小组&#…

40分钟学 Go 语言高并发:Go程序性能优化方法论

Go程序性能优化方法论 一、性能指标概述 指标类型关键指标重要程度优化目标CPU相关CPU使用率、线程数、上下文切换⭐⭐⭐⭐⭐降低CPU使用率&#xff0c;减少上下文切换内存相关内存使用量、GC频率、对象分配⭐⭐⭐⭐⭐减少内存分配&#xff0c;优化GC延迟指标响应时间、处理延…

【VBA实战】使用Word制作简易的考试及阅卷系统

这个事源于公司想简化面试流程&#xff0c;希望能通过一些简单的笔试及自动阅卷来提高对候选人的初步筛选工作的效率和准确性。我当时的想法是这样的&#xff1a; 1. 利用AI工具生成一个笔试题库&#xff0c;只要选择题和填空题 2. 利用VBA工具&#xff0c;根据需求自动从题库…

海康面阵、线阵、读码器及3D相机接线说明

为帮助用户快速了解和配置海康系列设备的接线方式&#xff0c;本文将针对海康面阵相机、线阵相机、读码器和3D相机的主要接口及接线方法进行全面整理和说明。 一、海康面阵相机接线说明 海康面阵相机使用6-pin P7接口&#xff0c;其功能设计包括电源输入、光耦隔离信号输入输出…

力扣--LCR 150.彩灯装饰记录II

题目 代码 if(root null){ return new ArrayList<>(); } Queue<TreeNode> queue new LinkedList<>();List<List<Integer>> res new ArrayList<>();queue.add(root);while(!queue.isEmpty()){int k queue.size();List<Integer> …

网络安全之渗透测试(Penetration Testing for Network Security)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…

技术模板纪要

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示&#xff1a;这里可以添加技术概要 例如&#xff1a; openAI 的 GPT 大模型的发展历程。 整体架构流程 提示&#xff1a;这里可以添加技术整体架构 例如&#xff1a; 在语言模型中&#xff0c;编码器和解码器…