Areza
Areza

Reputation: 6080

text color in python-pptx module

I would like to color a sentence, in different color - say, the first half in red and rest in blue.

my code so far is like

from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import ColorFormat, RGBColor
from pptx.enum.dml import MSO_COLOR_TYPE, MSO_THEME_COLOR
import codecs


prs = Presentation()
title_slide_layout = prs.slide_layouts[0]
slide = prs.slides.add_slide(title_slide_layout)


text_file = open("content.txt", "r")
# read the lyrics file
lines = text_file.readlines()

# page title
title = slide.shapes.title

# text frame in the page
tf = title.textframe

# paragrap in the text frame
p = tf.add_paragraph()
# write the first sentence 
#p.text = unicode(lines[0], encoding='utf-8')
p.text = "hello is red the rest is blue"
p.font.bold = True
p.font.color.rgb = RGBColor(255, 0, 0)

prs.save('test.pptx')
text_file.close()

in my code, the entire sentence is red; I would like to know how can I address different words to different color - again, say first half red the rest in blue.

Upvotes: 8

Views: 22443

Answers (2)

Ivan
Ivan

Reputation: 11

there is easier way to change font:

 run.text.text_frame._set_font(font,size,bold,italic)

Upvotes: -2

scanny
scanny

Reputation: 29031

Add them as separate runs like so:

from pptx.dml.color import RGBColor
from pptx.enum.dml import MSO_THEME_COLOR
from pptx.util import Pt

p = tf.add_paragraph()
run = p.add_run()
run.text = 'hello'
font = run.font
font.name = 'Calibri'
font.size = Pt(18)
font.bold = True
font.color.theme_color = MSO_THEME_COLOR.ACCENT_1

run = p.add_run()
run.text = ' is red and the rest is blue'
run.font.color.rgb = RGBColor(0, 0, 255)

A run is a sequence of characters all sharing the same character formatting. To change character formatting within a paragraph, multiple runs must be used.

Upvotes: 18

Related Questions