标签: python-pptx

Python将图像插入现有PowerPoint的中间

我有一个包含 20 张幻灯片的现有 PowerPoint 演示文稿。此演示文稿用作模板,每张幻灯片都有不同的背景。我想使用这个(现有的)PowerPoint 演示文稿,在第 4 张幻灯片中插入一个图像(前 3 个不做任何处理)并将其另存为新的 PowerPoint 演示文稿。

这就是我到目前为止所拥有的。此代码加载现有演示文稿并将其另存为新演示文稿。现在我只需要知道如何使用它像上面描述的那样将图像插入第 4 号幻灯片。

注意:我使用的是普通的 Python。

from pptx import Presentation

def open_PowerPoint_Presentation(oldFileName, newFileName):
    prs = Presentation(oldFileName)
    #Here I guess I need to type something to complete the task.
    prs.save(newFileName)

open_PowerPoint_Presentation('Template.pptx', 'NewTemplate.pptx')
Run Code Online (Sandbox Code Playgroud)

python powerpoint python-pptx

6
推荐指数
1
解决办法
7476
查看次数

如何将PIL图像传递给python-pptx中的Add_Picture

我正在尝试从剪贴板获取图像,并且想将该图像添加到 python-pptx 中。我不想将图像保存在磁盘中。我已经尝试过这个:

from pptx import Presentation
from PIL import ImageGrab,Image
from pptx.util import Inches
im = ImageGrab.grabclipboard()
prs = Presentation()
title_slide_layout = prs.slide_layouts[0]
slide = prs.slides.add_slide(title_slide_layout)
left = top = Inches(1)
pic = slide.shapes.add_picture(im, left, top)
prs.save('PPT.pptx')
Run Code Online (Sandbox Code Playgroud)

但是出现这个错误

File "C:\Python27\lib\site-packages\PIL\Image.py", line 627, in __getattr__
    raise AttributeError(name)
AttributeError: read
Run Code Online (Sandbox Code Playgroud)

这有什么问题吗?

python python-imaging-library python-pptx

6
推荐指数
1
解决办法
3265
查看次数

如何在 Python 3 中将演示文稿保存到类似文件的对象

Python 3 替换StringIO.StringIOio.StringIO. 我已经能够使用前者成功保存演示文稿,但它似乎不适用于后者。

from pptx import Presentation
from io import StringIO

presentation = Presentation('presentation.pptx')
output = StringIO()
presentation.save(output)
Run Code Online (Sandbox Code Playgroud)

上面的代码产生:

Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Users\mgplante\AppData\Local\Continuum\Anaconda2\envs\ppt_gen\lib\site-packages\pptx\presentation.py", line 46, in save self.part.save(file) File "C:\Users\mgplante\AppData\Local\Continuum\Anaconda2\envs\ppt_gen\lib\site-packages\pptx\parts\presentation.py", line 118, in save self.package.save(path_or_stream) File "C:\Users\mgplante\AppData\Local\Continuum\Anaconda2\envs\ppt_gen\lib\site-packages\pptx\opc\package.py", line 166, in save PackageWriter.write(pkg_file, self.rels, self.parts) File "C:\Users\mgplante\AppData\Local\Continuum\Anaconda2\envs\ppt_gen\lib\site-packages\pptx\opc\pkgwriter.py", line 33, in write PackageWriter._write_content_types_stream(phys_writer, parts) File "C:\Users\mgplante\AppData\Local\Continuum\Anaconda2\envs\ppt_gen\lib\site-packages\pptx\opc\pkgwriter.py", line 47, in _write_content_types_stream phys_writer.write(CONTENT_TYPES_URI, content_types_blob) File "C:\Users\mgplante\AppData\Local\Continuum\Anaconda2\envs\ppt_gen\lib\site-packages\pptx\opc\phys_pkg.py", line 156, in write …

python python-pptx

6
推荐指数
1
解决办法
1569
查看次数

Python PPTX:从另一个演示文稿添加整个幻灯片

