python实现docx转pptx(word文档转幻灯片)

发布时间 2023-10-13 12:30:36作者: pu369com

以前都是手工将word内容复制粘贴到ppt中,实在受够了。

文心一言真是大忽悠,给的转换方案是用docx2pptx库,然而根本没有这个库,倒是可以用我下面的代码生成这个库:-)

网上很多方案是转成图片形式插入ppt,导致无法正常编辑ppt.

于是研究出以下方案:

1.先将word文档的页面设置改为自定义大小,使每一页文字可容纳于一张幻灯片

2.去掉word文档页码(否则后面读取时会把页码作为正文的一部分,还要处理),然后转换为pdf格式(以便于按页读取,因为用代码读取word文档的一页比较困难,参看我的上一篇文章:python 获取word页数 https://www.cnblogs.com/pu369/p/17757633.html)

3.读取pdf每一页的文字,粘贴到ppt中。(注意在代码中设置好文本框大小及字号,保证ppt的文本框比pdf页要大。否则会因段落的换行符而影响显示效果)

4.打开ppt选择设计模板。然后可以按正常的PPT进行编辑。

主要用到三个库:1.用docx2pdf将word转pdf  2.用 PyPDF2读取pdf    3.用pptx生成幻灯片

代码:

from pptx import Presentation
from pptx.enum.text import PP_PARAGRAPH_ALIGNMENT,MSO_ANCHOR
from pptx.util import Pt
from docx2pdf import convert
import PyPDF2

wordfile = "1.docx"
pdffile = "{}{}".format(wordfile[:-4],"pdf")
# 将Word文档转换为pdf 
convert(wordfile, pdffile)

# 创建一个Presentation对象  
prs = Presentation()
#打开pdf文件
with open(pdffile, 'rb') as file:
    # 创建一个PDF Reader对象
    pdf_reader = PyPDF2.PdfFileReader(file)
    # 获取PDF文件中页面的数量
    num_pages = pdf_reader.numPages   
    # 读取一页的内容
    for i in range(0,num_pages):
        page = pdf_reader.getPage(i)
        pdftext = page.extractText()#如有页码,则读出的第一个字符为页码
        # 在演示文稿中添加幻灯片
        slide_layout = prs.slide_layouts[5] # 5是标题幻灯片的布局  
        slide = prs.slides.add_slide(slide_layout)
        # 在幻灯片上添加一个shapge,并设置高度和宽度
        shapes0 =  slide.shapes[0]
        shapes0.height = Pt(450)
        shapes0.width = Pt(660)
        #左右边距
        shapes0.top = Pt(100)
        shapes0.left = Pt(100)
        #在shape里面添加文本
        txt_frame = slide.shapes[0].text_frame
        txt_frame.text = pdftext      
        #段落左对齐
        for p in txt_frame.paragraphs:
            p.alignment = 1
            p.font.size = Pt(25)
        #文本框顶端对齐
        txt_frame.vertical_anchor = MSO_ANCHOR.TOP      # 保存演示文稿  
    prs.save('1.pptx')  

注意:代码主要适用于文字 ,表格也会变成文字形式,图片我没有试。