python ppt转pdf以及图片提取

采用com唤起 ppt进行转pdf,从pdf中提取图片

  1. 安装
bash 复制代码
pip instamm PyMuPDF
pip install comtypes
  1. code
python 复制代码
import os
import shutil
import comtypes.client
import fitz  
# 逻辑
'''
1. 根据输入的文件夹提取ppt,转成pdf
2. pdf保留和ppt一样的文件夹结构
3. 从pdf提取图片,保留一样的结构,以ppt文件名命名文件夹

'''


def ensure_dir(path):
    if not os.path.exists(path):
        os.makedirs(path)

def ppt_to_pdf(ppt_path, pdf_path):
    powerpoint = comtypes.client.CreateObject("PowerPoint.Application")
    powerpoint.Visible = 1
    try:
        presentation = powerpoint.Presentations.Open(ppt_path, WithWindow=False)
        presentation.SaveAs(pdf_path, 32)  # 保存为PDF
        presentation.Close()
    finally:
        powerpoint.Quit()

# 从pdf中提取图片,保存在文件名目录下
def extract_images_from_pdf(pdf_path, image_dir):
    ensure_dir(image_dir)
    doc = fitz.open(pdf_path)
    img_count = 0
    for page_index in range(len(doc)):
        page = doc.load_page(page_index)
        for img_index, img in enumerate(page.get_images(full=True), start=1):
            xref = img[0]
            base_image = doc.extract_image(xref)
            image_bytes = base_image["image"]
            image_ext = base_image["ext"]
            image_name = f"page{page_index+1:03d}_img{img_index:03d}.{image_ext}"
            image_path = os.path.join(image_dir, image_name)
            with open(image_path, "wb") as f:
                f.write(image_bytes)
            img_count += 1
    doc.close()
    return img_count

# 遍历整个文件夹
def process_ppt_directory(src_root, dst_root,error_dir):
    for root, dirs, files in os.walk(src_root):
        rel_path = os.path.relpath(root, src_root)
        target_dir = os.path.join(dst_root, rel_path)
        error_dir = os.path.join(error_dir, rel_path)
        ensure_dir(target_dir)

        for file in files:
            if file.lower().endswith(('.ppt', '.pptx')):
                ppt_path = os.path.join(root, file)
                base_name = os.path.splitext(file)[0]
                pdf_path = os.path.join(target_dir, base_name + ".pdf")
                image_dir = os.path.join(target_dir, base_name + "_images")
                

                print(f"▶ 转换: {ppt_path}")
                try:
                    ppt_to_pdf(ppt_path, pdf_path)
                    print(f"  ✅ 生成 PDF: {pdf_path}")
                except Exception as e:
                    print(f"❌ PPT {ppt_path} 转 PDF 失败: {e}")
                    ensure_dir(error_dir)
                    shutil.copy2(ppt_path, error_dir)
                    print(f"  ⚠️ 已复制失败文件到: {error_dir}")
                    continue

                try:
                    count = extract_images_from_pdf(pdf_path, image_dir)
                    print(f"  ✅ 提取图片 {count} 张 → {image_dir}")
                except Exception as e:
                    print(f"❌ PDF {pdf_path} 提取图片失败: {e}")
                    ensure_dir(error_dir)
                    shutil.copy2(ppt_path, error_dir)
                    print(f"  ⚠️ 已复制失败文件到: {error_dir}")

if __name__ == "__main__":
    src_dir = r"C:\Users\84977\Desktop\ceshi"   # ppt目录
    dst_dir = r"C:\Users\84977\Desktop\123"   # 输出目录
    error_dir = r"C:\Users\84977\Desktop\345"  # 失败的目录
    process_ppt_directory(src_dir, dst_dir, error_dir)
相关推荐
桑年15 分钟前
四、Pandas数据处理
人工智能·python·线性代数·pandas·数据可视化·数据处理
第九序言T29 分钟前
Python 数据处理进阶(二十四)把脚本变成工具:argparse、logging 与定时任务
python·自动化·pandas
jcqcool1 小时前
win11下ppt内置的Flash 动画还直接能动起来:我做了一个 兼容播放小工具
powerpoint
shelly聊外贸1 小时前
WhatsApp 聊天记录如何导出为 CSV?使用 Python 进行数据分析
开发语言·python·数据分析
I Am a robert girl1 小时前
从 FlowAct-R2 拆解“会说话的数字人“:流式多模态参考与主动式 Agent 规划
python·数字人·多模态大模型·扩散transformer·流式生成·agent规划
梯度下降者2 小时前
Python使用统计建模解决业务预测问题的常见操作步骤【教程】
python·可解释性·数据清洗·模型选择·业务预测
zhippt_10142 小时前
只剩截图没有源文件?图转PPT把图片还原成可编辑幻灯片
前端·人工智能·powerpoint
Frag0ut3 小时前
Notepad++ 零基础入门:从记事本到代码编辑器的平滑过渡(2026最新版)
python·编辑器·html·json·notepad++·markdown·记事本
深蓝AI3 小时前
Webhook 重投别再执行两次:Python + SQLite 收件箱实测
python
Eider19983 小时前
Python基础知识之并发相关-2
开发语言·前端·python