看来这个问题是在2015年提出并要求的,但我找不到任何更新。我正在尝试通过执行以下操作将整个幻灯片(包括其文本和图像)从另一个演示文稿复制到我的工作演示文稿中:

prs = Presentation('CurrentPresentation.pptx')
prs1 = Presentation('OtherPresentation.pptx')
# Wanted_Slide = prs1.slides[0]
New_Slide = prs.slides.add_slide(prs1.slide_layout[0])
Run Code Online (Sandbox Code Playgroud)

但是,所有这些操作就是添加一个完全空白的幻灯片(带有所需幻灯片的背景),幻灯片布局为0,这完全是有道理的。我知道这不是正确的方法。我尝试了以下操作,但确实添加了一张幻灯片,但这只是prs演示文稿中已经存在的一个副本(我想我发现了一种无意中复制演示文稿中已经存在的幻灯片的方法):

def Add_Slide(self):
    xml_slides = prs.slides._sldIdLst
    xml_slides1 = prs1.slides._sldIdLst
    slides = list(xml_slides)
    slides1 = list(xml_slides1)
    xml_slides.append(slides1[0])
Run Code Online (Sandbox Code Playgroud)

上面的代码是我在网上找到的幻灯片删除方法的一种操作。

还是有人对如何将幻灯片及其所有内容完全复制到工作演示文稿中有任何建议?

如果没有任何进展,我对此表示歉意。先感谢您。

python powerpoint python-pptx

6
推荐指数
1
解决办法
1335
查看次数

如何使用 python-pptx 增加 python 生成的 powerpoint 演示文稿的幻灯片大小

我正在尝试将多个图表放入 python 生成的幻灯片中,但我需要幻灯片的尺寸更宽。我浏览了提供的可用文档,但内容并不多。

python powerpoint python-pptx

6
推荐指数
2
解决办法
8118
查看次数

如何使用 python-pptx 从 powerpoint 中的组形状内的文本形状中提取文本。

我的 PowerPoint 幻灯片有许多组形状,其​​中有子文本形状。

早些时候我使用过这段代码,但它不处理组形状。

for eachfile in files:
prs = Presentation(eachfile)

textrun=[]
for slide in prs.slides:
    for shape in slide.shapes:
        if hasattr(shape, "text"):
            print(shape.text)
            textrun.append(shape.text)
new_list=" ".join(textrun)
text_list.append(new_list)
Run Code Online (Sandbox Code Playgroud)

我正在尝试从这些子文本框中提取文本。我已设法使用 GroupShape.shape 访问这些子元素,但出现错误,这些元素的类型为“属性”,因此我无法访问文本或迭代(类型错误:“属性”对象不可迭代)他们。

from pptx.shapes.group import GroupShape
from pptx import Presentation
for eachfile in files:
prs = Presentation(eachfile)

textrun=[]
for slide in prs.slides:
    for shape in slide.shapes:
        for text in GroupShape.shapes:
            print(text)
Run Code Online (Sandbox Code Playgroud)

然后我想捕获文本并附加到字符串以进行进一步处理。

所以我的问题是,如何访问子文本元素并从中提取文本。

我花了很多时间浏览文档和源代码,但一直无法弄清楚。任何帮助,将不胜感激。

python powerpoint text python-pptx

6
推荐指数
1
解决办法
5107
查看次数

如何更改 python pptx 对象的字体大小

我想更改我的 pptx 演示文稿的标题和正文的字体大小。title_shape.font = Pt(15)我尝试通过和设置它body_shape.font = Pt(10),但不起作用。

这是我的代码:

from pptx import Presentation, util, text
from pptx.util import Cm, Pt
import fnmatch
import os

import contentOf_pptx as contOfPres


# ..............
# Generate presentation
# ..............
prs = Presentation()
#blank_slide_layout = prs.slide_layouts[6] #blank layout, see slide layout in powerpoint
title_only = prs.slide_layouts[5] #title only, see slide layout in powerpoint 



# ..............
# set layout
# ..............
bullet_slide_layout = prs.slide_layouts[1]
slide = prs.slides.add_slide(bullet_slide_layout)
shapes = slide.shapes

