以前都是手工将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')
注意:代码主要适用于文字 ,表格也会变成文字形式,图片我没有试。
标签:pptx,docx,word,Pt,slide,pdf,幻灯片 From: https://www.cnblogs.com/pu369/p/17761824.html