首页 > 解决方案 > Python-pptx - 在多行打印时句子被分割

问题描述

我正在从 .pptx 打印,但单个句子从某处被拆分为中间的新行..这是幻灯片的屏幕截图.. 在此处输入图像描述

阅读下面的代码时.. from pptx import Presentation

prs = Presentation(path_to_presentation)
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:
                    print(run.text)

得到如下输出...

Books include:
Learning Python 
by Mark Lutz
Python Essential Reference 
by David Beazley
Python Cookbook
, ed. by Martelli, Ravenscroft and Ascher
(online at http://code.activestate.com/recipes/langs/python/)
http://wiki.python.org/moin/PythonBooks

您可以比较来自 pptx 的屏幕截图和来自 pptx 的打印文本,项目符号被分成两个或多个句子..例如“Learning Python by Mark Lutz”以 2 点打印“Learning Python”和“by Mark Lutz”,甚至子弹错过了。

如何解决这个问题?

标签: pythonpython-3.xpython-2.7powerpointpython-pptx

解决方案


简短的回答是paragraph.text不使用run.text

for paragraph in shape.text_frame.paragraphs:
    print(paragraph.text)

段落是连贯的文本块,在页边距之间流动,没有垂直中断。这是用户的区别,因为它会影响我们阅读内容的方式。运行是共享相同字符格式(即字体,但包括粗体、斜体等)的字符序列。运行是一种技术区别,因为它们的界限对读者来说不应该是显而易见的;它们只是用来告诉 PowerPoint“将此字符格式应用于所有这些字符”。

如果您单独打印每个运行,它们将在段落中看似随机的位置中断,至少取决于斜体打开和关闭的位置,但也经常在其他位置,例如有人编辑添加几个字符的位置。PowerPoint 不一定会最小化运行次数,即使两次连续运行具有相同的格式也是如此。因此,它们倾向于增殖。


推荐阅读