title_shape = shapes.title …
Run Code Online (Sandbox Code Playgroud)

python python-pptx

6
推荐指数
1
解决办法
2万
查看次数

使用Python获取pptx文件幻灯片的标题

我正在尝试使用 Python 获取幻灯片文件的每张幻灯片的标题。我在 Python 中使用 Presentation 包,但找不到任何指定标题的内容。我有这段代码可以返回powerpoint文件的内容。但我需要指定标题。

from pptx import Presentation

prs = Presentation("pp.pptx")

# text_runs will be populated with a list of strings,
# one for each text run in presentation
text_runs = []

for slide in prs.slides:
    for shape in slide.shapes:
        if not shape.has_text_frame:
            continue
        for paragraph in shape.text_frame.paragraphs:
            for run in paragraph.runs:
                text_runs.append(run.text)
Run Code Online (Sandbox Code Playgroud)

python powerpoint python-pptx

5
推荐指数
1
解决办法
4322
查看次数

是否可以使用 python-pptx 组合两个或多个幻灯片?

我正在尝试合并幻灯片,但我不知道该怎么做。我发现了一个看起来很有前途的 python moduel pptx。我尝试将幻灯片内容从 2 个幻灯片复制到一个新的幻灯片。但我遇到了很多问题,比如如何获取现有的幻灯片布局或形状(所有形状,包括图片、自动形状等)的高度、宽度、位置。我查看了Python-pptx上的python-pptx示例:复制幻灯片。我尝试做类似的事情,但这不起作用。

这是我的代码:

from pptx import Presentation

prs1 = Presentation("C:/Users/number/Documents/Test1.pptx")
prs2 = Presentation("C:/Users/number/Documents/Test2.pptx")

slidelst = []
for layout in prs2.slide_layouts:
    slidelst.append(prs1.slides.add_slide(layout))

index = 0
for slide in slidelst:
    for shape in prs2.slides[prs2.slides.index(slide)].shapes:
        slide.shapes._spTree.insert_element_before(shape.element, 'p:extLst')
    index+=1

prs1.save("C:/Users/I505168/Documents/newpresentation.pptx")
Run Code Online (Sandbox Code Playgroud)

我收到错误:

Traceback (most recent call last):
  File "C:\Users\I505168\Desktop\testpptx.py", line 12, in <module>
    for shape in prs2.slides[prs2.slides.index(slide)].shapes:
  File "C:\Users\I505168\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pptx\slide.py", line 315, in index
    raise ValueError("%s is not in slide collection" % slide)
ValueError: <pptx.slide.Slide object at 0x03B53A50> is not …
Run Code Online (Sandbox Code Playgroud)

python python-pptx

5
推荐指数
1
解决办法
7879
查看次数

ubuntu环境下使用python将ppt转换为视频

我编写了一个 python 脚本,使用 pywin32 将 ppt 转换为视频,该脚本工作正常,但是当我尝试在 Ubuntu 环境中导入我的脚本时,pywin32 无法作为其 Windows 支持的模块工作。所以我想找到一些可以在Ubuntu环境中使用python将ppt转换为视频的东西。

这些是在 Windows 中运行良好的脚本。

import win32com.client
import time
import os
ppSaveAsWMV = 37
def cover_ppt_to_wmv(ppt_src,wmv_target):
    ppt = win32com.client.Dispatch('PowerPoint.Application')
    presentation = ppt.Presentations.Open(ppt_src,WithWindow=False)
    presentation.CreateVideo(wmv_target,-1,4,720,24,60)
    start_time_stamp = time.time()
    while True:
        time.sleep(4)
        try:
            os.rename(wmv_target,wmv_target)
            print('success')
            break
        except Exception:
            pass
    end_time_stamp=time.time()
    print(end_time_stamp-start_time_stamp)
    ppt.Quit()
    pass
  
if __name__ == '__main__':
    cover_ppt_to_wmv('','')


Run Code Online (Sandbox Code Playgroud)

python ubuntu python-2.7 python-3.x python-pptx

5
推荐指数
0
解决办法
1092
查看次数