PPT转化成PDF脚本

功能:把当前目录下面的所有ppt转化成PDF

有环境的可以自己运行或者修改脚本,没有的文章底部有打包好的链接

复制代码
import os
import win32com.client
import pythoncom
import shutil

def create_output_dir(output_dir):
    """创建输出目录,如果已存在则保留文件(不再清空)"""
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
        print(f"已创建输出目录: {output_dir}")
    else:
        print(f"输出目录已存在: {output_dir}")

def pptx_to_pdf(pptx_path, pdf_path):
    """将单个PPTX文件转换为PDF,增加更多错误处理"""
    powerpoint = None
    presentation = None
    
    # 检查文件是否可访问
    if not os.path.exists(pptx_path):
        print(f"错误: 文件不存在 - {pptx_path}")
        return False
        
    if not os.access(pptx_path, os.R_OK):
        print(f"错误: 没有读取权限 - {pptx_path}")
        return False
    
    try:
        # 初始化COM库
        pythoncom.CoInitialize()
        
        # 创建PowerPoint应用对象
        powerpoint = win32com.client.DispatchEx("PowerPoint.Application")  # 使用DispatchEx避免冲突
        powerpoint.Visible = True
        powerpoint.DisplayAlerts = False  # 禁用警告
        
        # 尝试打开文件,增加只读模式
        presentation = powerpoint.Presentations.Open(
            FileName=pptx_path,
            ReadOnly=True,
            WithWindow=False  # 不显示窗口但保持应用可见
        )
        
        # 保存为PDF
        presentation.SaveAs(pdf_path, 32)  # 32 = ppSaveAsPDF
        print(f"已转换: {os.path.basename(pptx_path)} -> {os.path.basename(pdf_path)}")
        return True
        
    except Exception as e:
        print(f"转换失败 {os.path.basename(pptx_path)}:")
        print(f"  错误信息: {str(e)}")
        print(f"  错误类型: {type(e).__name__}")
        return False
        
    finally:
        # 关闭演示文稿
        if presentation is not None:
            try:
                presentation.Close()
            except Exception as close_err:
                print(f"关闭演示文稿时出错: {str(close_err)}")
        
        # 关闭PowerPoint
        if powerpoint is not None:
            try:
                powerpoint.Quit()
            except Exception as quit_err:
                print(f"关闭PowerPoint时出错: {str(quit_err)}")
        
        # 释放资源
        del presentation
        del powerpoint
        pythoncom.CoUninitialize()  # 清理COM库

def batch_convert_pptx_to_pdf(output_dir="./out_pdf"):
    """批量转换当前目录下的所有PPTX文件"""
    create_output_dir(output_dir)
    
    current_dir = os.getcwd()
    pptx_files = [f for f in os.listdir(current_dir) if f.lower().endswith('.pptx')]
    
    if not pptx_files:
        print("未找到任何PPTX文件")
        return
    
    print(f"找到 {len(pptx_files)} 个PPTX文件,开始转换...")
    success_count = 0
    
    for pptx_file in pptx_files:
        pptx_path = os.path.abspath(os.path.join(current_dir, pptx_file))
        pdf_filename = os.path.splitext(pptx_file)[0] + ".pdf"
        pdf_path = os.path.abspath(os.path.join(output_dir, pdf_filename))
        
        if pptx_to_pdf(pptx_path, pdf_path):
            success_count += 1
    
    print(f"\n转换完成!成功: {success_count}/{len(pptx_files)}")

if __name__ == "__main__":
    # 以管理员权限运行的提示
    print("注意:如果转换失败,尝试以管理员身份运行此脚本\n")
    batch_convert_pptx_to_pdf()

打包好的链接:https://wwsj.lanzout.com/i7JtC35uvzxi

密码:3tda

相关推荐
~烈15 小时前
Acrobat Pro DC 便携精简版 PDF 专业处理工具安装教程
pdf·acrobat pro dc·pdf 专业处理工具
我不是QI15 小时前
Master PDF Editor 逆向复现
汇编·安全·pdf
蓝创工坊Blue Foundry16 小时前
多个同模板 PDF,怎样批量提取同一类字段到 Excel
运维·数据库·pdf·自动化·ocr·excel
asdzx672 天前
Python PDF 拆分实战指南:单页拆分与按需页码范围拆分
开发语言·python·pdf
慧都小妮子2 天前
Aspose.CAD for .NET 26.6 更新发布
pdf·.net·3d渲染·cad·pdf导出·ifc编辑
Metaphor6922 天前
使用 Python 在 PowerPoint 中创建折线图和条形图
python·信息可视化·powerpoint·图表
蝉蜕日记2 天前
AccumuPDF高级版 v2.57 | 视图文转换PDF,合并分割压缩
android·智能手机·pdf·生活·软件需求
蓝创工坊Blue Foundry3 天前
PDF 批量提取指定内容到 Excel:按字段整理多个 PDF 的方法
pdf·ocr·excel·文心一言·paddlepaddle·paddle
Am-Chestnuts3 天前
AI长回答批量导出PDF与长图:多轮内容整理和免费Markdown备份
人工智能·pdf·aigc
zyplayer-doc3 天前
研发接口文档怎么长期维护:zyplayer-doc把API、Markdown和变更记录放进同一个知识库
大数据·数据库·人工智能·笔记·pdf·ocr