用Python实现PDF转换word,ppt,图片

用Python实现PDF转换word,ppt,图片

介绍

代码利用了PyMuPDF库,python-pptx库,python-docx库,tkinter窗体

需要执行以下代码进行安装:

pip install PyMuPDF
pip install python-pptx
pip install python-docx
pip install tkinter

代码

import fitz
import os
import tkinter as tk
from tkinter import filedialog, messagebox
from pptx import Presentation
from pptx.util import Inches
from docx import Document

def select_pdf_file(var):
    file_path = filedialog.askopenfilename(filetypes=[("PDF files", "*.pdf")])
    if file_path:
        var.set(file_path)

def select_output_directory(var):
    directory = filedialog.askdirectory()
    if directory:
        var.set(directory)

def convert_pdf_to_images():
    pdf_file_path = pdf_path_var_image.get()
    output_directory = output_dir_var_image.get()

    if not pdf_file_path or not output_directory:
        messagebox.showerror("错误", "请同时选择PDF文件和输出目录。")
        return

    doc = fitz.open(pdf_file_path)

    for page_number in range(len(doc)):
        page = doc.load_page(page_number)
        pix = page.get_pixmap()
        output = os.path.join(output_directory, "image_page_" + str(page_number) + ".png")
        pix.save(output)

    messagebox.showinfo("成功", "PDF成功转换为图片!")

def pdf_to_ppt():
    pdf_path = pdf_path_var_ppt.get()
    ppt_path = output_dir_var_ppt.get() + "/output.pptx"

    if not pdf_path or not ppt_path:
        messagebox.showerror("错误", "请同时选择PDF文件和输出目录。")
        return

    # 打开PDF文件
    pdf_document = fitz.open(pdf_path)
    num_pages = len(pdf_document)

    # 创建PPT对象
    ppt = Presentation()

    for page_number in range(num_pages):
        # 提取PDF中的一页
        pdf_page = pdf_document.load_page(page_number)

        # 创建新的PPT幻灯片
        slide_layout = ppt.slide_layouts[1]
        slide = ppt.slides.add_slide(slide_layout)

        # 提取PDF页中的文本并添加到PPT幻灯片中
        text = pdf_page.get_text()
        textbox = slide.shapes.add_textbox(Inches(1), Inches(1), Inches(8), Inches(5.5))
        text_frame = textbox.text_frame
        text_frame.text = text

    # 保存PPT文件
    ppt.save(ppt_path)

    messagebox.showinfo("成功", "PDF成功转换为PPT!")

def open_pdf_to_image():
    global pdf_to_image_window
    pdf_to_image_window = tk.Toplevel(root)
    pdf_to_image_window.title("PDF 转 图片")

    global pdf_path_var_image
    global output_dir_var_image
    pdf_path_var_image = tk.StringVar()
    output_dir_var_image = tk.StringVar()

    tk.Label(pdf_to_image_window, text="选择PDF文件:").pack(pady=10)
    tk.Entry(pdf_to_image_window, textvariable=pdf_path_var_image, width=50).pack(pady=5)
    tk.Button(pdf_to_image_window, text="浏览", command=lambda: select_pdf_file(pdf_path_var_image)).pack(pady=5)

    tk.Label(pdf_to_image_window, text="选择输出目录:").pack(pady=10)
    tk.Entry(pdf_to_image_window, textvariable=output_dir_var_image, width=50).pack(pady=5)
    tk.Button(pdf_to_image_window, text="浏览", command=lambda: select_output_directory(output_dir_var_image)).pack(pady=5)

    tk.Button(pdf_to_image_window, text="开始转换", command=convert_pdf_to_images).pack(pady=20)

def open_pdf_to_ppt():
    global pdf_to_ppt_window
    pdf_to_ppt_window = tk.Toplevel(root)
    pdf_to_ppt_window.title("PDF 转 PPT")

    global pdf_path_var_ppt
    global output_dir_var_ppt
    pdf_path_var_ppt = tk.StringVar()
    output_dir_var_ppt = tk.StringVar()

    tk.Label(pdf_to_ppt_window, text="选择PDF文件:").pack(pady=10)
    tk.Entry(pdf_to_ppt_window, textvariable=pdf_path_var_ppt, width=50).pack(pady=5)
    tk.Button(pdf_to_ppt_window, text="浏览", command=lambda: select_pdf_file(pdf_path_var_ppt)).pack(pady=5)

    tk.Label(pdf_to_ppt_window, text="选择输出目录:").pack(pady=10)
    tk.Entry(pdf_to_ppt_window, textvariable=output_dir_var_ppt, width=50).pack(pady=5)
    tk.Button(pdf_to_ppt_window, text="浏览", command=lambda: select_output_directory(output_dir_var_ppt)).pack(pady=5)

    tk.Button(pdf_to_ppt_window, text="开始转换", command=pdf_to_ppt).pack(pady=20)

def pdf_to_word():
    pdf_path = pdf_path_var_word.get()
    word_path = output_dir_var_word.get() + "/output.docx"

    if not pdf_path or not word_path:
        messagebox.showerror("错误", "请同时选择PDF文件和输出目录。")
        return

    doc = fitz.open(pdf_path)
    word_document = Document()

    for page_num in range(len(doc)):
        page = doc.load_page(page_num)
        text = page.get_text("text")
        word_document.add_paragraph(text)

        if page_num != len(doc) - 1:
            word_document.add_page_break()

    word_document.save(word_path)
    messagebox.showinfo("成功", "PDF成功转换为Word!")


def open_pdf_to_word():
    global pdf_to_word_window
    pdf_to_word_window = tk.Toplevel(root)
    pdf_to_word_window.title("PDF 转 Word")

    global pdf_path_var_word
    global output_dir_var_word
    pdf_path_var_word = tk.StringVar()
    output_dir_var_word = tk.StringVar()

    tk.Label(pdf_to_word_window, text="选择PDF文件:").pack(pady=10)
    tk.Entry(pdf_to_word_window, textvariable=pdf_path_var_word, width=50).pack(pady=5)
    tk.Button(pdf_to_word_window, text="浏览", command=lambda: select_pdf_file(pdf_path_var_word)).pack(pady=5)

    tk.Label(pdf_to_word_window, text="选择输出目录:").pack(pady=10)
    tk.Entry(pdf_to_word_window, textvariable=output_dir_var_word, width=50).pack(pady=5)
    tk.Button(pdf_to_word_window, text="浏览", command=lambda: select_output_directory(output_dir_var_word)).pack(pady=5)

    tk.Button(pdf_to_word_window, text="开始转换", command=pdf_to_word).pack(pady=20)

root = tk.Tk()
root.title("PDF 转换工具")

tk.Button(root, text="PDF 转 图片", command=open_pdf_to_image, width=20).pack(pady=10)
tk.Button(root, text="PDF 转 PPT", command=open_pdf_to_ppt, width=20).pack(pady=10)
tk.Button(root, text="PDF 转 Word", command=open_pdf_to_word, width=20).pack(pady=10)
root.mainloop()

安装好了之后可以运行代码就可以直接运行了

运行截图

图片

图片

大概就是这种样子,可以用就行了不管好不好看了

exe文件

方便有的同学不会用Python所以我直接打包了exe文件可以直接下载使用的

 
办公软件.zip
zip文件
42.2M

下载解压即可

是电脑的软件哦!!

手机是不可以用的!!!

有什么问题可以评论或者私聊站长哦!

© 版权声明
THE END
喜欢就支持一下吧
点赞12赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容