python - 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”,甚至子弹错过了。
如何解决这个问题?
解决方案
简短的回答是paragraph.text
不使用run.text
:
for paragraph in shape.text_frame.paragraphs:
print(paragraph.text)
段落是连贯的文本块,在页边距之间流动,没有垂直中断。这是用户的区别,因为它会影响我们阅读内容的方式。运行是共享相同字符格式(即字体,但包括粗体、斜体等)的字符序列。运行是一种技术区别,因为它们的界限对读者来说不应该是显而易见的;它们只是用来告诉 PowerPoint“将此字符格式应用于所有这些字符”。
如果您单独打印每个运行,它们将在段落中看似随机的位置中断,至少取决于斜体打开和关闭的位置,但也经常在其他位置,例如有人编辑添加几个字符的位置。PowerPoint 不一定会最小化运行次数,即使两次连续运行具有相同的格式也是如此。因此,它们倾向于增殖。
推荐阅读
- subscribe - 在 DolphinDB 中启用订阅
- exception - 思科:如何路由已经在路由网络中的单个服务器 IP
- image - 在页面之间导航时图像组件闪烁 React Native + Expo
- apache-kafka - Kafka Streams 客户端库与 kafka 代理版本的兼容性
- docker - 如何在没有“无安装候选”错误的情况下在 openjdk:11 docker 基础映像上 apt-get install firefox?
- php - 将事件处理程序附加到在循环内创建的表单
- html-email - 自定义模板和 Gmail IOS 客户端的 Mailchimp 问题
- javascript - 如何使用cheerio和fs将网站转换为pdf
- python - 通过字节串中的套接字加载图像在python中需要永远
- node.js - 压缩文件流node.js