pdf转图片(可自定义图片大小)

2 篇文章 0 订阅
1 篇文章 0 订阅

pdf转图片(可自定义图片大小)

程序截图

在这里插入图片描述

详细代码

import tkinter as tk
from tkinter import filedialog
import fitz,glob
import os
import re
# author='xuehuihui'
class App():
    def __init__(self,root):
        self.title=root.title("pdf to png  weixin:ixuehuihui")
        self.picaccu = tk.IntVar()
        self.picaccu.set(500)
        self.page=tk.StringVar()
        self.page.set('格式为1:20,15-18、22')
        self.all=tk.StringVar()
        self.all.set("all")
        tk.Label(root, text='文件:').grid(row=0, column=0, padx=10, pady=5)
        tk.Button(root, text='选择', command=self.askfiles).grid(row=0, column=2, padx=10, pady=5)
        tk.Label(root, text='尺寸:').grid(row=1, column=0, padx=10, pady=5)
        tk.Entry(root, textvariable=self.picaccu).grid(row=1, column=1, padx=10, pady=5)
        tk.Label(root, text='全部:').grid(row=2, column=0, padx=10, pady=10)
        tk.Entry(root, textvariable=self.all,state='disabled').grid(row=2, column=1, padx=10, pady=5)
        tk.Button(root, text='转换', command=self.exe1).grid(row=2, column=2, padx=10, pady=5)
        tk.Label(root, text='页码:').grid(row=3, column=0, padx=10, pady=5)
        tk.Entry(root, textvariable=self.page).grid(row=3, column=1, padx=10, pady=5)
        tk.Button(root, text='转换', command=self.exe2).grid(row=3, column=2, padx=10, pady=5)

    def askfiles(self):
        global wenjianming
        wenjianming = filedialog.askopenfilename(filetypes=[('PDF','.pdf')])
        print(wenjianming)

    def exe1(self):
        path = wenjianming
        doc = fitz.open(path)
        for pg in range(0, len(doc)):
            page = doc[pg]
            zoom = self.picaccu.get()
            rotate = int(0)
            trans = fitz.Matrix(zoom / 100.0, zoom / 100.0).preRotate(rotate)
            pm = page.getPixmap(matrix=trans, alpha=False)
            if os.path.exists(os.path.dirname(path) + '/全部页码图片'):
                pass
            else:
                os.mkdir(os.path.dirname(path) + '/全部页码图片')
            pm.writePNG(os.path.dirname(path) + '/全部页码图片/' + os.path.basename(path) + '_' + str(pg + 1) + '.png')
    def exe2(self):
        path = wenjianming
        doc = fitz.open(path)
        uselist=self.list_page(self.page.get())
        for pg in uselist:
            page = doc[pg-1]
            zoom = self.picaccu.get()
            rotate = int(0)
            trans = fitz.Matrix(zoom / 100.0, zoom / 100.0).preRotate(rotate)
            pm = page.getPixmap(matrix=trans, alpha=False)
            if os.path.exists(os.path.dirname(path) + '/局部页码图片'):
                pass
            else:
                os.mkdir(os.path.dirname(path) + '/局部页码图片')
            pm.writePNG(os.path.dirname(path) + '/局部页码图片/' + os.path.basename(path) + '_' + str(pg) + '.png')

    def list_page(self,str_page):
        a = str_page
        res = []
        for single in re.findall(r'\d+', a):
            if int(single) not in res:
                res.append(int(single))
        for i in re.findall(r'\d+[-:]\d+', a):
            start = int(re.search(r'^\d+', i).group())
            end = int(re.search(r'\d+$', i).group()) + 1
            for num in range(start, end):
                if num not in res:
                    res.append(num)
        res.sort()
        return res
root=tk.Tk()
App(root)
tk.mainloop()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值