一个对象而不是两个单独的对象(形状和文本,如何使用运行形状)
只是不知道如何在Autoshape对象的Textframe实例上设置参数。
from pptx import Presentation
from pptx.enum.shapes import MSO_SHAPE
from pptx.enum.dml import MSO_THEME_COLOR
from pptx.enum.text import MSO_ANCHOR, MSO_AUTO_SIZE
from pptx.util import Inches, Pt
prs = Presentation('Input.pptx')
slide_layout = prs.slide_layouts[2]
slide = prs.slides.add_slide(slide_layout)
shape = slide.shapes
#Title
shape.title.text = "Title of the slide"
# Shape position
left = Inches(0.5)
top = Inches(1.5)
width = Inches(2.0)
height = Inches(0.2)
box = shape.add_shape(MSO_SHAPE.RECTANGLE, left, top, width, height)
#Fill
fill = box.fill
line = box.line
fill.solid()
fill.fore_color.theme_color = MSO_THEME_COLOR.ACCENT_2
line.color.theme_color = MSO_THEME_COLOR.ACCENT_2
# How can I set font, size of text for the shape ?
# One Object for instead two seperate ones
#box_text.font.bold = True
# Text position
t_left = Inches(0.5)
t_top = Inches(1.4)
t_width = Inches(2.0)
t_height = Inches(0.4)
#Text
txBox = slide.shapes.add_textbox(t_left, t_top, t_width,t_height)
tf = txBox.text_frame.paragraphs[0]
tf.vertical_anchor = MSO_ANCHOR.TOP
tf.word_wrap = False
tf.margin_top = 0
tf.auto_size = MSO_AUTO_SIZE.SHAPE_TO_FIT_TEXT
run = tf.add_run()
run.text = "Text on the Shape"
font = run.font
font.name = 'Calibri'
font.size = Pt(18)
font.bold = True
font.italic = None # cause value to be inherited from theme
font.color.theme_color = MSO_THEME_COLOR.ACCENT_5
prs.save('Out.pptx')
答案 0 :(得分:4)
如果要在形状中使用非默认字符格式(字体),则需要在“运行”级别进行操作;那个字符格式存在的地方,几乎就是运行而不仅仅是段落的全部原因。
这是一个简单的例子:
from pptx.util import Pt
shape = shapes.add_shape(MSO_SHAPE.RECTANGLE, left, top, width, height)
text_frame = shape.text_frame
text_frame.clear() # not necessary for newly-created shape
p = text_frame.paragraphs[0]
run = p.add_run()
run.text = 'Spam, eggs, and spam'
font = run.font
font.name = 'Calibri'
font.size = Pt(18)
font.bold = True
通过在段落中添加更多运行,例如,您可以在正常格式化的单词的句子中使用粗体字等。
更多详情:http://python-pptx.readthedocs.io/en/latest/user/text.html#applying-character-formatting