Python实现PDF转图片、PDF拆分、PDF合并以及图片转PDF(已附下载链接)

Python开发多功能PDF工具箱

已打包成exe,需要可以下载直接免费运行:
链接:https://pan.quark.cn/s/aafb636310be

界面预览:

功能概览

PDF工具箱支持四种核心功能:PDF转图片、PDF拆分、PDF合并以及图片转PDF。所有功能均支持批量处理,并具备高DPI输出和多种格式支持。

技术实现

PyPDF2和PyMuPDF负责PDF操作和处理,Pillow库用于图像转换,Tkinter构建用户界面,logging系统记录操作日志。这种组合确保了高效稳定的PDF处理能力。

PDF转图片实现

使用PyMuPDF库打开PDF文件,通过矩阵转换实现高DPI渲染。将每页转换为PIL图像对象后保存为指定格式,支持PNG/JPEG/BMP三种输出格式。

def pdf_to_image(pdf_path, dpi=300, output_format='png'):
    doc = fitz.open(pdf_path)
    for page in doc:
        pix = page.get_pixmap(matrix=fitz.Matrix(dpi/72, dpi/72))
        img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
        img.save(f"page_{page.number}.{output_format}")

PDF拆分功能

提供三种拆分方式:单页拆分、指定范围拆分和固定页数分组。PyPDF2库用于读取PDF并创建新的PDF文件,确保拆分过程准确无误。

def split_pdf(input_path, method='single', ranges=None):
    reader = PdfReader(input_path)
    if method == 'single':
        for i, page in enumerate(reader.pages):
            writer = PdfWriter()
            writer.add_page(page)
            writer.write(f"page_{i+1}.pdf")

PDF合并功能

利用PyMuPDF的高性能PDF处理能力,将多个PDF文档按顺序合并为一个文件。支持文件列表管理和顺序调整。

def merge_pdfs(file_list, output_path):
    merged = fitz.open()
    for f in file_list:
        with fitz.open(f) as mfile:
            merged.insert_pdf(mfile)
    merged.save(output_path)

图片转PDF功能

通过Pillow库将多种格式的图片转换为RGB模式,并合并为单个PDF文件。支持调整图片顺序和页面大小。

def images_to_pdf(image_list, output_path):
    images = [Image.open(img).convert('RGB') for img in image_list]
    images[0].save(output_path, save_all=True, append_images=images[1:])

日志系统设计

采用TimedRotatingFileHandler实现日志轮换,保留最近7天的日志记录。日志格式包含时间戳、日志级别和详细信息,便于问题排查。

logger = logging.getLogger("PDFTool")
handler = logging.handlers.TimedRotatingFileHandler(
    'pdf_tool.log', when='midnight', backupCount=7)
logger.addHandler(handler)

用户界面特点

Tkinter构建的GUI界面采用选项卡式布局,每个功能模块独立显示。界面元素包括文件选择器、参数设置区和操作按钮,提供直观的操作体验。

root = tk.Tk()
notebook = ttk.Notebook(root)
tab1 = ttk.Frame(notebook)
notebook.add(tab1, text="PDF转图片")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值