Python PPTX文本格式化过程



pptx**社区!

如果下面的方法是格式化文本的正确方法,你能指导我吗?

换句话说,我是否必须在添加到PPTX的每个文本中添加:prun和所有字体属性?

非常感谢您的帮助

from pptx import Presentation
from pptx.dml.color import RGBColor
from pptx.enum.dml import MSO_THEME_COLOR
from pptx.enum.shapes import MSO_SHAPE
from pptx.enum.text import MSO_ANCHOR, MSO_AUTO_SIZE
from pptx.util import Inches, Pt
prs = Presentation('./data/template.pptx')
cover = prs.slides.add_slide(prs.slide_layouts[0])
pptTitle_Shape = cover.shapes.add_textbox(Inches(0.31), Inches(0.54), 0.61, 9.38)
pptTitle_TextFrame = pptTitle_Shape.text_frame
p = pptTitle_TextFrame.paragraphs[0]
run = p.add_run()
run.text = 'Cover Page Title Name'
font = run.font
font.name = 'Arial'
font.size = Pt(40)
font.bold = False
font.color.rgb = RGBColor(255, 255, 255)
pptCustomerName_Shape = cover.shapes.add_textbox(Inches(0.31), Inches(2.03), 4.5, 0.4)
pptCustomerName_TextFrame = pptCustomerName_Shape.text_frame
p = pptCustomerName_TextFrame.paragraphs[0]
run = p.add_run()
run.text = 'Customer Name'
font = run.font
font.name = 'Arial'
font.size = Pt(28)
font.bold = False
font.color.rgb = RGBColor(255, 255, 255)
pptSEName_Shape = cover.shapes.add_textbox(Inches(0.31), Inches(2.51), 4.5, 0.4)
pptSEName_TextFrame = pptSEName_Shape.text_frame
p = pptSEName_TextFrame.paragraphs[0]
run = p.add_run()
run.text = 'FirstName LName'
font = run.font
font.name = 'Arial'
font.size = Pt(20)
font.bold = False
font.color.rgb = RGBColor(255, 255, 255)

否,通常不会。有一些快捷方式,默认值在大多数情况下都应该可以正常工作。

典型的形状添加操作如下:

shape = shapes.add_shape(...)
shape.text = "foobar"

不需要显式访问文本框来添加文本,接受文本的形状具有可写的.text属性。

一般来说,默认字体(字符格式(可以正常工作。这包括你在起步阶段的工作;模板"。pptx文件,将默认值设置为大部分文本所需的值。这些默认设置将设置在主题和演示默认级别,以及幻灯片布局的占位符中。您通常会使用PowerPoint手动完成此操作,因为它是每个模板一次,而不是每个生成的演示文稿一次。

也许最常见的";定制";将更改特定形状的字体大小。那就是:

shape.text_frame.paragraphs[0].font.size = Pt(12)

如果你发现自己偶尔会这样做,你可以启动一些实用程序功能:

def shape_set_font_size(shape, points):
for paragraph in shape.text_frame.paragraphs:
paragraph.font.size = Pt(points)
shape_set_font_size(shape, 12)
shape_set_font_size(shape_2, 18)

每个_Run对象都有一个字体和一定的连续跨度("run"(字符,可能包括零个字符("(。运行中的所有字符共享相同的字体,并且您在该级别上所做的任何设置都会覆盖在更高级别上的任何设置,否则这些设置可能是";"继承";。

每个_Paragraph对象也有一个.font属性,但这个属性是该段落内运行的默认字体。这些字体特征将应用,但除外,在中,运行会用其级别的设置覆盖它们。

因此,正确的做法在一定程度上取决于情况。例如,如果你使用了以下内容,你一定要为段落中当前的所有文本设置字体,但不能为添加的新文本(会有新的运行(设置字体:

def shape_set_font_size(shape, points):
for paragraph in shape.text_frame.paragraphs:
for run in paragraph.runs:
run.font.size = Pt(points)

我建议你不要使用_Run级别的字体,除非你想强调某个特定的单词或短语,比如用粗体或斜体。除此之外,_Paragraph级别工作良好并且更灵活。

为了补充Scanny的响应,我创建了一组函数来将格式应用于python-pptx中的几个不同对象。这些函数很长,因为它们实现了所有类型的格式,如字体对齐、边框颜色、透明度、边距等。但您可以在以下要点中找到它们:https://gist.github.com/Fredericco72/c21505ebfb354461bc4b7b857764d5d2

它们直接映射到Scanny提供的逻辑,但它允许您执行以下操作:

slide = prs.slides.add_slide(prs.slide_layouts[0])
shape = slide.shapes.add_shape(
MSO_SHAPE.RECTANGLE,
left=Cm(1),
top=Cm(1),
width=Cm(10),
height=Cm(3)
)
format_shape(
shape,
fill_color="BLUE",
border_color="RED"
)
format_text_frame(
shape.text_frame,
font_size=15,
font_color="WHITE",
font_align=PP_ALIGN.RIGHT
)

为了允许您对BLUERED等颜色使用友好的名称,您需要设置一个映射文件,或者只需传递fill_color=RGBColor(255, 255, 255)

相关内容

最新更新